From f74f2df981d32e580e0990f0407a4c4bd14c8645 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Mon, 3 Mar 2025 17:18:52 +0100 Subject: [PATCH] Patches for v134 (changed) --- .../Add-bookmark-import-export-actions.patch | 107 +++---- build/patches/Add-cromite-flags-support.patch | 25 +- ...-switch-for-unsupported-clangd-flags.patch | 2 +- ...Add-lifetime-options-for-permissions.patch | 42 ++- .../Add-menu-item-to-bookmark-all-tabs.patch | 51 +-- build/patches/Add-search-engine.patch | 300 ++++++++++++++++-- .../Add-setting-to-clear-data-on-exit.patch | 264 +++++++++++++-- ...ow-building-without-enable_reporting.patch | 20 +- ...ow-building-without-supervised-users.patch | 7 +- ...Ask-for-restart-on-connection-change.patch | 4 +- ...romite-Branding--improve-settings-ui.patch | 15 +- build/patches/Cromite-Branding.patch | 63 +++- .../patches/Disable-all-predictors-code.patch | 63 +++- .../Disable-conversion-measurement-api.patch | 57 +++- .../Disable-third-party-origin-trials.patch | 11 +- ...le-search-engine-settings-desktop-ui.patch | 48 ++- .../Experimental-user-scripts-support.patch | 181 +---------- build/patches/Eyeo-Adblock-for-Cromite.patch | 96 +++--- .../Lock-Profile-Cookie-Database.patch | 10 +- .../Move-navigation-bar-to-bottom.patch | 169 ++++++---- .../Partition-MediaDeviceId-by-default.patch | 7 +- .../Partition-blobs-by-top-frame-URL.patch | 27 +- .../Remove-binary-blob-integrations.patch | 53 +++- ...l-of-execution-context-address-space.patch | 14 +- build/patches/User-agent-customization.patch | 14 +- build/patches/Viewport-Protection-flag.patch | 2 +- build/patches/Welcome-screen.patch | 7 +- .../eyeo-beta-118.0.5993.48-android_api.patch | 20 +- .../eyeo-beta-118.0.5993.48-base.patch | 182 +++++------ ...eta-118.0.5993.48-chrome_integration.patch | 7 +- ...yeo-beta-118.0.5993.48-extension_api.patch | 10 +- build/patches/kill-Auth.patch | 10 +- ...ed-chromium-no-special-hosts-domains.patch | 2 +- 33 files changed, 1234 insertions(+), 656 deletions(-) diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index bade7c8a4..118bc8f4a 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -26,9 +26,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/BookmarkToolbarViewBinder.java | 6 + .../native_page/NativePageFactory.java | 11 +- chrome/browser/BUILD.gn | 11 +- - .../bookmarks/android/bookmark_bridge.cc | 277 +++++++++++++++++ - .../bookmarks/android/bookmark_bridge.h | 29 +- - .../browser/bookmarks/bookmark_html_writer.cc | 3 + + .../bookmarks/android/bookmark_bridge.cc | 267 ++++++++++++++++ + .../bookmarks/android/bookmark_bridge.h | 30 +- .../dialogs/DownloadLocationCustomView.java | 8 +- .../DownloadLocationDialogCoordinator.java | 10 +- .../flags/android/chrome_feature_list.cc | 1 + @@ -53,7 +52,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog_linux.cc | 4 + ui/shell_dialogs/select_file_dialog_linux.h | 2 + ui/shell_dialogs/select_file_dialog_win.cc | 5 + - 42 files changed, 900 insertions(+), 30 deletions(-) + 41 files changed, 888 insertions(+), 30 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc @@ -871,7 +870,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/BookmarkBridge_jni.h" -@@ -84,12 +106,97 @@ using bookmarks::android::JavaBookmarkIdGetType; +@@ -84,6 +106,57 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; @@ -910,7 +909,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + } + } + -+ if (base::Contains(chrome::ChromeDebugURLs(), fixed_url)) { ++ if (base::Contains(chrome::ChromeDebugURLs(), fixed_url.spec())) { + return true; + } + @@ -929,47 +928,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse namespace { // The key used to connect the instance of the bookmark bridge to the bookmark // model. - const char kBookmarkBridgeUserDataKey[] = "bookmark_bridge"; - - // Compares titles of different instance of BookmarkNode. -+class FileBookmarksExportObserver: public BookmarksExportObserver { -+ public: -+ FileBookmarksExportObserver( -+ const JavaParamRef& obj, -+ ui::WindowAndroid* window, -+ const std::string& export_path) : -+ obj_(ScopedJavaGlobalRef(obj)), -+ window_(window), -+ export_path_(export_path) {} -+ -+ void OnExportFinished(Result result) override { -+ if (result == Result::kSuccess) { -+ LOG(INFO) << "Bookmarks exported successfully to " << export_path_; -+ } else if (result == Result::kCouldNotCreateFile) { -+ LOG(ERROR) << "Bookmarks export: could not create file " << export_path_; -+ } else if (result == Result::kCouldNotWriteHeader) { -+ LOG(ERROR) << "Bookmarks export: could not write header"; -+ } else if (result == Result::kCouldNotWriteNodes) { -+ LOG(ERROR) << "Bookmarks export: could not write nodes"; -+ } -+ -+ JNIEnv* env = AttachCurrentThread(); -+ Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), -+ ConvertUTF8ToJavaString(env, export_path_), -+ result == Result::kSuccess); -+ delete this; -+ } -+ -+ private: -+ const ScopedJavaGlobalRef obj_; -+ raw_ptr window_; -+ const std::string export_path_; -+}; -+ - class BookmarkTitleComparer { - public: - explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, -@@ -231,6 +338,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -231,6 +304,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -980,7 +939,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -765,6 +876,172 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -765,6 +842,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -1038,8 +997,32 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html")); + } + -+ observer_ = new FileBookmarksExportObserver(obj, window, export_path_.MaybeAsASCII()); -+ bookmark_html_writer::WriteBookmarks(profile_, export_path_, observer_); ++ bookmark_html_writer::WriteBookmarks(profile_, export_path_, ++ base::BindOnce(&BookmarkBridge::ExportBookmarksEnd, ++ weak_ptr_factory_.GetWeakPtr(), ++ base::android::ScopedJavaGlobalRef(obj), ++ window)); ++} ++ ++void BookmarkBridge::ExportBookmarksEnd(const ScopedJavaGlobalRef& obj, ++ ui::WindowAndroid* window, ++ bookmark_html_writer::Result result) const ++{ ++ auto export_path = export_path_.MaybeAsASCII(); ++ if (result == bookmark_html_writer::Result::kSuccess) { ++ LOG(INFO) << "Bookmarks exported successfully to " << export_path; ++ } else if (result == bookmark_html_writer::Result::kCouldNotCreateFile) { ++ LOG(ERROR) << "Bookmarks export: could not create file " << export_path; ++ } else if (result == bookmark_html_writer::Result::kCouldNotWriteHeader) { ++ LOG(ERROR) << "Bookmarks export: could not write header"; ++ } else if (result == bookmark_html_writer::Result::kCouldNotWriteNodes) { ++ LOG(ERROR) << "Bookmarks export: could not write nodes"; ++ } ++ ++ JNIEnv* env = AttachCurrentThread(); ++ Java_BookmarkBridge_bookmarksExported(env, obj, window->GetJavaObject(), ++ base::android::ConvertUTF8ToJavaString(env, export_path), ++ result == bookmark_html_writer::Result::kSuccess); +} + +// Attempts to create a TemplateURL from the provided data. |title| is optional. @@ -1196,7 +1179,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); -@@ -93,6 +103,15 @@ class BookmarkBridge : public ProfileObserver, +@@ -93,6 +103,17 @@ class BookmarkBridge : public ProfileObserver, jlong id, jint type); @@ -1208,21 +1191,22 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + const base::android::JavaParamRef& obj, + const base::android::JavaParamRef& java_window, + const base::android::JavaParamRef& j_export_path); ++ void ExportBookmarksEnd(const base::android::ScopedJavaGlobalRef& obj, ++ ui::WindowAndroid* window, bookmark_html_writer::Result result) const; + void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef& j_folders_obj, -@@ -362,6 +381,9 @@ class BookmarkBridge : public ProfileObserver, +@@ -362,6 +383,8 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr profile_; // weak + base::FilePath export_path_; -+ raw_ptr observer_; // weak + base::android::ScopedJavaGlobalRef java_bookmark_model_; const raw_ptr bookmark_model_; // weak const raw_ptr -@@ -376,6 +398,7 @@ class BookmarkBridge : public ProfileObserver, +@@ -376,6 +399,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; @@ -1230,7 +1214,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -407,6 +430,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -407,6 +431,10 @@ class BookmarkBridge : public ProfileObserver, bool suppress_observer_notifications_ = false; @@ -1241,19 +1225,6 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Weak pointers for creating callbacks that won't call into a destroyed // object. base::WeakPtrFactory weak_ptr_factory_; -diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc ---- a/chrome/browser/bookmarks/bookmark_html_writer.cc -+++ b/chrome/browser/bookmarks/bookmark_html_writer.cc -@@ -36,6 +36,9 @@ - #include "base/task/thread_pool.h" - #include "base/time/time.h" - #include "base/values.h" -+#if BUILDFLAG(IS_ANDROID) -+#include "base/android/content_uri_utils.h" -+#endif - #include "chrome/browser/bookmarks/bookmark_model_factory.h" - #include "chrome/browser/favicon/favicon_service_factory.h" - #include "chrome/browser/profiles/profile.h" diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java diff --git a/build/patches/Add-cromite-flags-support.patch b/build/patches/Add-cromite-flags-support.patch index 1f6e3d419..cf0a3d33c 100644 --- a/build/patches/Add-cromite-flags-support.patch +++ b/build/patches/Add-cromite-flags-support.patch @@ -46,8 +46,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../res/xml/accessibility_preferences.xml | 3 +- .../accessibility/AccessibilitySettings.java | 6 +- .../android/java/res/values/attrs.xml | 4 + - .../settings/ChromeSwitchPreference.java | 20 ++ - .../components/cached_flags/CachedFlag.java | 9 +- + .../settings/ChromeSwitchPreference.java | 19 ++ + .../components/cached_flags/CachedFlag.java | 8 +- components/components_strings.grd | 1 + .../content_settings/core/common/features.cc | 1 + .../placeholder.txt | 1 + @@ -106,7 +106,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + - 93 files changed, 808 insertions(+), 30 deletions(-) + 93 files changed, 806 insertions(+), 30 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp @@ -1037,17 +1037,16 @@ diff --git a/components/browser_ui/settings/android/java/res/values/attrs.xml b/ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java -@@ -15,6 +15,9 @@ import android.view.accessibility.AccessibilityEvent; +@@ -15,6 +15,8 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; -+import androidx.annotation.Nullable; +import android.content.res.TypedArray; + import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; -@@ -40,6 +43,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { +@@ -40,6 +42,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { /** Indicates if the preference uses a custom layout. */ private final boolean mHasCustomLayout; @@ -1059,7 +1058,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium // TOOD(crbug.com/1451550): This is an interim solution. In the long-term, we should migrate // away from a switch with dynamically changing summaries onto a radio group. /** -@@ -59,6 +67,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { +@@ -59,6 +66,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { mHasCustomLayout = ManagedPreferencesUtils.isCustomLayoutApplied(context, attrs); mUseSummaryAsTitle = true; @@ -1081,15 +1080,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium diff --git a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java --- a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java +++ b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java -@@ -5,6 +5,7 @@ - package org.chromium.components.cached_flags; - - import android.content.SharedPreferences; -+import androidx.annotation.Nullable; - - import org.chromium.base.FeatureMap; - import org.chromium.base.FeatureOverrides; -@@ -155,7 +156,7 @@ public class CachedFlag extends Flag { +@@ -155,7 +155,7 @@ public class CachedFlag extends Flag { editor.putBoolean(getSharedPreferenceKey(), featureValue); } @@ -1098,7 +1089,7 @@ diff --git a/components/cached_flags/android/java/src/org/chromium/components/ca // Create the key only once to avoid String concatenation every flag check. if (mPreferenceKey == null) { mPreferenceKey = CachedFlagsSharedPreferences.FLAGS_CACHED.createKey(mFeatureName); -@@ -163,6 +164,12 @@ public class CachedFlag extends Flag { +@@ -163,6 +163,12 @@ public class CachedFlag extends Flag { return mPreferenceKey; } diff --git a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch index 972f8aa00..775acfea8 100644 --- a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch +++ b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch @@ -29,11 +29,11 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn + if (skip_clangd_unsupported_options) { + cflags -= [ + "-Wno-thread-safety-reference-return", ++ "-Wno-nontrivial-memcall", + ] + cflags_cc -= [ + "-Wno-c++11-narrowing-const-reference", + "-Wno-missing-template-arg-list-after-template-kw", -+ "-Wno-dangling-assignment-gsl", + ] + } } diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index e73ae14fd..0baeefa9e 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -73,6 +73,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/page_info/page_info.h | 1 + .../permissions/PermissionDialogDelegate.java | 13 +++ .../PermissionDialogModelFactory.java | 82 ++++++++++++++++++- + .../embedded_permission_prompt_android.cc | 3 +- + .../embedded_permission_prompt_android.h | 2 +- .../permission_dialog_delegate.cc | 24 +++++- .../permission_dialog_delegate.h | 1 + .../permission_prompt_android.cc | 8 +- @@ -80,6 +82,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/permissions_android_strings.grd | 17 ++++ .../geolocation_permission_context_android.cc | 34 ++++++-- .../geolocation_permission_context_android.h | 13 ++- + .../embedded_permission_prompt_flow_model.cc | 2 +- .../permissions/permission_context_base.cc | 52 ++++++++++-- .../permissions/permission_context_base.h | 23 +++++- components/permissions/permission_prompt.h | 3 +- @@ -87,7 +90,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/permission_request.h | 16 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- - 35 files changed, 489 insertions(+), 68 deletions(-) + 38 files changed, 493 insertions(+), 71 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc @@ -685,6 +688,31 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per } public static ModalDialogProperties.ModalDialogButtonSpec[] getButtonSpecs( +diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +--- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc ++++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +@@ -105,7 +105,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { + delegate()->FinalizeCurrentRequests(); + } + +-void EmbeddedPermissionPromptAndroid::AcceptThisTime() { ++void EmbeddedPermissionPromptAndroid::AcceptThisTime( ++ content_settings::mojom::LifetimeMode lifetimeOption) { + prompt_model_->PrecalculateVariantsForMetrics(); + prompt_model_->RecordPermissionActionUKM( + permissions::ElementAnchoredBubbleAction::kGrantedOnce); +diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +--- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h ++++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +@@ -43,7 +43,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { + const override; + void Closing() override; + void Accept() override; +- void AcceptThisTime() override; ++ void AcceptThisTime(content_settings::mojom::LifetimeMode lifetimeOption) override; + void Acknowledge() override; + void Deny() override; + void Resumed() override; diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc @@ -941,6 +969,18 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr std::unique_ptr location_settings_; +diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/components/permissions/embedded_permission_prompt_flow_model.cc +--- a/components/permissions/embedded_permission_prompt_flow_model.cc ++++ b/components/permissions/embedded_permission_prompt_flow_model.cc +@@ -295,7 +295,7 @@ void EmbeddedPermissionPromptFlowModel::SetDelegateAction( + delegate_->Accept(); + break; + case DelegateAction::kAllowThisTime: +- delegate_->AcceptThisTime(); ++ delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); + break; + case DelegateAction::kDeny: + delegate_->Deny(); diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 1201c6bf1..39eb971aa 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -7,9 +7,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/menu/main_menu.xml | 7 ++ .../chrome/browser/ChromeTabbedActivity.java | 24 +++++++ .../browser/bookmarks/BookmarkBridge.java | 67 +++++++++++++++++++ - .../bookmarks/android/bookmark_bridge.cc | 44 +++++++++++- + .../bookmarks/android/bookmark_bridge.cc | 42 ++++++++++++ .../bookmarks/android/bookmark_bridge.h | 8 +++ - .../browser/bookmarks/bookmark_html_writer.cc | 11 ++- + .../browser/bookmarks/bookmark_html_writer.cc | 14 +++- .../bookmark_merged_surface_service.cc | 3 + .../permanent_folder_ordering_tracker.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 8 ++- .../bookmark_specifics_conversions.cc | 1 + - 25 files changed, 249 insertions(+), 14 deletions(-) + 25 files changed, 250 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml @@ -225,16 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -187,7 +187,7 @@ class FileBookmarksExportObserver: public BookmarksExportObserver { - - JNIEnv* env = AttachCurrentThread(); - Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), -- ConvertUTF8ToJavaString(env, export_path_), -+ base::android::ConvertUTF8ToJavaString(env, export_path_), - result == Result::kSuccess); - delete this; - } -@@ -360,6 +360,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -326,6 +326,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -268,7 +259,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -472,6 +499,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -438,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -276,7 +267,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -565,6 +593,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -531,6 +559,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -286,7 +277,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { -@@ -1266,6 +1297,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1256,6 +1287,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -318,7 +309,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( -@@ -221,6 +225,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -223,6 +227,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef& j_list, jint type); @@ -332,7 +323,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc -@@ -176,7 +176,8 @@ class Writer : public base::RefCountedThreadSafe { +@@ -173,14 +173,15 @@ class Writer : public base::RefCountedThreadSafe { BookmarkCodec codec; local_bookmarks_ = codec.Encode(model->bookmark_bar_node(), model->other_node(), @@ -342,17 +333,25 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b if (model->account_bookmark_bar_node()) { CHECK(model->account_other_node()); -@@ -217,6 +218,9 @@ class Writer : public base::RefCountedThreadSafe { + CHECK(model->account_mobile_node()); + account_bookmarks_ = codec.Encode( + model->account_bookmark_bar_node(), model->account_other_node(), +- model->account_mobile_node(), /*sync_metadata_str=*/std::string()); ++ model->account_mobile_node(), /*tabs_folder_node*/ nullptr, /*sync_metadata_str=*/std::string()); + } else { + CHECK(!model->account_other_node()); + CHECK(!model->account_mobile_node()); +@@ -214,6 +215,9 @@ class Writer : public base::RefCountedThreadSafe { base::Value::Dict* mobile_folder_value = local_permanent_folders->FindDict( BookmarkCodec::kMobileBookmarkFolderNameKey); CHECK(mobile_folder_value); + base::Value::Dict* tabs_collection_value = -+ roots->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); ++ local_permanent_folders->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); + CHECK(tabs_collection_value); base::Value::Dict* account_permanent_folders = account_bookmarks_.FindDict(BookmarkCodec::kRootsKey); -@@ -292,6 +296,10 @@ class Writer : public base::RefCountedThreadSafe { +@@ -289,6 +293,10 @@ class Writer : public base::RefCountedThreadSafe { return bookmark_html_writer::Result::kCouldNotWriteNodes; } @@ -363,7 +362,15 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b DecrementIndent(); if (!Write(kFolderChildrenEnd) || !Write(kNewline)) { -@@ -566,6 +574,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { +@@ -435,6 +443,7 @@ class Writer : public base::RefCountedThreadSafe { + case BookmarkNode::URL: + case BookmarkNode::OTHER_NODE: + case BookmarkNode::MOBILE: ++ case BookmarkNode::TABS_COLLECTION: + NOTREACHED(); + } + +@@ -563,6 +572,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { ExtractUrls(model->bookmark_bar_node()); ExtractUrls(model->other_node()); ExtractUrls(model->mobile_node()); diff --git a/build/patches/Add-search-engine.patch b/build/patches/Add-search-engine.patch index 1fcf7bbb4..797e7b8ff 100644 --- a/build/patches/Add-search-engine.patch +++ b/build/patches/Add-search-engine.patch @@ -8,15 +8,24 @@ Add DuckDuckGo Lite License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../search_engine_choice/default_favicon.png | Bin 0 -> 903 bytes - .../search_engine_choice_scaled_resources.grdp | 1 + - .../search_engine_choice_utils.cc | 5 +---- - .../search_engines/search_engine_countries-inc.cc | 3 +++ - components/search_engines/search_engine_type.h | 5 +++++ - .../template_url_prepopulate_data.cc | 1 - - .../template_url_prepopulate_data.h | 7 ------- - 7 files changed, 10 insertions(+), 12 deletions(-) + .../search_engine_choice/default_favicon.png | Bin 0 -> 903 bytes + ...search_engine_choice_scaled_resources.grdp | 1 + + components/search_engines/BUILD.gn | 3 ++ + components/search_engines/cromite/BUILD.gn | 12 ++++++ + .../cromite/cromite_prepopulated_engines.json | 37 ++++++++++++++++++ + .../search_engine_choice_utils.cc | 5 +-- + .../search_engine_countries-inc.cc | 2 + + .../search_engines/search_engine_type.h | 5 +++ + .../template_url_prepopulate_data.cc | 3 +- + .../template_url_prepopulate_data.h | 7 ---- + tools/json_to_struct/json_to_struct.gni | 9 +++++ + tools/json_to_struct/json_to_struct.py | 26 ++++++++---- + tools/json_to_struct/struct_generator.py | 10 +++-- + tools/variations/fieldtrial_to_struct.py | 4 +- + 14 files changed, 99 insertions(+), 25 deletions(-) create mode 100644 components/resources/default_100_percent/search_engine_choice/default_favicon.png + create mode 100644 components/search_engines/cromite/BUILD.gn + create mode 100644 components/search_engines/cromite/cromite_prepopulated_engines.json diff --git a/components/resources/default_100_percent/search_engine_choice/default_favicon.png b/components/resources/default_100_percent/search_engine_choice/default_favicon.png new file mode 100644 @@ -56,6 +65,92 @@ diff --git a/components/resources/search_engine_choice_scaled_resources.grdp b/c +diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUILD.gn +--- a/components/search_engines/BUILD.gn ++++ b/components/search_engines/BUILD.gn +@@ -70,6 +70,7 @@ static_library("search_engines") { + "//third_party/metrics_proto", + "//third_party/omnibox_proto", + "//third_party/search_engines_data:prepopulated_engines", ++ "cromite:cromite_prepopulated_engines", + ] + + deps = [ +@@ -155,6 +156,7 @@ source_set("search_engine_utils") { + ":search_engine_type", + "//components/google/core/common", + "//third_party/search_engines_data:prepopulated_engines", ++ "cromite:cromite_prepopulated_engines", + ] + + deps = [ "//url" ] +@@ -235,6 +237,7 @@ source_set("unit_tests") { + "//testing/gmock", + "//testing/gtest", + "//third_party/search_engines_data:prepopulated_engines", ++ "cromite:cromite_prepopulated_engines", + "//ui/base", + "//url", + ] +diff --git a/components/search_engines/cromite/BUILD.gn b/components/search_engines/cromite/BUILD.gn +new file mode 100644 +--- /dev/null ++++ b/components/search_engines/cromite/BUILD.gn +@@ -0,0 +1,12 @@ ++import("//tools/json_to_struct/json_to_struct.gni") ++ ++json_to_struct("cromite_prepopulated_engines") { ++ visibility = [ "//components/search_engines:*" ] ++ ++ source = "cromite_prepopulated_engines.json" ++ schema_file = "//third_party/search_engines_data/prepopulated_engines_schema.json" ++ namespace = "TemplateURLPrepopulateData" ++ excludetype = true ++ ++ deps = [ "//base" ] ++} +diff --git a/components/search_engines/cromite/cromite_prepopulated_engines.json b/components/search_engines/cromite/cromite_prepopulated_engines.json +new file mode 100644 +--- /dev/null ++++ b/components/search_engines/cromite/cromite_prepopulated_engines.json +@@ -0,0 +1,37 @@ ++{ ++ "additionals_includes": { ++ "third_party/search_engines_data/resources/definitions/prepopulated_engines.h": "" ++ }, ++ "elements": { ++ "duckduckgo_light": { ++ "name": "DuckDuckGo Light", ++ "keyword": "duckduckgo.com/lite", ++ "favicon_url": "https://duckduckgo.com/favicon.ico", ++ "search_url": "https://duckduckgo.com/lite/?q={searchTerms}", ++ "suggest_url": "https://duckduckgo.com/ac/?q={searchTerms}&type=list", ++ "type": "SEARCH_ENGINE_DUCKDUCKGOLIGHT", ++ "id": 12 ++ }, ++ ++ "googleen": { ++ "name": "Google in English", ++ "keyword": "googleen", ++ "favicon_url": "https://www.google.com/favicon.ico", ++ "search_url": "{google:baseURL}search?q={searchTerms}&ie={inputEncoding}&hl=en", ++ "suggest_url": "{google:baseSuggestURL}search?client={google:suggestClient}&q={searchTerms}&hl=en", ++ "image_url": "{google:baseURL}searchbyimage/upload?hl=en", ++ "new_tab_url": "{google:baseURL}_/chrome/newtab?hl=en&ie={inputEncoding}", ++ "contextual_search_url": "{google:baseURL}_/contextualsearch?{google:contextualSearchVersion}{google:contextualSearchContextData}&hl=en", ++ "image_url_post_params": "encoded_image={google:imageThumbnail},image_url={google:imageURL},sbisrc={google:imageSearchSource},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight}", ++ "alternate_urls": [ ++ "{google:baseURL}?hl=en#q={searchTerms}", ++ "{google:baseURL}search?hl=en#q={searchTerms}", ++ "{google:baseURL}webhp?hl=en#q={searchTerms}", ++ "{google:baseURL}s?hl=en#q={searchTerms}", ++ "{google:baseURL}s?hl=en&q={searchTerms}" ++ ], ++ "type": "SEARCH_ENGINE_GOOGLE_EN", ++ "id": 13 ++ } ++ } ++} diff --git a/components/search_engines/search_engine_choice/search_engine_choice_utils.cc b/components/search_engines/search_engine_choice/search_engine_choice_utils.cc --- a/components/search_engines/search_engine_choice/search_engine_choice_utils.cc +++ b/components/search_engines/search_engine_choice/search_engine_choice_utils.cc @@ -74,15 +169,7 @@ diff --git a/components/search_engines/search_engine_choice/search_engine_choice diff --git a/components/search_engines/search_engine_countries-inc.cc b/components/search_engines/search_engine_countries-inc.cc --- a/components/search_engines/search_engine_countries-inc.cc +++ b/components/search_engines/search_engine_countries-inc.cc -@@ -38,6 +38,7 @@ struct EngineAndTier { - - // Default (for countries with no better engine set) - constexpr EngineAndTier engines_default[] = { -+ {SearchEngineTier::kTopEngines, &googleen}, - {SearchEngineTier::kTopEngines, &google}, - {SearchEngineTier::kTopEngines, &bing}, - {SearchEngineTier::kTopEngines, &yahoo}, -@@ -1452,5 +1453,7 @@ const std::vector GetPrepopulationSetFromCountryID( +@@ -1452,5 +1452,7 @@ const std::vector GetPrepopulationSetFromCountryID( for (size_t i = 0; i < num_engines; i++) { t_url.push_back(engines[i]); } @@ -112,7 +199,16 @@ diff --git a/components/search_engines/search_engine_type.h b/components/search_ diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc -@@ -78,7 +78,6 @@ GetPrepopulatedEnginesForEeaRegionCountries(int country_id, +@@ -29,6 +29,8 @@ + #include "components/version_info/version_info.h" + #include "third_party/search_engines_data/resources/definitions/prepopulated_engines.h" + ++#include "components/search_engines/cromite/cromite_prepopulated_engines.h" ++ + namespace TemplateURLPrepopulateData { + + // Helpers -------------------------------------------------------------------- +@@ -78,7 +80,6 @@ GetPrepopulatedEnginesForEeaRegionCountries(int country_id, generator.seed(profile_seed); std::shuffle(t_urls.begin(), t_urls.end(), generator); @@ -137,4 +233,172 @@ diff --git a/components/search_engines/template_url_prepopulate_data.h b/compone // The maximum number of prepopulated search engines that can be returned in // in the rest of the world by `GetPrepopulatedEngines()`. inline constexpr size_t kMaxRowPrepopulatedEngines = 5; +diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json_to_struct.gni +--- a/tools/json_to_struct/json_to_struct.gni ++++ b/tools/json_to_struct/json_to_struct.gni +@@ -25,6 +25,11 @@ template("json_to_struct") { + action_name = target_name + "_action" + source_set_name = target_name + ++ excludetype = false ++ if (defined(invoker.excludetype)) { ++ excludetype = invoker.excludetype ++ } ++ + action(action_name) { + visibility = [ ":$source_set_name" ] + script = "//tools/json_to_struct/json_to_struct.py" +@@ -49,6 +54,10 @@ template("json_to_struct") { + "--namespace=" + invoker.namespace, + "--schema=" + rebase_path(invoker.schema_file, root_build_dir), + ] ++ ++ if (excludetype) { ++ args += [ "--excludetype=yes" ] ++ } + } + + source_set(source_set_name) { +diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_to_struct.py +--- a/tools/json_to_struct/json_to_struct.py ++++ b/tools/json_to_struct/json_to_struct.py +@@ -97,7 +97,7 @@ def _GenerateHeaderGuard(h_filename): + return re.sub(u'^_*', '', result) + u'_' # Remove leading underscores. + + +-def _GenerateH(basepath, fileroot, head, namespace, schema, description): ++def _GenerateH(basepath, fileroot, head, namespace, schema, description, excludetype): + """Generates the .h file containing the definition of the structure specified + by the schema. + +@@ -133,11 +133,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): + f.write(u'#include "%s"\n' % header) + f.write(u'\n') + ++ for header in description.get(u'additionals_includes', []): ++ f.write(u'#include "%s"\n' % header) ++ f.write(u'\n') ++ + if namespace: + f.write(u'namespace %s {\n' % namespace) + f.write(u'\n') + +- f.write(struct_generator.GenerateStruct( ++ f.write(struct_generator.GenerateStruct(excludetype, + schema['type_name'], schema['schema'])) + f.write(u'\n') + +@@ -162,7 +166,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): + f.write(u'#endif // %s\n' % header_guard) + + +-def _GenerateCC(basepath, fileroot, head, namespace, schema, description): ++def _GenerateCC(basepath, fileroot, head, namespace, schema, description, excludetype): + """Generates the .cc file containing the static initializers for the + of the elements specified in the description. + +@@ -191,7 +195,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): + f.write(element_generator.GenerateElements(schema['type_name'], + schema['schema'], description)) + +- if 'generate_array' in description: ++ if excludetype == False and 'generate_array' in description: + f.write(u'\n') + f.write( + u'const %s* const array_%s[] = {\n' % +@@ -283,7 +287,7 @@ def GenerateClass(basepath, + + + def GenerateStruct(basepath, output_root, namespace, schema, description, +- description_filename, schema_filename, year=None): ++ description_filename, schema_filename, excludetype, year): + """Generates a C++ struct from a JSON description. + + Args: +@@ -302,8 +306,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, + """ + year = int(year) if year else datetime.now().year + head = HEAD % (year, schema_filename, description_filename) +- _GenerateH(basepath, output_root, head, namespace, schema, description) +- _GenerateCC(basepath, output_root, head, namespace, schema, description) ++ _GenerateH(basepath, output_root, head, namespace, schema, description, excludetype) ++ _GenerateCC(basepath, output_root, head, namespace, schema, description, excludetype) + + if __name__ == '__main__': + parser = optparse.OptionParser( +@@ -318,11 +322,17 @@ if __name__ == '__main__': + parser.add_option('-s', '--schema', help='path to the schema file, ' + 'mandatory.') + parser.add_option('-o', '--output', help='output filename, ') ++ parser.add_option('-x', '--excludetype', help='exclude type generator, ') + (opts, args) = parser.parse_args() + + if not opts.schema: + parser.error('You must specify a --schema.') + ++ if not opts.excludetype: ++ opts.excludetype = False ++ else: ++ opts.excludetype = True ++ + description_filename = os.path.normpath(args[0]) + root, ext = os.path.splitext(description_filename) + shortroot = opts.output if opts.output else os.path.split(root)[1] +@@ -339,4 +349,4 @@ if __name__ == '__main__': + schema = _Load(opts.schema) + description = _Load(description_filename) + GenerateStruct(basepath, output_root, opts.namespace, schema, description, +- description_filename, opts.schema) ++ description_filename, opts.schema, opts.excludetype, datetime.now().year) +diff --git a/tools/json_to_struct/struct_generator.py b/tools/json_to_struct/struct_generator.py +--- a/tools/json_to_struct/struct_generator.py ++++ b/tools/json_to_struct/struct_generator.py +@@ -30,20 +30,24 @@ def GenerateField(field_info): + else: + raise RuntimeError('Unknown field type "%s"' % type) + +-def GenerateStruct(type_name, schema): ++def GenerateStruct(excludetype, type_name, schema): + """Generate a string defining a structure containing the fields specified in + the schema list. + """ + lines = [] ++ if excludetype: ++ lines.append('struct %s;' % type_name) ++ return '\n'.join(lines) + '\n' ++ + lines.append('struct %s {' % type_name) + for field_info in schema: + if field_info['type'] == 'struct': +- lines.insert(0, GenerateStruct(field_info['type_name'], ++ lines.insert(0, GenerateStruct(excludetype, field_info['type_name'], + field_info['fields'])) + elif (field_info['type'] == 'array' + and field_info['contents']['type'] == 'struct'): + contents = field_info['contents'] +- lines.insert(0, GenerateStruct(contents['type_name'], ++ lines.insert(0, GenerateStruct(excludetype, contents['type_name'], + contents['fields'])) + lines.append(' ' + GenerateField(field_info) + ';') + lines.append('};') +diff --git a/tools/variations/fieldtrial_to_struct.py b/tools/variations/fieldtrial_to_struct.py +--- a/tools/variations/fieldtrial_to_struct.py ++++ b/tools/variations/fieldtrial_to_struct.py +@@ -232,14 +232,14 @@ def main(arguments): + json_to_struct.GenerateStruct( + basepath, output_root, opts.namespace, schema, description, + os.path.split(description_filename)[1], os.path.split(opts.schema)[1], +- opts.year) ++ False, opts.year) + + # TODO(peilinwang) filter the schema by platform, form_factor, etc. + if opts.java: + json_to_struct.GenerateClass(basepath, output_root, opts.namespace, schema, + description, + os.path.split(description_filename)[1], +- os.path.split(opts.schema)[1], opts.year) ++ os.path.split(opts.schema)[1], False, opts.year) + + + if __name__ == '__main__': -- diff --git a/build/patches/Add-setting-to-clear-data-on-exit.patch b/build/patches/Add-setting-to-clear-data-on-exit.patch index 172ebb02c..f43012c97 100644 --- a/build/patches/Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/Add-setting-to-clear-data-on-exit.patch @@ -5,34 +5,40 @@ Subject: Add setting to clear data on exit License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- chrome/android/chrome_java_sources.gni | 1 + + .../java/res/xml/privacy_preferences.xml | 5 ++ .../chrome/browser/ChromeTabbedActivity.java | 7 +- - .../ClearBrowsingDataFragment.java | 12 +++ - .../ClearBrowsingDataFragmentAtStart.java | 74 +++++++++++++++++++ + .../browsing_data/BrowsingDataBridge.java | 12 +-- + .../ClearBrowsingDataFragment.java | 31 ++++++-- + .../ClearBrowsingDataFragmentAtStart.java | 79 +++++++++++++++++++ chrome/app/settings_strings.grdp | 10 +++ + .../browsing_data/browsing_data_bridge.cc | 17 +++- .../chrome_browsing_data_lifetime_manager.cc | 22 +++++- .../chrome_browsing_data_remover_delegate.cc | 15 ++++ - .../api/settings_private/prefs_util.cc | 17 +++++ + .../api/settings_private/prefs_util.cc | 17 ++++ .../browser/profiles/ProfileManagerUtils.java | 5 ++ .../profiles/android/profile_manager_utils.cc | 5 ++ chrome/browser/profiles/profile_manager.cc | 15 +++- chrome/browser/profiles/profile_manager.h | 2 + .../clear_browsing_data_dialog.html | 44 +++++++++++ .../clear_browsing_data_dialog.ts | 2 + - .../strings/android_chrome_strings.grd | 5 +- + .../strings/android_chrome_strings.grd | 3 + + .../Add-setting-to-clear-data-on-exit.grdp | 9 +++ .../settings_localized_strings_provider.cc | 1 + .../content/browsing_data_helper.cc | 9 ++- + components/browsing_data/core/BUILD.gn | 5 ++ .../core/browsing_data_policies_utils.cc | 20 ++--- .../core/browsing_data_policies_utils.h | 11 +++ .../browsing_data/core/browsing_data_utils.cc | 31 ++++++++ - .../core/clear_browsing_data_tab.h | 2 +- - components/browsing_data/core/pref_names.cc | 17 +++++ + .../core/clear_browsing_data_tab.h | 3 +- + components/browsing_data/core/pref_names.cc | 17 ++++ components/browsing_data/core/pref_names.h | 10 +++ .../search_engines/template_url_service.cc | 1 + content/browser/dips/dips_service_impl.cc | 2 +- content/browser/storage_partition_impl.cc | 1 + .../public/browser/browsing_data_remover.h | 7 +- - 27 files changed, 328 insertions(+), 20 deletions(-) + 32 files changed, 386 insertions(+), 33 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java + create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni @@ -45,6 +51,21 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java", "java/src/org/chromium/chrome/browser/browsing_data/OtherFormsOfHistoryDialogFragment.java", "java/src/org/chromium/chrome/browser/browsing_data/UrlFilter.java", +diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml +--- a/chrome/android/java/res/xml/privacy_preferences.xml ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -19,6 +19,11 @@ found in the LICENSE file. + android:title="@string/clear_browsing_data_title" + android:summary="@string/clear_browsing_data_summary" + android:fragment="org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment" /> ++ + mPageTitle = new ObservableSupplierImpl<>(); ++ protected final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); + + /** + * @return All available {@link DialogOption} entries. +@@ -361,7 +367,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + } + + /** Called when browsing data is about to be cleared. */ +- private void onClearBrowsingData() { ++ protected void onClearBrowsingData() { + RecordUserAction.record("ClearBrowsingData_AdvancedTab"); + + if (ChromeFeatureList.sClearBrowsingDataAndroidSurvey.isEnabled()) { +@@ -451,6 +457,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + BrowsingDataBridge.getForProfile(getProfile()) + .setBrowsingDataDeletionPreference( + ClearBrowsingDataFragment.getDataType(item.getOption()), ++ getClearBrowsingDataTabType(), + item.isSelected()); + } + +@@ -458,8 +465,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + .setBrowsingDataDeletionTimePeriod(mLastSelectedTimePeriod); + } + ++ protected int getClearBrowsingDataTabType() { ++ return ClearBrowsingDataTab.ADVANCED; ++ } ++ + /** Returns the list of supported {@link DialogOption}. */ +- private List getDialogOptions(Bundle fragmentArgs) { ++ protected List getDialogOptions(Bundle fragmentArgs) { + String referrer = + fragmentArgs.getString( + ClearBrowsingDataFragment.CLEAR_BROWSING_DATA_REFERRER, null); +@@ -485,6 +496,10 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment DialogOption.CLEAR_SITE_SETTINGS); } @@ -96,7 +195,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C /** * Decides whether a given dialog option should be selected when the dialog is initialized. * -@@ -561,6 +571,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -493,7 +508,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + */ + private boolean isOptionSelectedByDefault(@DialogOption int option) { + return BrowsingDataBridge.getForProfile(getProfile()) +- .getBrowsingDataDeletionPreference(getDataType(option)); ++ .getBrowsingDataDeletionPreference(getDataType(option), getClearBrowsingDataTabType()); + } + + /** +@@ -561,6 +576,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment * options. */ private void onClearButtonClicked() { @@ -104,7 +212,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C if (shouldShowImportantSitesDialog()) { showImportantDialogThenClear(); return; -@@ -591,6 +602,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -591,6 +607,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment Button clearButton = (Button) getView().findViewById(R.id.clear_button); boolean isEnabled = !getSelectedOptions().isEmpty(); clearButton.setEnabled(isEnabled); @@ -112,11 +220,33 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C } private int getSpinnerIndex( +@@ -666,7 +683,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + .getBoolean(Pref.ALLOW_DELETING_BROWSER_HISTORY)) { + enabled = false; + browsingDataBridge.setBrowsingDataDeletionPreference( +- getDataType(DialogOption.CLEAR_HISTORY), false); ++ getDataType(DialogOption.CLEAR_HISTORY), getClearBrowsingDataTabType(), false); + } + + // Disable tabs closure if the user is in multi-window mode. +@@ -696,8 +713,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + mSigninManager.addSignInStateObserver(this); + + setHasOptionsMenu(true); ++ ++ onCustomizePreferences(savedInstanceState, rootKey); + } + ++ protected void onCustomizePreferences(Bundle savedInstanceState, String rootKey) {} ++ + @Override + public ObservableSupplier getPageTitle() { + return mPageTitle; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java -@@ -0,0 +1,74 @@ +@@ -0,0 +1,79 @@ +/* + This file is part of Bromite. + @@ -171,6 +301,11 @@ new file mode 100644 + } + + @Override ++ protected void onCustomizePreferences(Bundle savedInstanceState, String rootKey) { ++ mPageTitle.set(getString(R.string.clear_browsing_data_at_start_title)); ++ } ++ ++ @Override + protected int getClearBrowsingDataTabType() { + return ClearBrowsingDataTab.AT_START; + } @@ -183,7 +318,7 @@ new file mode 100644 + } + + @Override -+ protected void onClearBrowsingData() { ++ public void onClearBrowsingData() { + } + + @Override @@ -211,6 +346,61 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp Delete history, cookies, cache, and more +diff --git a/chrome/browser/android/browsing_data/browsing_data_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_bridge.cc +--- a/chrome/browser/android/browsing_data/browsing_data_bridge.cc ++++ b/chrome/browser/android/browsing_data/browsing_data_bridge.cc +@@ -70,6 +70,15 @@ PrefService* GetPrefService(Profile* profile) { + return profile->GetOriginalProfile()->GetPrefs(); + } + ++browsing_data::ClearBrowsingDataTab ToTabEnum(jint clear_browsing_data_tab) { ++ DCHECK_GE(clear_browsing_data_tab, 0); ++ DCHECK_LE(clear_browsing_data_tab, ++ static_cast(browsing_data::ClearBrowsingDataTab::MAX_VALUE)); ++ ++ return static_cast( ++ clear_browsing_data_tab); ++} ++ + void OnBrowsingDataModelBuilt(JNIEnv* env, + const ScopedJavaGlobalRef& java_callback, + std::unique_ptr model) { +@@ -222,7 +231,8 @@ static void JNI_BrowsingDataBridge_MarkOriginAsImportantForTesting( + static jboolean JNI_BrowsingDataBridge_GetBrowsingDataDeletionPreference( + JNIEnv* env, + Profile* profile, +- jint data_type) { ++ jint data_type, ++ jint clear_browsing_data_tab) { + DCHECK_GE(data_type, 0); + DCHECK_LE(data_type, + static_cast(browsing_data::BrowsingDataType::MAX_VALUE)); +@@ -234,7 +244,7 @@ static jboolean JNI_BrowsingDataBridge_GetBrowsingDataDeletionPreference( + std::string pref; + if (!browsing_data::GetDeletionPreferenceFromDataType( + static_cast(data_type), +- browsing_data::ClearBrowsingDataTab::ADVANCED, &pref)) { ++ ToTabEnum(clear_browsing_data_tab), &pref)) { + return false; + } + +@@ -245,6 +255,7 @@ static void JNI_BrowsingDataBridge_SetBrowsingDataDeletionPreference( + JNIEnv* env, + Profile* profile, + jint data_type, ++ jint clear_browsing_data_tab, + jboolean value) { + DCHECK_GE(data_type, 0); + DCHECK_LE(data_type, +@@ -253,7 +264,7 @@ static void JNI_BrowsingDataBridge_SetBrowsingDataDeletionPreference( + std::string pref; + if (!browsing_data::GetDeletionPreferenceFromDataType( + static_cast(data_type), +- browsing_data::ClearBrowsingDataTab::ADVANCED, &pref)) { ++ ToTabEnum(clear_browsing_data_tab), &pref)) { + return; + } + diff --git a/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc b/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc --- a/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc @@ -372,7 +562,7 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile } +void ProfileManager::RemoveBrowsingDataAtStart() { -+ base::ranges::for_each( ++ std::ranges::for_each( + GetLoadedProfiles(), + [](Profile* profile) { + auto* browsing_data_lifetime_manager = @@ -484,15 +674,6 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1458,7 +1458,7 @@ For example, some websites may respond to this request by showing you ads that a - Delete browsing data - - -- Delete history, cookies, site data, cache… -+ Delete immediately or choose when to delete browsing data - - - Deleted Chrome data @@ -1570,6 +1570,9 @@ Your Google account may have other forms of browsing history like searches and a Some of your history might not show up here. To see all your Chrome history, open full Chrome history. Also, your Google Account may have other forms of browsing history at <link>myactivity.google.com</link>. @@ -503,6 +684,20 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Your Google Account may have other forms of browsing history at <link>myactivity.google.com</link>. +diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp +@@ -0,0 +1,9 @@ ++ ++ ++ ++ Clear the data at opening ++ ++ ++ Choose what to delete when the browser opens ++ ++ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc @@ -533,6 +728,28 @@ diff --git a/components/browsing_data/content/browsing_data_helper.cc b/componen return predicate.Run(url); } +diff --git a/components/browsing_data/core/BUILD.gn b/components/browsing_data/core/BUILD.gn +--- a/components/browsing_data/core/BUILD.gn ++++ b/components/browsing_data/core/BUILD.gn +@@ -62,6 +62,10 @@ if (is_android) { + visibility = [ ":*" ] + sources = [ "browsing_data_utils.h" ] + } ++ java_cpp_enum("clear_browsing_data_tab_javagen") { ++ visibility = [ ":*" ] ++ sources = [ "clear_browsing_data_tab.h" ] ++ } + java_cpp_enum("cookie_or_cache_deletion_choice_javagen") { + # External code should depend on ":java" instead. + visibility = [ ":*" ] +@@ -71,6 +75,7 @@ if (is_android) { + android_library("java") { + srcjar_deps = [ + ":browsing_data_utils_javagen", ++ ":clear_browsing_data_tab_javagen", + ":cookie_or_cache_deletion_choice_javagen", + ] + deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] diff --git a/components/browsing_data/core/browsing_data_policies_utils.cc b/components/browsing_data/core/browsing_data_policies_utils.cc --- a/components/browsing_data/core/browsing_data_policies_utils.cc +++ b/components/browsing_data/core/browsing_data_policies_utils.cc @@ -633,11 +850,12 @@ diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/b diff --git a/components/browsing_data/core/clear_browsing_data_tab.h b/components/browsing_data/core/clear_browsing_data_tab.h --- a/components/browsing_data/core/clear_browsing_data_tab.h +++ b/components/browsing_data/core/clear_browsing_data_tab.h -@@ -13,7 +13,7 @@ namespace browsing_data { +@@ -13,7 +13,8 @@ namespace browsing_data { // value for dialogs without separate tabs is advanced. // TODO(dullweber): Maybe rename "ADVANCED" to "DEFAULT" because it is used in // multiple places without a differentiation between advanced and basic. -enum class ClearBrowsingDataTab { BASIC, ADVANCED, MAX_VALUE = ADVANCED }; ++// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data +enum class ClearBrowsingDataTab { BASIC, ADVANCED, AT_START, MAX_VALUE = AT_START }; } // namespace browsing_data diff --git a/build/patches/Allow-building-without-enable_reporting.patch b/build/patches/Allow-building-without-enable_reporting.patch index 499cf6902..b70484c82 100644 --- a/build/patches/Allow-building-without-enable_reporting.patch +++ b/build/patches/Allow-building-without-enable_reporting.patch @@ -10,6 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/network/reporting_service_proxy.cc | 3 +++ .../renderer_host/render_frame_host_impl.cc | 6 ------ .../coop/cross_origin_opener_policy_reporter.cc | 16 +++++++--------- + .../dip/document_isolation_policy_reporter.cc | 2 ++ .../web_package/signed_exchange_reporter.cc | 2 ++ ...content_switch_dependent_feature_overrides.cc | 1 + .../Allow-building-without-enable_reporting.inc | 2 ++ @@ -25,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/core/frame/reporting_context.cc | 9 +++++++++ .../renderer/core/frame/reporting_context.h | 7 +++++-- .../renderer/core/frame/reporting_observer.cc | 3 +-- - 21 files changed, 61 insertions(+), 26 deletions(-) + 22 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chrome_report_sender.cc @@ -215,6 +216,23 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c } } // namespace content +diff --git a/content/browser/security/dip/document_isolation_policy_reporter.cc b/content/browser/security/dip/document_isolation_policy_reporter.cc +--- a/content/browser/security/dip/document_isolation_policy_reporter.cc ++++ b/content/browser/security/dip/document_isolation_policy_reporter.cc +@@ -94,11 +94,13 @@ void DocumentIsolationPolicyReporter::QueueAndNotify( + } + body_to_pass.Set("disposition", disposition); + ++#if BUILDFLAG(ENABLE_REPORTING) + if (auto* storage_partition = storage_partition_.get()) { + storage_partition->GetNetworkContext()->QueueReport( + kType, *endpoint, context_url_, reporting_source_, + network_anonymization_key_, std::move(body_to_pass)); + } ++#endif + } + } + diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/browser/web_package/signed_exchange_reporter.cc --- a/content/browser/web_package/signed_exchange_reporter.cc +++ b/content/browser/web_package/signed_exchange_reporter.cc diff --git a/build/patches/Allow-building-without-supervised-users.patch b/build/patches/Allow-building-without-supervised-users.patch index 877529db5..30af6ffb7 100644 --- a/build/patches/Allow-building-without-supervised-users.patch +++ b/build/patches/Allow-building-without-supervised-users.patch @@ -17,8 +17,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/browser/supervised_user_preferences.cc | 6 +++++- .../core/browser/supervised_user_service.cc | 5 +---- .../supervised_user/core/browser/supervised_user_utils.cc | 1 + - components/supervised_user/core/common/features.cc | 7 +++++++ - 14 files changed, 18 insertions(+), 30 deletions(-) + components/supervised_user/core/common/features.cc | 6 ++++++ + 14 files changed, 17 insertions(+), 30 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn @@ -229,12 +229,11 @@ diff --git a/components/supervised_user/core/browser/supervised_user_utils.cc b/ diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc --- a/components/supervised_user/core/common/features.cc +++ b/components/supervised_user/core/common/features.cc -@@ -171,4 +171,11 @@ BASE_FEATURE(kReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS, +@@ -171,4 +171,10 @@ BASE_FEATURE(kReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS, "ReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS", base::FEATURE_DISABLED_BY_DEFAULT); #endif + -+SET_CROMITE_FEATURE_DISABLED(kKidFriendlyContentFeed); +SET_CROMITE_FEATURE_DISABLED(kLocalWebApprovals); +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) +SET_CROMITE_FEATURE_DISABLED(kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); diff --git a/build/patches/Ask-for-restart-on-connection-change.patch b/build/patches/Ask-for-restart-on-connection-change.patch index 8a28509c3..71d9f4dd1 100644 --- a/build/patches/Ask-for-restart-on-connection-change.patch +++ b/build/patches/Ask-for-restart-on-connection-change.patch @@ -181,7 +181,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/in + new WebContentsObserver(webContents) { + @Override + public void didStartLoading(GURL url) { -+ webContents.removeObserver(this); ++ observe(null); + SnackbarManager snackbarManager = mSnackbarManagerSupplier.get(); + snackbarManager.dismissSnackbars(controller); + } @@ -415,7 +415,7 @@ diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java --- a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java +++ b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java -@@ -457,6 +457,16 @@ public class TabWindowManagerImpl implements ActivityStateListener, TabWindowMan +@@ -458,6 +458,16 @@ public class TabWindowManagerImpl implements ActivityStateListener, TabWindowMan return null; } diff --git a/build/patches/Cromite-Branding--improve-settings-ui.patch b/build/patches/Cromite-Branding--improve-settings-ui.patch index 262671820..ae6efbec5 100644 --- a/build/patches/Cromite-Branding--improve-settings-ui.patch +++ b/build/patches/Cromite-Branding--improve-settings-ui.patch @@ -8,10 +8,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- chrome/android/chrome_java_resources.gni | 2 +- .../android/java/res/xml/main_preferences.xml | 4 +- - .../res/xml/privacy_preferences_cromite.xml | 198 ++++++++++++++++++ + .../res/xml/privacy_preferences_cromite.xml | 197 ++++++++++++++++++ .../privacy/settings/PrivacySettings.java | 4 +- .../Cromite-settings-ui.grdp | 15 ++ - 5 files changed, 218 insertions(+), 5 deletions(-) + 5 files changed, 217 insertions(+), 5 deletions(-) create mode 100644 chrome/android/java/res/xml/privacy_preferences_cromite.xml create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Cromite-settings-ui.grdp @@ -52,7 +52,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences_cromite.xml b/chrom new file mode 100644 --- /dev/null +++ b/chrome/android/java/res/xml/privacy_preferences_cromite.xml -@@ -0,0 +1,198 @@ +@@ -0,0 +1,197 @@ +