diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index bade7c8a4c182356bbfa412af8be9a770c2515f2..118bc8f4a2e3ed523c3689fe8f8cfea817f0fd23 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 1f6e3d419f19fa18f2b7b7078f32d912ca0461f3..cf0a3d33c4be7e43455ff438708b8c4da9b41f0e 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 972f8aa002f8a1abbcc07b09222a9092e1967d56..775acfea8d9e7146c3ca9be37d208f76e17bdbfd 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 e73ae14fdc985d5f8d1aa5e571b703a09b74b908..0baeefa9ec8cb1cb275b0f06ce8f161ef3b10186 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 1201c6bf18ea213a29e285468326f74b35b04234..39eb971aa1d5dd91da913bf9605ccdb662ad2113 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 1fcf7bbb4e7f6534441d8721f39d2dedc98f95f9..797e7b8ffa9a58feefceb60f97814cdefff00aeb 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 172ebb02cd755ea65095c2a08abb4750503e79f8..f43012c97f1870184389d2cfc726fd2b334174a3 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 499cf69021b623ceefd3de1857e850b84cf045dc..b70484c8283195fea0fce6c8d994194c2ad83da4 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 877529db55f9078683ddb11a8e06689b29bf31d2..30af6ffb74ff5568f6d0e10a6533b5075c04193a 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 8a28509c32720969250a26eb15db5f5b65993571..71d9f4dd143df6fdb31e279c9c19acc135b26e78 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 262671820ab3bc6adfe2823dd9efb7131aa6f2d6..ae6efbec517846663c8875da8a2a6569380c2fb7 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 @@ +