diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch index 2276e291..ab607e6e 100644 --- a/build/patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -31,8 +31,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html gpu/config/gpu_util.cc | 8 ++++++++ gpu/config/gpu_workaround_list.txt | 1 + gpu/ipc/service/gpu_init.cc | 8 ++++++++ - gpu/ipc/service/stream_texture_android.cc | 10 +++++++++- - 12 files changed, 87 insertions(+), 1 deletion(-) + media/gpu/android/video_frame_factory_impl.cc | 12 +++++++++++- + 12 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc create mode 100644 cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc @@ -90,7 +90,7 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3479,6 +3479,10 @@ +@@ -3509,6 +3509,10 @@ "chrome-signin-team@google.com" ], "expiry_milestone": 138 @@ -119,7 +119,7 @@ new file mode 100644 diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json -@@ -2597,6 +2597,22 @@ +@@ -2613,6 +2613,22 @@ "no_downscaled_overlay_promotion" ] }, @@ -215,7 +215,7 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc #endif #if BUILDFLAG(ENABLE_VULKAN) -@@ -684,6 +685,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, +@@ -687,6 +688,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, } #endif // BUILDFLAG(IS_WIN) @@ -229,24 +229,29 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc if (gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] != kGpuFeatureStatusEnabled || !InitializeVulkan()) { -diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc ---- a/gpu/ipc/service/stream_texture_android.cc -+++ b/gpu/ipc/service/stream_texture_android.cc -@@ -50,7 +50,15 @@ std::unique_ptr MakeCurrent( - } +diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc +--- a/media/gpu/android/video_frame_factory_impl.cc ++++ b/media/gpu/android/video_frame_factory_impl.cc +@@ -35,10 +35,20 @@ namespace { - TextureOwner::Mode GetTextureOwnerMode() { -- return base::android::EnableAndroidImageReader() -+ const bool a_image_reader_supported = -+ base::android::AndroidImageReader::GetInstance().IsSupported(); + gpu::TextureOwner::Mode GetTextureOwnerMode( + VideoFrameFactory::OverlayMode overlay_mode) { ++ CHECK: https://source.chromium.org/chromium/chromium/src/+/0abf370caaac29344f1d3fe4c416b75a17392b65 + + // TODO(vikassoni) : Currently we have 2 different flags to enable/disable + // AImageReader - one for MCVD and other for MediaPlayer here. Merge those 2 + // flags into a single flag. Keeping the 2 flags separate for now since finch + // experiment using this flag is in progress. -+ return a_image_reader_supported && base::android::EnableAndroidImageReader() && ++ const bool a_image_reader_supported = ++ base::android::AndroidImageReader::GetInstance().IsSupported(); ++ const bool enabled = a_image_reader_supported && base::android::EnableAndroidImageReader() && + base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer) - ? TextureOwner::Mode::kAImageReaderInsecure - : TextureOwner::Mode::kSurfaceTextureInsecure; - } + switch (overlay_mode) { + case VideoFrameFactory::OverlayMode::kDontRequestPromotionHints: + case VideoFrameFactory::OverlayMode::kRequestPromotionHints: +- return base::android::EnableAndroidImageReader() ++ return enabled + ? gpu::TextureOwner::Mode::kAImageReaderInsecure + : gpu::TextureOwner::Mode::kSurfaceTextureInsecure; + case VideoFrameFactory::OverlayMode::kSurfaceControlSecure: -- diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 2059b5d9..e458662d 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -247,7 +247,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -219,6 +219,8 @@ static_library("browser") { +@@ -222,6 +222,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -270,7 +270,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3583,8 +3592,6 @@ static_library("browser") { +@@ -3639,8 +3648,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -282,7 +282,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn 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 -@@ -66,6 +66,28 @@ +@@ -68,6 +68,28 @@ #include "content/public/browser/web_contents.h" #include "url/gurl.h" @@ -311,7 +311,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/browser/bookmarks/android/jni_headers/BookmarkBridge_jni.h" -@@ -84,6 +106,57 @@ using bookmarks::android::JavaBookmarkIdGetType; +@@ -86,6 +108,57 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; @@ -369,7 +369,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. -@@ -231,6 +304,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -296,6 +369,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -380,7 +380,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -782,6 +859,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -847,6 +924,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -655,9 +655,9 @@ 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. -@@ -435,6 +459,10 @@ class BookmarkBridge : public ProfileObserver, - - bool suppress_observer_notifications_ = false; +@@ -437,6 +461,10 @@ class BookmarkBridge : public ProfileObserver, + base::TimeTicks load_start_time_; + bool loading_notification_sent_ = false; + const std::string FileSelectedImpl(const base::FilePath& path); + void FileSelectedImplOnUIThread(const base::FilePath& path, @@ -679,7 +679,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Provides the communication channel for Android to fetch and manipulate the bookmark model stored * in native. -@@ -52,6 +55,9 @@ class BookmarkBridge { +@@ -53,6 +56,9 @@ class BookmarkBridge { private boolean mIsNativeBookmarkModelLoaded; private boolean mInitializedPartnerBookmarks; @@ -689,7 +689,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows // Lazily set pseudo-constants. These should never change at runtime. Used to avoid crossing // JNI to fetch information. private @Nullable BookmarkId mRootFolderId; -@@ -499,6 +505,35 @@ class BookmarkBridge { +@@ -500,6 +506,35 @@ class BookmarkBridge { .getTotalBookmarkCount(mNativeBookmarkBridge, id.getId(), id.getType()); } @@ -725,7 +725,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Synchronously gets a list of bookmarks that match the specified search query. * -@@ -1121,6 +1156,10 @@ class BookmarkBridge { +@@ -1124,6 +1159,10 @@ class BookmarkBridge { void getChildIds( long nativeBookmarkBridge, long id, int type, List bookmarksList); @@ -739,7 +739,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java -@@ -65,6 +65,16 @@ public interface BookmarkDelegate { +@@ -67,6 +67,16 @@ public interface BookmarkDelegate { /** Shows the search UI. */ void openSearchUi(); @@ -1139,7 +1139,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java -@@ -98,6 +98,17 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -103,6 +103,17 @@ public class BookmarkToolbar extends SelectableListToolbar setOnMenuItemClickListener(dragEnabled ? null : this); } @@ -1157,7 +1157,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows void setEditButtonVisible(boolean visible) { mEditButtonVisible = visible; getMenu().findItem(R.id.edit_menu_id).setVisible(visible); -@@ -174,6 +185,12 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -179,6 +190,12 @@ public class BookmarkToolbar extends SelectableListToolbar void setCurrentFolder(BookmarkId folder) { mCurrentFolder = mBookmarkModel.getBookmarkById(folder); @@ -1170,7 +1170,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows } void setNavigateBackRunnable(Runnable navigateBackRunnable) { -@@ -197,6 +214,13 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -203,6 +220,13 @@ public class BookmarkToolbar extends SelectableListToolbar @Override public boolean onMenuItemClick(MenuItem menuItem) { hideOverflowMenu(); @@ -1181,10 +1181,10 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + mExportBookmarkRunnable.run(); + return true; + } - return mMenuIdClickedFunction.apply(menuItem.getItemId()); + return assumeNonNull(mMenuIdClickedFunction).apply(menuItem.getItemId()); } -@@ -217,6 +241,9 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -223,6 +247,9 @@ public class BookmarkToolbar extends SelectableListToolbar protected void showNormalView() { super.showNormalView(); @@ -1197,7 +1197,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java -@@ -135,6 +135,10 @@ class BookmarkToolbarMediator +@@ -140,6 +140,10 @@ class BookmarkToolbarMediator mBookmarkDelegate = bookmarkDelegate; mModel.set( BookmarkToolbarProperties.NAVIGATE_BACK_RUNNABLE, this::onNavigateBack); @@ -1211,7 +1211,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java -@@ -84,6 +84,10 @@ class BookmarkToolbarProperties { +@@ -86,6 +86,10 @@ class BookmarkToolbarProperties { static final WritableObjectPropertyKey NEXT_FOCUSABLE_VIEW = new WritableObjectPropertyKey<>(); @@ -1222,7 +1222,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows static final PropertyKey[] ALL_KEYS = { SELECTION_DELEGATE, -@@ -112,6 +116,8 @@ class BookmarkToolbarProperties { +@@ -114,6 +118,8 @@ class BookmarkToolbarProperties { SELECTION_MODE_SHOW_MOVE, SELECTION_MODE_SHOW_MARK_READ, SELECTION_MODE_SHOW_MARK_UNREAD, @@ -1235,7 +1235,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java -@@ -54,6 +54,12 @@ class BookmarkToolbarViewBinder { +@@ -56,6 +56,12 @@ class BookmarkToolbarViewBinder { model.get(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID)); } else if (key == BookmarkToolbarProperties.CURRENT_FOLDER) { bookmarkToolbar.setCurrentFolder(model.get(BookmarkToolbarProperties.CURRENT_FOLDER)); @@ -1328,18 +1328,18 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -218,6 +218,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { - &kBackgroundThreadPool, +@@ -223,6 +223,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kBatchTabRestore, &kBlockIntentsWhileLocked, &kBookmarkPaneAndroid, + &kBookmarksExportUseSaf, &kBottomBrowserControlsRefactor, &kTabClosureMethodRefactor, - &kBrowserControlsEarlyResize, + &kBrowserControlsDebugging, diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -604,6 +604,7 @@ public abstract class ChromeFeatureList { +@@ -624,6 +624,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; @@ -1378,9 +1378,9 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ #include "components/favicon_base/favicon_usage_data.h" #include "components/history/core/browser/history_types.h" #include "components/search_engines/template_url_service.h" -@@ -71,6 +72,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { - virtual void AddBookmarks(const std::vector& bookmarks, - const std::u16string& top_level_folder_name); +@@ -75,6 +76,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { + const std::vector& bookmarks, + const std::u16string& top_level_folder_name); + virtual void AddBookmarksWithModel( + bookmarks::BookmarkModel* model, @@ -1393,7 +1393,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -144,6 +144,8 @@ public final class ChromePreferenceKeys { +@@ -140,6 +140,8 @@ public final class ChromePreferenceKeys { "enhanced_bookmark_last_used_parent_folder"; public static final String BOOKMARKS_SORT_ORDER = "Chrome.Bookmarks.BookmarkRowSortOrder"; public static final String BOOKMARKS_VISUALS_PREF = "Chrome.Bookmarks.BookmarkRowDisplay"; @@ -1402,7 +1402,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** Whether Chrome is set as the default browser. Default value is false. */ public static final String CHROME_DEFAULT_BROWSER = "applink.chrome_default_browser"; -@@ -995,6 +997,7 @@ public final class ChromePreferenceKeys { +@@ -999,6 +1001,7 @@ public final class ChromePreferenceKeys { AUXILIARY_SEARCH_SCHEMA_VERSION, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, @@ -1441,7 +1441,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -351,6 +351,9 @@ static_library("common_lib") { +@@ -352,6 +352,9 @@ static_library("common_lib") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -1463,7 +1463,7 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn "importer/bookmarks_file_importer.cc", "importer/bookmarks_file_importer.h", "importer/external_process_importer_bridge.cc", -@@ -221,6 +219,11 @@ static_library("utility") { +@@ -222,6 +220,11 @@ static_library("utility") { deps += [ "//chrome/services/pdf:lib" ] } @@ -1478,16 +1478,16 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/importer/bookmark_html_reader.cc --- a/chrome/utility/importer/bookmark_html_reader.cc +++ b/chrome/utility/importer/bookmark_html_reader.cc -@@ -17,7 +17,9 @@ +@@ -16,7 +16,9 @@ + #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" - #include "chrome/common/importer/imported_bookmark_entry.h" +#if !BUILDFLAG(IS_ANDROID) #include "chrome/utility/importer/favicon_reencode.h" +#endif #include "components/search_engines/search_terms_data.h" #include "components/search_engines/template_url.h" - #include "net/base/data_url.h" + #include "components/user_data_importer/common/imported_bookmark_entry.h" @@ -55,6 +57,7 @@ bool GetAttribute(const std::string& attribute_list, return true; } @@ -1513,8 +1513,8 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im + const base::RepeatingCallback cancellation_callback, + const base::RepeatingCallback valid_url_callback, const base::FilePath& file_path, - std::vector* bookmarks, - std::vector* search_engines, + std::vector* bookmarks, + std::vector* search_engines, favicon_base::FaviconUsageDataList* favicons) { std::string content; - base::ReadFileToString(file_path, &content); @@ -1561,8 +1561,8 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h --- a/chrome/utility/importer/bookmark_html_reader.h +++ b/chrome/utility/importer/bookmark_html_reader.h -@@ -50,6 +50,14 @@ void ImportBookmarksFile( - std::vector* search_engines, +@@ -53,6 +53,14 @@ void ImportBookmarksFile( + std::vector* search_engines, favicon_base::FaviconUsageDataList* favicons); +void ImportBookmarksFile( diff --git a/build/patches/Add-flag-to-disable-external-intent-requests.patch b/build/patches/Add-flag-to-disable-external-intent-requests.patch index eb938508..ed54d565 100644 --- a/build/patches/Add-flag-to-disable-external-intent-requests.patch +++ b/build/patches/Add-flag-to-disable-external-intent-requests.patch @@ -49,7 +49,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java -@@ -36,6 +36,7 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; +@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -57,7 +57,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate; -@@ -127,6 +128,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { +@@ -126,6 +127,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { @Override public boolean shouldDisableAllExternalIntents() { @@ -141,17 +141,17 @@ new file mode 100644 diff --git a/components/external_intents/android/external_intents_features.cc b/components/external_intents/android/external_intents_features.cc --- a/components/external_intents/android/external_intents_features.cc +++ b/components/external_intents/android/external_intents_features.cc -@@ -27,7 +27,6 @@ namespace { - const base::Feature* const kFeaturesExposedToJava[] = { - &kExternalNavigationDebugLogs, &kBlockFrameRenavigations, - &kBlockIntentsToSelf}; +@@ -28,7 +28,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kExternalNavigationDebugLogs, &kBlockIntentsToSelf, + &kNavigationCaptureRefactorAndroid, &kAuxiliaryNavigationStaysInBrowser, + &kReparentTopLevelNavigationFromPWA, &kReparentAuxiliaryNavigationFromPWA}; - } // namespace // Alphabetical: -@@ -44,7 +43,13 @@ BASE_FEATURE(kBlockIntentsToSelf, - "BlockIntentsToSelf", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -57,7 +56,13 @@ BASE_FEATURE(kReparentAuxiliaryNavigationFromPWA, + "ReparentAuxiliaryNavigationFromPWA", + base::FEATURE_DISABLED_BY_DEFAULT); +CROMITE_FEATURE(kIntentBlockExternalFormRedirectsNoGesture, + "IntentBlockExternalFormRedirectsNoGesture", @@ -177,10 +177,10 @@ diff --git a/components/external_intents/android/external_intents_features.h b/c diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java -@@ -20,6 +20,12 @@ import org.chromium.build.annotations.NullMarked; +@@ -19,6 +19,12 @@ import org.chromium.build.annotations.NullMarked; @JNINamespace("external_intents") @NullMarked - public class ExternalIntentsFeatures extends Features { + public class ExternalIntentsFeatures { + public static final String INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE_NAME = + "IntentBlockExternalFormRedirectsNoGesture"; + @@ -188,12 +188,12 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component + new ExternalIntentsFeatures(-1, INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE_NAME); + public static final String EXTERNAL_NAVIGATION_DEBUG_LOGS_NAME = "ExternalNavigationDebugLogs"; - public static final String BLOCK_FRAME_RENAVIGATIONS_NAME = "BlockFrameRenavigations3"; public static final String BLOCK_INTENTS_TO_SELF_NAME = "BlockIntentsToSelf"; + public static final String NAVIGATION_CAPTURE_REFACTOR_ANDROID_NAME = diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -@@ -1537,6 +1537,12 @@ public class ExternalNavigationHandler { +@@ -1560,6 +1560,12 @@ public class ExternalNavigationHandler { || ignoreBackForwardNav(params); } @@ -206,7 +206,7 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component private OverrideUrlLoadingResult shouldOverrideUrlLoadingInternal( ExternalNavigationParams params, Intent targetIntent, -@@ -1593,6 +1599,21 @@ public class ExternalNavigationHandler { +@@ -1617,6 +1623,21 @@ public class ExternalNavigationHandler { return OverrideUrlLoadingResult.forNoOverride(); } diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index 3c65e990..b6435ebc 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -83,14 +83,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../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 +++++- + .../permissions/permission_context_base.cc | 51 ++++++++++-- + .../permissions/permission_context_base.h | 20 ++++- components/permissions/permission_prompt.h | 3 +- components/permissions/permission_request.cc | 30 ++++++- components/permissions/permission_request.h | 16 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- - 38 files changed, 493 insertions(+), 71 deletions(-) + 38 files changed, 489 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 @@ -256,7 +256,7 @@ diff --git a/chrome/browser/ui/views/permissions/exclusive_access_permission_pro diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc -@@ -281,7 +281,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { +@@ -297,7 +297,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { delegate_->Accept(); return; case PermissionDialogButton::kAcceptOnce: @@ -264,18 +264,18 @@ diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_v + delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); return; case PermissionDialogButton::kDeny: - delegate_->Deny(); + #if BUILDFLAG(IS_CHROMEOS) diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java -@@ -10,6 +10,7 @@ import org.chromium.components.content_settings.ContentSettingValues; - import org.chromium.components.content_settings.ContentSettingsType; - import org.chromium.components.content_settings.SessionModel; +@@ -12,6 +12,7 @@ import org.chromium.components.content_settings.SessionModel; + import org.chromium.components.permissions.PermissionsAndroidFeatureList; + import org.chromium.components.permissions.PermissionsAndroidFeatureMap; import org.chromium.content_public.browser.BrowserContextHandle; +import org.chromium.components.content_settings.SessionModel; import java.io.Serializable; - + import java.util.Objects; diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java @@ -291,7 +291,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); long usage = mSite.getTotalUsage(); -@@ -1286,6 +1291,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1290,6 +1295,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } @@ -317,7 +317,7 @@ diff --git a/components/browser_ui/site_settings/android/website_preference_brid diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd -@@ -643,6 +643,11 @@ +@@ -637,6 +637,11 @@ URL truncated @@ -398,7 +398,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc diff --git a/components/content_settings/core/browser/content_settings_utils.h b/components/content_settings/core/browser/content_settings_utils.h --- a/components/content_settings/core/browser/content_settings_utils.h +++ b/components/content_settings/core/browser/content_settings_utils.h -@@ -74,6 +74,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); +@@ -73,6 +73,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); // Returns whether the given type supports tracking last_visit timestamps. bool CanTrackLastVisit(ContentSettingsType type); @@ -532,7 +532,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -1220,6 +1220,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1234,6 +1234,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -544,7 +544,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h --- a/components/page_info/page_info.h +++ b/components/page_info/page_info.h -@@ -149,6 +149,7 @@ class PageInfo : private content_settings::CookieControlsObserver, +@@ -150,6 +150,7 @@ class PageInfo : private content_settings::CookieControlsObserver, content_settings::SettingSource::kNone; // Whether the permission is a one-time grant. bool is_one_time = false; @@ -555,15 +555,15 @@ diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java --- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java -@@ -15,6 +15,7 @@ import org.jni_zero.NativeMethods; - import org.chromium.build.annotations.NullMarked; +@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; + import org.chromium.components.content_settings.ContentSettingsType; import org.chromium.ui.base.WindowAndroid; +import org.chromium.components.content_settings.LifetimeMode; import java.util.ArrayList; - import java.util.List; -@@ -66,6 +67,9 @@ public class PermissionDialogDelegate { + import java.util.Arrays; +@@ -72,6 +73,9 @@ public class PermissionDialogDelegate { // Prompt(screen) variant we want to display on the dialog. private @EmbeddedPromptVariant int mEmbeddedPromptVariant; @@ -573,7 +573,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** * Defines a (potentially empty) list of ranges represented as pairs of , * which shall be used by the UI to format the specified ranges as bold text. -@@ -135,6 +139,15 @@ public class PermissionDialogDelegate { +@@ -145,6 +149,15 @@ public class PermissionDialogDelegate { .acceptThisTime(mNativeDelegatePtr, PermissionDialogDelegate.this); } @@ -691,7 +691,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per 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 -@@ -117,7 +117,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { +@@ -119,7 +119,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } @@ -716,7 +716,7 @@ diff --git a/components/permissions/android/permission_prompt/embedded_permissio 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 -@@ -137,6 +137,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { +@@ -139,6 +139,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { static_cast(permission_prompt_->GetEmbeddedPromptVariant())); } @@ -728,7 +728,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ // static std::unique_ptr PermissionDialogDelegate::Create( content::WebContents* web_contents, -@@ -166,6 +171,13 @@ PermissionDialogDelegate::CreateForTesting( +@@ -168,6 +173,13 @@ PermissionDialogDelegate::CreateForTesting( void PermissionDialogDelegate::Accept(JNIEnv* env, const JavaParamRef& obj) { CHECK(permission_prompt_); @@ -742,7 +742,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ permission_prompt_->Accept(); } -@@ -173,7 +185,10 @@ void PermissionDialogDelegate::AcceptThisTime( +@@ -175,7 +187,10 @@ void PermissionDialogDelegate::AcceptThisTime( JNIEnv* env, const JavaParamRef& obj) { CHECK(permission_prompt_); @@ -754,7 +754,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ } void PermissionDialogDelegate::Acknowledge(JNIEnv* env, -@@ -185,6 +200,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env, +@@ -187,6 +202,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env, void PermissionDialogDelegate::Deny(JNIEnv* env, const JavaParamRef& obj) { CHECK(permission_prompt_); @@ -782,7 +782,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.cc b/components/permissions/android/permission_prompt/permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/permission_prompt_android.cc -@@ -76,8 +76,12 @@ void PermissionPromptAndroid::Accept() { +@@ -83,8 +83,12 @@ void PermissionPromptAndroid::Accept() { delegate_->Accept(); } @@ -800,7 +800,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_prompt_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.h b/components/permissions/android/permission_prompt/permission_prompt_android.h --- a/components/permissions/android/permission_prompt/permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/permission_prompt_android.h -@@ -54,9 +54,10 @@ class PermissionPromptAndroid : public PermissionPrompt { +@@ -55,9 +55,10 @@ class PermissionPromptAndroid : public PermissionPrompt { const; virtual void Closing(); virtual void Accept(); @@ -842,7 +842,7 @@ diff --git a/components/permissions/android/permissions_android_strings.grd b/co diff --git a/components/permissions/contexts/geolocation_permission_context_android.cc b/components/permissions/contexts/geolocation_permission_context_android.cc --- a/components/permissions/contexts/geolocation_permission_context_android.cc +++ b/components/permissions/contexts/geolocation_permission_context_android.cc -@@ -168,7 +168,20 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -193,7 +193,20 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( bool is_one_time, bool is_final_decision) { DCHECK(is_final_decision); @@ -860,12 +860,12 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr + ContentSetting content_setting, + bool is_one_time, bool is_final_decision, + content_settings::mojom::LifetimeMode lifetime_option) { - bool is_default_search = IsRequestingOriginDSE(requesting_origin); + bool is_default_search = + IsRequestingOriginDSE(request_data.requesting_origin); if (content_setting == CONTENT_SETTING_ALLOW && - !location_settings_->IsSystemLocationSettingEnabled()) { -@@ -181,7 +194,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - if (IsInLocationSettingsBackOff(is_default_search)) { - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, +@@ -208,7 +221,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), false /* persist */, - CONTENT_SETTING_BLOCK, is_one_time); + CONTENT_SETTING_BLOCK, @@ -873,9 +873,9 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr return; } -@@ -199,7 +213,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - !location_settings_dialog_callback_.is_null()) { - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, +@@ -228,7 +242,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), false /* persist */, - CONTENT_SETTING_BLOCK, is_one_time); + CONTENT_SETTING_BLOCK, @@ -883,23 +883,23 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr return; } -@@ -211,13 +226,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - base::BindOnce( +@@ -241,13 +256,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, - weak_factory_.GetWeakPtr(), requesting_origin, embedding_origin, -- persist, content_setting, is_one_time)); -+ persist, content_setting, is_one_time, lifetime_option)); + weak_factory_.GetWeakPtr(), request_data.requesting_origin, + request_data.embedding_origin, persist, content_setting, +- is_one_time)); ++ is_one_time, lifetime_option)); return; } - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, - std::move(callback), persist, content_setting, -- is_one_time); -+ is_one_time, lifetime_option); + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), +- persist, content_setting, is_one_time); ++ persist, content_setting, is_one_time, lifetime_option); } content::PermissionResult -@@ -390,7 +405,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -425,7 +440,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( const GURL& embedding_origin, bool persist, ContentSetting content_setting, @@ -908,7 +908,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr LocationSettingsDialogOutcome prompt_outcome) { bool is_default_search = IsRequestingOriginDSE(requesting_origin); if (prompt_outcome == GRANTED) { -@@ -409,7 +424,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -444,7 +459,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( FinishNotifyPermissionSet(location_settings_dialog_request_id_, requesting_origin, embedding_origin, std::move(location_settings_dialog_callback_), @@ -918,7 +918,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr location_settings_dialog_request_id_ = PermissionRequestID(content::GlobalRenderFrameHostId(0, 0), -@@ -423,10 +439,10 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( +@@ -458,8 +474,8 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( BrowserPermissionCallback callback, bool persist, ContentSetting content_setting, @@ -926,16 +926,22 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr - GeolocationPermissionContext::NotifyPermissionSet( + bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { + GeolocationPermissionContext::NotifyPermissionSetWithLifetime( - id, requesting_origin, embedding_origin, std::move(callback), persist, -- content_setting, is_one_time, /*is_final_decision=*/true); -+ content_setting, is_one_time, /*is_final_decision=*/true, lifetime_option); + PermissionRequestData(this, id, + content::PermissionRequestDescription( + content::PermissionDescriptorUtil:: +@@ -467,7 +483,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + blink::PermissionType::GEOLOCATION)), + requesting_origin), + std::move(callback), persist, content_setting, is_one_time, +- /*is_final_decision=*/true); ++ /*is_final_decision=*/true, lifetime_option); } void GeolocationPermissionContextAndroid::SetLocationSettingsForTesting( diff --git a/components/permissions/contexts/geolocation_permission_context_android.h b/components/permissions/contexts/geolocation_permission_context_android.h --- a/components/permissions/contexts/geolocation_permission_context_android.h +++ b/components/permissions/contexts/geolocation_permission_context_android.h -@@ -89,6 +89,15 @@ class GeolocationPermissionContextAndroid +@@ -93,6 +93,15 @@ class GeolocationPermissionContextAndroid ContentSetting content_setting, bool is_one_time, bool is_final_decision) override; @@ -951,7 +957,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr content::PermissionResult UpdatePermissionStatusWithDeviceStatus( content::WebContents* web_contents, content::PermissionResult result, -@@ -134,6 +143,7 @@ class GeolocationPermissionContextAndroid +@@ -138,6 +147,7 @@ class GeolocationPermissionContextAndroid bool persist, ContentSetting content_setting, bool is_one_time, @@ -959,7 +965,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr LocationSettingsDialogOutcome prompt_outcome); void FinishNotifyPermissionSet(const PermissionRequestID& id, -@@ -142,7 +152,8 @@ class GeolocationPermissionContextAndroid +@@ -146,7 +156,8 @@ class GeolocationPermissionContextAndroid BrowserPermissionCallback callback, bool persist, ContentSetting content_setting, @@ -984,7 +990,7 @@ diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/c 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 -@@ -271,6 +271,17 @@ GURL PermissionContextBase::GetEffectiveEmbedderOrigin( +@@ -273,6 +273,17 @@ GURL PermissionContextBase::GetEffectiveEmbedderOrigin( return PermissionUtil::GetLastCommittedOriginAsURL(rfh->GetMainFrame()); } @@ -1000,49 +1006,48 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm +} + content::PermissionResult PermissionContextBase::GetPermissionStatus( + const PermissionResolver& resolver, content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, -@@ -530,7 +541,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time, -- bool is_final_decision) { -+ bool is_final_decision, -+ content_settings::mojom::LifetimeMode lifetime_option) { +@@ -540,7 +551,8 @@ void PermissionContextBase::PermissionDecided( + ContentSetting content_setting, + bool is_one_time, + bool is_final_decision, +- const PermissionRequestData& request_data) { ++ const PermissionRequestData& request_data, ++ content_settings::mojom::LifetimeMode lifetime_option) { DCHECK(content_setting == CONTENT_SETTING_ALLOW || content_setting == CONTENT_SETTING_BLOCK || content_setting == CONTENT_SETTING_DEFAULT); -@@ -545,13 +557,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -556,12 +568,13 @@ void PermissionContextBase::PermissionDecided( // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { -- NotifyPermissionSet(id, requesting_origin, embedding_origin, -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, - std::move(request->second.second), persist, -- content_setting, is_one_time, is_final_decision); -+ content_setting, is_one_time, is_final_decision, +- NotifyPermissionSet(request_data, std::move(request->second.second), ++ NotifyPermissionSetWithLifetime(request_data, std::move(request->second.second), + persist, content_setting, is_one_time, +- is_final_decision); ++ is_final_decision, + lifetime_option); } else { -- NotifyPermissionSet(id, requesting_origin, embedding_origin, -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, - base::DoNothing(), persist, content_setting, -- is_one_time, is_final_decision); -+ is_one_time, is_final_decision, lifetime_option); +- NotifyPermissionSet(request_data, base::DoNothing(), persist, +- content_setting, is_one_time, is_final_decision); ++ NotifyPermissionSetWithLifetime(request_data, base::DoNothing(), persist, ++ content_setting, is_one_time, is_final_decision, lifetime_option); } } -@@ -632,11 +645,27 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -652,10 +665,26 @@ void PermissionContextBase::NotifyPermissionSet( ContentSetting content_setting, bool is_one_time, bool is_final_decision) { + DCHECK(is_one_time == false); -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, std::move(callback), ++ NotifyPermissionSetWithLifetime(request_data, requesting_origin, embedding_origin, std::move(callback), + persist, content_setting, is_one_time, is_final_decision, + content_settings::mojom::LifetimeMode::ALWAYS); +} + +void PermissionContextBase::NotifyPermissionSetWithLifetime( -+ const PermissionRequestID& id, ++ const PermissionRequestData& request_data, + const GURL& requesting_origin, + const GURL& embedding_origin, + BrowserPermissionCallback callback, @@ -1054,29 +1059,27 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (persist) { - UpdateContentSetting(requesting_origin, embedding_origin, content_setting, -- is_one_time); -+ is_one_time, lifetime_option); +- UpdateContentSetting(request_data, content_setting, is_one_time); ++ UpdateContentSetting(request_data, content_setting, is_one_time, lifetime_option); } if (is_final_decision) { -@@ -677,6 +706,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time) { -+ UpdateContentSetting(requesting_origin, embedding_origin, content_setting, +@@ -696,6 +725,14 @@ void PermissionContextBase::UpdateContentSetting( + const PermissionRequestData& request_data, + ContentSetting content_setting, + bool is_one_time) { ++ UpdateContentSetting(request_data, content_setting, + is_one_time, content_settings::mojom::LifetimeMode::ALWAYS); +} + -+void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, -+ const GURL& embedding_origin, ++void PermissionContextBase::UpdateContentSetting(const PermissionRequestData& request_data, + ContentSetting content_setting, + bool is_one_time, + content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(requesting_origin, requesting_origin.DeprecatedGetOriginAsURL()); - DCHECK_EQ(embedding_origin, embedding_origin.DeprecatedGetOriginAsURL()); - DCHECK(content_setting == CONTENT_SETTING_ALLOW || -@@ -686,6 +724,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, + DCHECK_EQ(request_data.requesting_origin, + request_data.requesting_origin.DeprecatedGetOriginAsURL()); + DCHECK_EQ(request_data.embedding_origin, +@@ -707,6 +744,8 @@ void PermissionContextBase::UpdateContentSetting( constraints.set_session_model( is_one_time ? content_settings::mojom::SessionModel::ONE_TIME : content_settings::mojom::SessionModel::DURABLE); @@ -1088,37 +1091,34 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm diff --git a/components/permissions/permission_context_base.h b/components/permissions/permission_context_base.h --- a/components/permissions/permission_context_base.h +++ b/components/permissions/permission_context_base.h -@@ -169,6 +169,15 @@ class PermissionContextBase : public content_settings::Observer { +@@ -188,6 +188,13 @@ class PermissionContextBase : public content_settings::Observer { // Updates stored content setting if persist is set, updates tab indicators // and runs the callback to finish the request. -+ virtual void NotifyPermissionSetWithLifetime(const PermissionRequestID& id, -+ const GURL& requesting_origin, -+ const GURL& embedding_origin, -+ BrowserPermissionCallback callback, -+ bool persist, -+ ContentSetting content_setting, -+ bool is_one_time, -+ bool is_final_decision, -+ content_settings::mojom::LifetimeMode lifetime_option); - virtual void NotifyPermissionSet(const PermissionRequestID& id, - const GURL& requesting_origin, - const GURL& embedding_origin, -@@ -190,6 +199,11 @@ class PermissionContextBase : public content_settings::Observer { ++ virtual void NotifyPermissionSetWithLifetime(const PermissionRequestData& request_data, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, ++ bool is_final_decision, ++ content_settings::mojom::LifetimeMode lifetime_option); + virtual void NotifyPermissionSet(const PermissionRequestData& request_data, + BrowserPermissionCallback callback, + bool persist, +@@ -207,6 +214,10 @@ class PermissionContextBase : public content_settings::Observer { // Store the decided permission as a content setting. // virtual since the permission might be stored with different restrictions // (for example for desktop notifications). -+ void UpdateContentSetting(const GURL& requesting_origin, -+ const GURL& embedding_origin, -+ ContentSetting content_setting, -+ bool is_one_time, -+ content_settings::mojom::LifetimeMode lifetime_option); - virtual void UpdateContentSetting(const GURL& requesting_origin, - const GURL& embedding_origin, ++ void UpdateContentSetting(const PermissionRequestData& request_data, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::mojom::LifetimeMode lifetime_option); + virtual void UpdateContentSetting(const PermissionRequestData& request_data, ContentSetting content_setting, -@@ -220,6 +234,12 @@ class PermissionContextBase : public content_settings::Observer { + bool is_one_time); +@@ -236,6 +247,12 @@ class PermissionContextBase : public content_settings::Observer { PermissionRequest::PermissionDecidedCallback permission_decided_callback, - base::OnceClosure delete_callback) const; + base::OnceClosure request_finished_callback) const; + virtual std::unique_ptr CreatePermissionRequest( + content::WebContents* web_contents, @@ -1129,12 +1129,12 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi // Implementors can override this method to avoid using automatic embargo. virtual bool UsesAutomaticEmbargo() const; -@@ -256,7 +276,8 @@ class PermissionContextBase : public content_settings::Observer { - const GURL& embedding_origin, - ContentSetting content_setting, +@@ -270,7 +287,8 @@ class PermissionContextBase : public content_settings::Observer { + void PermissionDecided(ContentSetting content_setting, bool is_one_time, -- bool is_final_decision); -+ bool is_final_decision, + bool is_final_decision, +- const PermissionRequestData& request_data); ++ const PermissionRequestData& request_data, + content_settings::mojom::LifetimeMode lifetime_option); void NotifyObservers(const ContentSettingsPattern& primary_pattern, @@ -1156,8 +1156,8 @@ diff --git a/components/permissions/permission_prompt.h b/components/permissions diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc -@@ -43,6 +43,14 @@ PermissionRequest::PermissionRequest( - delete_callback_(std::move(delete_callback)), +@@ -32,6 +32,14 @@ PermissionRequest::PermissionRequest( + request_finished_callback_(std::move(request_finished_callback)), uses_automatic_embargo_(uses_automatic_embargo) {} +PermissionRequest::PermissionRequest( @@ -1169,9 +1169,9 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + delete_callback_(std::move(delete_callback)) {} + PermissionRequest::~PermissionRequest() { - DCHECK(delete_callback_.is_null()); + std::move(request_finished_callback_).Run(); } -@@ -423,19 +431,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -412,19 +420,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { return request_type() == RequestType::kStorageAccess; } @@ -1185,7 +1185,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + } std::move(permission_decided_callback_) .Run(CONTENT_SETTING_ALLOW, is_one_time, - /*is_final_decision=*/true); + /*is_final_decision=*/true, /*request_data=*/*data_); } -void PermissionRequest::PermissionDenied() { @@ -1198,7 +1198,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + } std::move(permission_decided_callback_) .Run(CONTENT_SETTING_BLOCK, /*is_one_time=*/false, - /*is_final_decision=*/true); + /*is_final_decision=*/true, /*request_data=*/*data_); } void PermissionRequest::Cancelled(bool is_final_decision) { @@ -1210,13 +1210,13 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + } if (permission_decided_callback_) { permission_decided_callback_.Run(CONTENT_SETTING_DEFAULT, - /*is_one_time=*/false, is_final_decision); + /*is_one_time=*/false, is_final_decision, diff --git a/components/permissions/permission_request.h b/components/permissions/permission_request.h --- a/components/permissions/permission_request.h +++ b/components/permissions/permission_request.h -@@ -44,6 +44,11 @@ class PermissionRequest { - bool /*is_one_time*/, - bool /*is_final_decision*/)>; +@@ -47,6 +47,11 @@ class PermissionRequest { + bool /*is_final_decision*/, + const PermissionRequestData& /*request_data*/)>; + using PermissionDecidedCallbackWithLifetime = + base::OnceCallbackHasSwitch( switches::kDenyPermissionPrompts)) { - request->PermissionDenied(); + request->PermissionDenied(/*is_one_time*/false, content_settings::mojom::LifetimeMode::ALWAYS); - request->RequestFinished(); return; } -@@ -248,7 +248,7 @@ void PermissionRequestManager::AddRequest( + +@@ -258,7 +258,7 @@ void PermissionRequestManager::AddRequest( if (should_auto_approve_request) { if (should_auto_approve_request == PermissionAction::GRANTED) { - request->PermissionGranted(/*is_one_time=*/true); + request->PermissionGranted(/*is_one_time=*/true, content_settings::mojom::LifetimeMode::UNTIL_ORIGIN_CLOSED); } - request->RequestFinished(); return; -@@ -611,7 +611,8 @@ void PermissionRequestManager::Accept() { + } +@@ -623,7 +623,8 @@ void PermissionRequestManager::Accept() { (*requests_iter)->request_type(), PermissionAction::GRANTED); - PermissionGrantedIncludingDuplicates(*requests_iter, + PermissionGrantedIncludingDuplicates(requests_iter->get(), - /*is_one_time=*/false); + /*is_one_time=*/false, + content_settings::mojom::LifetimeMode::ALWAYS); #if !BUILDFLAG(IS_ANDROID) std::optional content_settings_type = -@@ -629,7 +630,7 @@ void PermissionRequestManager::Accept() { +@@ -641,7 +642,7 @@ void PermissionRequestManager::Accept() { CurrentRequestsDecided(PermissionAction::GRANTED); } -void PermissionRequestManager::AcceptThisTime() { +void PermissionRequestManager::AcceptThisTime(content_settings::mojom::LifetimeMode mode) { - if (ignore_callbacks_from_prompt_) + if (ignore_callbacks_from_prompt_) { return; - DCHECK(view_); -@@ -642,7 +643,8 @@ void PermissionRequestManager::AcceptThisTime() { + } +@@ -655,7 +656,8 @@ void PermissionRequestManager::AcceptThisTime() { (*requests_iter)->request_type(), PermissionAction::GRANTED_ONCE); - PermissionGrantedIncludingDuplicates(*requests_iter, + PermissionGrantedIncludingDuplicates(requests_iter->get(), - /*is_one_time=*/true); + /*is_one_time=*/true, + mode); } NotifyRequestDecided(PermissionAction::GRANTED_ONCE); -@@ -650,6 +652,15 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -663,6 +665,15 @@ void PermissionRequestManager::AcceptThisTime() { } void PermissionRequestManager::Deny() { @@ -1323,26 +1323,26 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p + +void PermissionRequestManager::Deny_(bool is_one_time, + content_settings::mojom::LifetimeMode lifetime_option) { - if (ignore_callbacks_from_prompt_) + if (ignore_callbacks_from_prompt_) { return; - DCHECK(view_); -@@ -672,7 +683,7 @@ void PermissionRequestManager::Deny() { + } +@@ -685,7 +696,7 @@ void PermissionRequestManager::Deny() { StorePermissionActionForUMA((*requests_iter)->requesting_origin(), (*requests_iter)->request_type(), PermissionAction::DENIED); -- PermissionDeniedIncludingDuplicates(*requests_iter); -+ PermissionDeniedIncludingDuplicates(*requests_iter, is_one_time, lifetime_option); +- PermissionDeniedIncludingDuplicates(requests_iter->get()); ++ PermissionDeniedIncludingDuplicates(requests_iter->get(), is_one_time, lifetime_option); } NotifyRequestDecided(PermissionAction::DENIED); -@@ -1271,32 +1282,32 @@ PermissionRequestManager::VisitDuplicateRequests( +@@ -1300,32 +1311,32 @@ PermissionRequestManager::VisitDuplicateRequests( void PermissionRequestManager::PermissionGrantedIncludingDuplicates( PermissionRequest* request, - bool is_one_time) { + bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(1ul, std::ranges::count(requests_, request) + - pending_permission_requests_.Count(request)) + CHECK(RequestExistsExactlyOnce(request, pending_permission_requests_, + requests_)) << "Only requests in [pending_permission_]requests_ can have duplicates"; - request->PermissionGranted(is_one_time); + request->PermissionGranted(is_one_time, lifetime_option); @@ -1350,9 +1350,9 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p base::BindRepeating( - [](bool is_one_time, + [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, - const base::WeakPtr& weak_request) { -- weak_request->PermissionGranted(is_one_time); -+ weak_request->PermissionGranted(is_one_time, lifetime_option); + const std::unique_ptr& request) { +- request->PermissionGranted(is_one_time); ++ request->PermissionGranted(is_one_time, lifetime_option); }, - is_one_time), + is_one_time, lifetime_option), @@ -1362,23 +1362,23 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p void PermissionRequestManager::PermissionDeniedIncludingDuplicates( - PermissionRequest* request) { + PermissionRequest* request, bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(1ul, std::ranges::count(requests_, request) + - pending_permission_requests_.Count(request)) + CHECK(RequestExistsExactlyOnce(request, pending_permission_requests_, + requests_)) << "Only requests in [pending_permission_]requests_ can have duplicates"; - request->PermissionDenied(); + request->PermissionDenied(is_one_time, lifetime_option); VisitDuplicateRequests( base::BindRepeating( -- [](const base::WeakPtr& weak_request) { -- weak_request->PermissionDenied(); +- [](const std::unique_ptr& request) { +- request->PermissionDenied(); - }), -+ [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, const base::WeakPtr& weak_request) { -+ weak_request->PermissionDenied(is_one_time, lifetime_option); ++ [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, const std::unique_ptr& request) { ++ request->PermissionDenied(is_one_time, lifetime_option); + }, is_one_time, lifetime_option), request); } -@@ -1566,7 +1577,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { +@@ -1596,7 +1607,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { } switch (auto_response_for_test_) { case ACCEPT_ONCE: @@ -1402,7 +1402,7 @@ diff --git a/components/permissions/permission_request_manager.h b/components/pe void Dismiss() override; void Ignore() override; void FinalizeCurrentRequests() override; -@@ -383,9 +385,12 @@ class PermissionRequestManager +@@ -394,9 +396,12 @@ class PermissionRequestManager // Calls PermissionGranted on a request and all its duplicates. void PermissionGrantedIncludingDuplicates(PermissionRequest* request, 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 ce8c4274..f1bcca26 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -59,7 +59,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -102,6 +102,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; +@@ -103,6 +103,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -67,17 +67,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -273,6 +274,9 @@ import org.chromium.chrome.browser.ui.RootUiCoordinator; - import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; +@@ -275,6 +276,9 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; + import org.chromium.chrome.browser.ui.extensions.ExtensionKeybindingRegistry; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityClient; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityExtras.IntentOrigin; import org.chromium.chrome.browser.ui.signin.BottomSheetSigninAndHistorySyncConfig; -@@ -282,6 +286,8 @@ import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController; +@@ -284,6 +288,8 @@ import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController; import org.chromium.chrome.browser.usage_stats.UsageStatsService; import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.xr.XrLayoutStateObserver; @@ -86,16 +86,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.edge_to_edge.SystemBarColorHelper; import org.chromium.components.browser_ui.edge_to_edge.TabbedSystemBarColorHelper; -@@ -3316,6 +3322,8 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3394,6 +3400,8 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModelSelectorSupplier().get(), closeAllTabsRunnable); RecordUserAction.record("MobileMenuCloseAllTabs"); + } else if (id == R.id.bookmark_all_tabs_menu_id) { + bookmarkAllTabs(); } else if (id == R.id.close_all_incognito_tabs_menu_id) { - // Close only incognito tabs - Runnable closeAllTabsRunnable = -@@ -3418,6 +3426,41 @@ public class ChromeTabbedActivity extends ChromeActivity { + boolean allowUndo = TabClosureParamsUtils.shouldAllowUndo(triggeringMotion); + +@@ -3502,6 +3510,41 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus); } @@ -140,7 +140,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct 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 -@@ -326,6 +326,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -391,6 +391,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -174,7 +174,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -438,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -503,6 +530,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -182,7 +182,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -546,6 +574,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -611,6 +639,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -192,7 +192,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( -@@ -1273,6 +1304,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1338,6 +1369,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -238,7 +238,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java -@@ -18,6 +18,7 @@ import org.jni_zero.JniType; +@@ -16,6 +16,7 @@ import org.jni_zero.JniType; import org.jni_zero.NativeMethods; import org.chromium.base.ContextUtils; @@ -254,15 +254,15 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; -@@ -46,6 +48,7 @@ import java.util.function.BiConsumer; +@@ -47,6 +49,7 @@ import java.util.function.BiConsumer; class BookmarkBridge { - private static OneshotSupplierImpl + private static final OneshotSupplierImpl sPartnerBookmarkIteratorSupplier = new OneshotSupplierImpl<>(); + private static final String TAG = "BookmarkBridge"; private final ObserverList mObservers = new ObserverList<>(); private final Profile mProfile; -@@ -384,6 +387,16 @@ class BookmarkBridge { +@@ -385,6 +388,16 @@ class BookmarkBridge { return mMobileFolderId; } @@ -277,9 +277,9 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + } + /** Returns Id representing the special "other" folder from bookmark model. */ - public BookmarkId getOtherFolderId() { + public @Nullable BookmarkId getOtherFolderId() { ThreadUtils.assertOnUiThread(); -@@ -895,6 +908,29 @@ class BookmarkBridge { +@@ -898,6 +911,29 @@ class BookmarkBridge { .addToReadingList(mNativeBookmarkBridge, parentId, title, url); } @@ -309,7 +309,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Helper method to mark an item as read. * -@@ -1112,6 +1148,9 @@ class BookmarkBridge { +@@ -1115,6 +1151,9 @@ class BookmarkBridge { BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl( long nativeBookmarkBridge, @JniType("GURL") GURL url); @@ -319,7 +319,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); void getTopLevelFolderIds( -@@ -1133,6 +1172,8 @@ class BookmarkBridge { +@@ -1136,6 +1175,8 @@ class BookmarkBridge { BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -331,7 +331,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows 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 -@@ -173,14 +173,15 @@ class Writer : public base::RefCountedThreadSafe { +@@ -169,14 +169,15 @@ class Writer : public base::RefCountedThreadSafe { BookmarkCodec codec; local_bookmarks_ = codec.Encode(model->bookmark_bar_node(), model->other_node(), @@ -349,7 +349,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b } else { CHECK(!model->account_other_node()); CHECK(!model->account_mobile_node()); -@@ -214,6 +215,9 @@ class Writer : public base::RefCountedThreadSafe { +@@ -210,6 +211,9 @@ class Writer : public base::RefCountedThreadSafe { base::Value::Dict* mobile_folder_value = local_permanent_folders->FindDict( BookmarkCodec::kMobileBookmarkFolderNameKey); CHECK(mobile_folder_value); @@ -359,7 +359,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b base::Value::Dict* account_permanent_folders = account_bookmarks_.FindDict(BookmarkCodec::kRootsKey); -@@ -289,6 +293,10 @@ class Writer : public base::RefCountedThreadSafe { +@@ -285,6 +289,10 @@ class Writer : public base::RefCountedThreadSafe { return bookmark_html_writer::Result::kCouldNotWriteNodes; } @@ -370,7 +370,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b DecrementIndent(); if (!Write(kFolderChildrenEnd) || !Write(kNewline)) { -@@ -435,6 +443,7 @@ class Writer : public base::RefCountedThreadSafe { +@@ -431,6 +439,7 @@ class Writer : public base::RefCountedThreadSafe { case BookmarkNode::URL: case BookmarkNode::OTHER_NODE: case BookmarkNode::MOBILE: @@ -378,7 +378,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b NOTREACHED(); } -@@ -563,6 +572,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { +@@ -559,6 +568,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { ExtractUrls(model->bookmark_bar_node()); ExtractUrls(model->other_node()); ExtractUrls(model->mobile_node()); @@ -440,7 +440,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse 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 -@@ -4525,6 +4525,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4541,6 +4541,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs @@ -646,16 +646,16 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ void UpdateUserFolderStatsRecursively(const BookmarkNode& node, bool top_level, -@@ -60,6 +60,8 @@ BookmarkLoadDetails::BookmarkLoadDetails() - root_node_->Add(BookmarkPermanentNode::CreateOtherBookmarks(/*id=*/0))); +@@ -63,6 +63,8 @@ BookmarkLoadDetails::BookmarkLoadDetails() mobile_folder_node_ = static_cast( - root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks(/*id=*/0))); + root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks( + /*id=*/0, /*is_account_node=*/false))); + tabs_collection_folder_node_ = static_cast( + root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks(/*id=*/0))); - CHECK_EQ(kNumDefaultTopLevelPermanentFolders, root_node_->children().size()); - } -@@ -106,6 +108,10 @@ void BookmarkLoadDetails::PopulateNodeIdsForLocalOrSyncablePermanentNodes() { + // Set the nodes' `date_added` to the same time so that there is no inherent + // hierarchy in terms of their added time between them. This is relevant for +@@ -119,6 +121,10 @@ void BookmarkLoadDetails::PopulateNodeIdsForLocalOrSyncablePermanentNodes() { if (mobile_folder_node_->id() == 0) { mobile_folder_node_->set_id(max_id_++); } @@ -666,7 +666,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ } void BookmarkLoadDetails::AddManagedNode( -@@ -118,6 +124,7 @@ void BookmarkLoadDetails::AddManagedNode( +@@ -131,6 +137,7 @@ void BookmarkLoadDetails::AddManagedNode( CHECK_NE(bb_node_->id(), 0); CHECK_NE(other_folder_node_->id(), 0); CHECK_NE(mobile_folder_node_->id(), 0); @@ -674,7 +674,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ has_managed_node_ = true; root_node_->Add(std::move(managed_node)); -@@ -125,8 +132,8 @@ void BookmarkLoadDetails::AddManagedNode( +@@ -138,8 +145,8 @@ void BookmarkLoadDetails::AddManagedNode( void BookmarkLoadDetails::CreateIndices() { local_or_syncable_uuid_index_.insert(root_node_.get()); @@ -685,7 +685,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ for (const auto& child : root_node_->children()) { if (child.get() == account_bb_node_ || child.get() == account_other_folder_node_ || -@@ -145,6 +152,7 @@ void BookmarkLoadDetails::ResetPermanentNodePointers() { +@@ -158,6 +165,7 @@ void BookmarkLoadDetails::ResetPermanentNodePointers() { bb_node_ = nullptr; other_folder_node_ = nullptr; mobile_folder_node_ = nullptr; @@ -715,16 +715,16 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/b diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc -@@ -890,7 +890,7 @@ bool BookmarkModel::HasBookmarks() const { - bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return bookmark_bar_node_->children().empty() && -- other_node_->children().empty() && mobile_node_->children().empty(); -+ other_node_->children().empty() && mobile_node_->children().empty() && tabs_collection_node_->children().empty(); +@@ -908,7 +908,7 @@ bool BookmarkModel::HasUserCreatedBookmarksOrFolders() const { + (account_bookmark_bar_node_ && + !account_bookmark_bar_node_->children().empty()) || + (account_other_node_ && !account_other_node_->children().empty()) || +- (account_mobile_node_ && !account_mobile_node_->children().empty()); ++ (account_mobile_node_ && !account_mobile_node_->children().empty() && tabs_collection_node_->children().empty()); } bool BookmarkModel::IsBookmarked(const GURL& url) const { -@@ -1222,6 +1222,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { +@@ -1240,6 +1240,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -748,7 +748,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark bool is_root_node(const BookmarkNode* node) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return node == root_; -@@ -611,6 +617,7 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -628,6 +634,7 @@ class BookmarkModel : public BookmarkUndoProvider, raw_ptr account_bookmark_bar_node_ = nullptr; raw_ptr account_other_node_ = nullptr; raw_ptr account_mobile_node_ = nullptr; @@ -768,8 +768,8 @@ diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmark case BookmarkNode::URL: NOTREACHED(); case BookmarkNode::FOLDER: -@@ -211,6 +213,15 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id) { - l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME))); +@@ -213,6 +215,15 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, + is_account_node)); } +// static @@ -795,10 +795,10 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks MOBILE }; -@@ -247,6 +248,8 @@ class BookmarkPermanentNode : public BookmarkNode { - int64_t id); +@@ -249,6 +250,8 @@ class BookmarkPermanentNode : public BookmarkNode { static std::unique_ptr CreateMobileBookmarks( - int64_t id); + int64_t id, + bool is_account_node); + static std::unique_ptr CreateTabsCollectionBookmarks( + int64_t id); @@ -850,16 +850,16 @@ diff --git a/components/bookmarks/browser/bookmark_uuids.h b/components/bookmark diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc --- a/components/bookmarks/browser/model_loader.cc +++ b/components/bookmarks/browser/model_loader.cc -@@ -71,6 +71,8 @@ std::unique_ptr LoadBookmarks( - BookmarkPermanentNode::CreateOtherBookmarks(0); +@@ -74,6 +74,8 @@ std::unique_ptr LoadBookmarks( std::unique_ptr account_mobile_folder_node = - BookmarkPermanentNode::CreateMobileBookmarks(0); + BookmarkPermanentNode::CreateMobileBookmarks( + 0, /*is_account_node=*/true); + std::unique_ptr tabs_collection_folder_node = + BookmarkPermanentNode::CreateTabsCollectionBookmarks(0); std::optional root_dict = LoadFileToDict(account_file_path); -@@ -78,7 +80,8 @@ std::unique_ptr LoadBookmarks( +@@ -81,7 +83,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, /*already_assigned_ids=*/{}, account_bb_node.get(), account_other_folder_node.get(), @@ -869,7 +869,7 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks &sync_metadata_str)) { ids_assigned_to_account_nodes = codec.release_assigned_ids(); -@@ -120,7 +123,8 @@ std::unique_ptr LoadBookmarks( +@@ -123,7 +126,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, std::move(ids_assigned_to_account_nodes), details->bb_node(), details->other_folder_node(), diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index c93f737f..2953685a 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -141,7 +141,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -62,6 +62,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -65,6 +65,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting } } @@ -170,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -783,7 +783,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -787,7 +787,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity // Inflate the correct toolbar layout for the device. int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -184,15 +184,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -117,6 +117,7 @@ import org.chromium.components.tab_group_sync.SavedTabGroup; - import org.chromium.components.tab_group_sync.TabGroupSyncService; +@@ -120,6 +120,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; import org.chromium.components.tab_group_sync.TriggerSource; import org.chromium.components.tab_groups.TabGroupColorId; + import org.chromium.ui.accessibility.AccessibilityState; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.WindowAndroid; - import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -4264,8 +4265,13 @@ public class StripLayoutHelper + import org.chromium.ui.util.ColorUtils; +@@ -4472,8 +4473,13 @@ public class StripLayoutHelper mCloseButtonMenu.setAnchorView(tabView); // 3. Set the vertical offset to align the close button menu with bottom of the tab strip int tabHeight = mManagerHost.getHeight(); @@ -211,7 +211,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -97,6 +97,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa +@@ -98,6 +98,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; import org.chromium.content_public.browser.LoadUrlParams; @@ -219,10 +219,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; -@@ -468,7 +469,10 @@ public class StripLayoutHelperManager - +@@ -467,7 +468,10 @@ public class StripLayoutHelperManager mIsLayoutOptimizationsEnabled = - ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled(true); + ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled( + /* isTablet= */ true, DisplayUtil.isContextInDefaultDisplay(mContext)); - mScrollableStripHeight = res.getDimension(R.dimen.tab_strip_height) / mDensity; + mScrollableStripHeight = + (DeviceFormFactor.isForceTabletUI() @@ -271,7 +271,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrow diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -697,7 +697,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -725,7 +725,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @Override public int getControlContainerHeightResource() { @@ -294,7 +294,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl; -@@ -1625,7 +1627,9 @@ public class RootUiCoordinator +@@ -1645,7 +1647,9 @@ public class RootUiCoordinator if (!mSupportsFindInPageSupplier.getAsBoolean()) return; int stubId = R.id.find_toolbar_stub; @@ -319,7 +319,7 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -314,6 +314,7 @@ public final class ChromePreferenceKeys { +@@ -313,6 +313,7 @@ public final class ChromePreferenceKeys { /** Whether the app-specific history info text was already seen by users. */ public static final String HISTORY_APP_SPECIFIC_INFO_SEEN = "Chrome.History.AppSpecificInfoSeen"; @@ -359,7 +359,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java -@@ -57,6 +57,7 @@ public class LegacyChromePreferenceKeys { +@@ -56,6 +56,7 @@ public class LegacyChromePreferenceKeys { ChromePreferenceKeys.FIRST_RUN_FLOW_COMPLETE, ChromePreferenceKeys.FIRST_RUN_FLOW_SIGNIN_SETUP, ChromePreferenceKeys.FIRST_RUN_LIGHTWEIGHT_FLOW_COMPLETE, @@ -378,10 +378,10 @@ diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/c import org.chromium.ui.InsetObserver; import org.chromium.ui.InsetObserver.WindowInsetsConsumer; import org.chromium.ui.InsetsRectProvider; -@@ -260,6 +261,7 @@ public class AppHeaderCoordinator - private static @DesktopWindowHeuristicResult int checkIsInDesktopWindow( +@@ -267,6 +268,7 @@ public class AppHeaderCoordinator InsetsRectProvider insetsRectProvider, - @DesktopWindowHeuristicResult int currentResult) { + @DesktopWindowHeuristicResult int currentResult, + boolean isOnExternalDisplay) { + if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW; @DesktopWindowHeuristicResult int newResult; @@ -389,7 +389,7 @@ diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/c diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -847,7 +847,7 @@ public class LocationBarCoordinator +@@ -857,7 +857,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -401,7 +401,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow 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 -@@ -1660,6 +1660,13 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1654,6 +1654,13 @@ Your Google account may have other forms of browsing history like searches and a Privacy guide explanation closed @@ -498,7 +498,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java -@@ -26,7 +26,7 @@ public interface ControlContainer { +@@ -27,7 +27,7 @@ public interface ControlContainer { * * @param toolbarLayoutId The ID of the toolbar layout to use. */ @@ -518,7 +518,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PorterDuff; -@@ -154,8 +155,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -157,8 +158,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout @Override @Initializer @@ -542,13 +542,13 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow + if (view != null) + ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; + } - mToolbarContainer = - (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); + mToolbarContainer = findViewById(R.id.toolbar_container); ViewStub toolbarStub = findViewById(R.id.toolbar_stub); + toolbarStub.setLayoutResource(toolbarLayoutId); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java -@@ -65,6 +65,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; +@@ -68,6 +68,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; import org.chromium.components.feature_engagement.Tracker; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.util.MotionEventUtils; @@ -556,7 +556,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.ui.util.TokenHolder; import org.chromium.url.GURL; -@@ -571,7 +572,9 @@ public abstract class ToolbarLayout extends FrameLayout +@@ -586,7 +587,9 @@ public abstract class ToolbarLayout extends FrameLayout * not have a tab strip. */ protected int getTabStripHeightFromResource() { @@ -627,7 +627,7 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -30,6 +30,7 @@ import org.chromium.content_public.browser.ContentFeatureList; +@@ -29,6 +29,7 @@ import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; @@ -635,7 +635,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c /** Fragment to keep track of all the accessibility related preferences. */ @NullMarked -@@ -45,6 +46,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -44,6 +45,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment public static final String PREF_ZOOM_INFO = "zoom_info"; public static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions"; @@ -645,7 +645,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -112,6 +116,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -108,6 +112,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getReaderAccessibilityDelegate().getValue()); readerForAccessibilityPref.setOnPreferenceChangeListener(this); @@ -658,7 +658,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -171,6 +181,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -167,6 +177,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment public boolean onPreferenceChange(Preference preference, Object newValue) { if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { mDelegate.getForceEnableZoomAccessibilityDelegate().setValue((Boolean) newValue); @@ -683,7 +683,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java -@@ -69,6 +69,14 @@ public class DeviceFormFactor { +@@ -83,6 +83,14 @@ public class DeviceFormFactor { return BuildConfig.IS_DESKTOP_ANDROID; } @@ -698,7 +698,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** * Each activity could be on a different display, and this will just tell you whether the * display associated with the application context is "tablet sized". Use {@link -@@ -77,6 +85,7 @@ public class DeviceFormFactor { +@@ -91,6 +99,7 @@ public class DeviceFormFactor { @CalledByNative @Deprecated public static boolean isTablet() { @@ -706,7 +706,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui if (sIsTabletForTesting != null) { return sIsTabletForTesting; } -@@ -107,6 +116,7 @@ public class DeviceFormFactor { +@@ -121,6 +130,7 @@ public class DeviceFormFactor { * E.g. http://developer.samsung.com/samsung-dex/testing */ public static boolean isNonMultiDisplayContextOnTablet(Context context) { @@ -714,7 +714,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; } -@@ -142,6 +152,7 @@ public class DeviceFormFactor { +@@ -156,6 +166,7 @@ public class DeviceFormFactor { * @return The screen width bucket the device is in (see constants at the top of this class). */ private static int detectScreenWidthBucket(Context context) { @@ -722,7 +722,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -149,6 +160,7 @@ public class DeviceFormFactor { +@@ -163,6 +174,7 @@ public class DeviceFormFactor { ThreadUtils.assertOnUiThread(); Context context = windowAndroid.getContext().get(); if (context == null) return 0; @@ -730,7 +730,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -158,6 +170,7 @@ public class DeviceFormFactor { +@@ -172,6 +184,7 @@ public class DeviceFormFactor { */ @UiThread public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) { @@ -738,7 +738,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context)); } -@@ -166,6 +179,7 @@ public class DeviceFormFactor { +@@ -180,6 +193,7 @@ public class DeviceFormFactor { * layout. */ public static int getMinimumTabletWidthPx(DisplayAndroid display) { diff --git a/build/patches/Add-search-engine.patch b/build/patches/Add-search-engine.patch index 10b7697d..752b62e8 100644 --- a/build/patches/Add-search-engine.patch +++ b/build/patches/Add-search-engine.patch @@ -9,7 +9,6 @@ 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 + components/search_engines/BUILD.gn | 3 ++ components/search_engines/cromite/BUILD.gn | 12 ++++++ .../cromite/cromite_prepopulated_engines.json | 37 ++++++++++++++++++ @@ -21,7 +20,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html tools/json_to_struct/json_to_struct.py | 26 ++++++++---- tools/json_to_struct/struct_generator.py | 10 +++-- tools/variations/fieldtrial_to_struct.py | 4 +- - 13 files changed, 114 insertions(+), 28 deletions(-) + 12 files changed, 113 insertions(+), 28 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 @@ -53,17 +52,6 @@ d#;kFnu^?NN9uE_uZ002ovPDHLkV1m60sc!%P literal 0 HcmV?d00001 -diff --git a/components/resources/search_engine_choice_scaled_resources.grdp b/components/resources/search_engine_choice_scaled_resources.grdp ---- a/components/resources/search_engine_choice_scaled_resources.grdp -+++ b/components/resources/search_engine_choice_scaled_resources.grdp -@@ -5,6 +5,7 @@ - - - -+ - - - 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 @@ -75,7 +63,7 @@ diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUIL ] deps = [ -@@ -158,6 +159,7 @@ source_set("search_engine_utils") { +@@ -163,6 +164,7 @@ source_set("search_engine_utils") { ":search_engine_type", "//components/google/core/common", "//third_party/search_engines_data:prepopulated_engines", @@ -83,7 +71,7 @@ diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUIL ] deps = [ "//url" ] -@@ -246,6 +248,7 @@ source_set("unit_tests") { +@@ -252,6 +254,7 @@ source_set("unit_tests") { "//testing/gmock", "//testing/gtest", "//third_party/search_engines_data:prepopulated_engines", @@ -153,7 +141,7 @@ new file mode 100644 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 -@@ -187,10 +187,7 @@ void RecordChoiceScreenDefaultSearchProviderType( +@@ -182,10 +182,7 @@ void RecordChoiceScreenDefaultSearchProviderType( } void RecordChoiceScreenSelectedIndex(int selected_engine_index) { @@ -296,7 +284,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .h file containing the definition of the structure specified by the schema. -@@ -139,11 +139,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -147,11 +147,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#include "%s"\n' % header) f.write(u'\n') @@ -313,7 +301,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ schema['type_name'], schema['schema'])) f.write(u'\n') -@@ -170,7 +174,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -176,7 +180,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#endif // %s\n' % header_guard) @@ -322,7 +310,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .cc file containing the static initializers for the of the elements specified in the description. -@@ -205,7 +209,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): +@@ -211,7 +215,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): f.write(element_generator.GenerateElements(schema['type_name'], schema['schema'], description)) @@ -331,7 +319,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ f.write('\n} // anonymous namespace \n\n') aggregated = GenerateCCAggregation(schema['type_name'], aggregation) -@@ -292,7 +296,7 @@ def GenerateClass(basepath, +@@ -298,7 +302,7 @@ def GenerateClass(basepath, def GenerateStruct(basepath, output_root, namespace, schema, description, @@ -340,7 +328,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates a C++ struct from a JSON description. Args: -@@ -311,8 +315,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, +@@ -317,8 +321,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) @@ -351,7 +339,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ if __name__ == '__main__': parser = optparse.OptionParser( -@@ -327,11 +331,17 @@ if __name__ == '__main__': +@@ -333,11 +337,17 @@ if __name__ == '__main__': parser.add_option('-s', '--schema', help='path to the schema file, ' 'mandatory.') parser.add_option('-o', '--output', help='output filename, ') @@ -369,7 +357,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ 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] -@@ -348,4 +358,4 @@ if __name__ == '__main__': +@@ -354,4 +364,4 @@ if __name__ == '__main__': schema = _Load(opts.schema) description = _Load(description_filename) GenerateStruct(basepath, output_root, opts.namespace, schema, description, diff --git a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch index c96e630e..017fb9ec 100644 --- a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch +++ b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch @@ -70,7 +70,7 @@ diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/va diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -162,6 +162,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -165,6 +165,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting mSnackbarManagerSupplier.get().showSnackbar(mSnackbar); } @@ -98,28 +98,28 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java -@@ -127,8 +127,9 @@ class ChromeContextMenuItem { - int RELOAD = 40; +@@ -123,8 +123,9 @@ class ChromeContextMenuItem { + int PRINT_PAGE = 38; // Developer Group - int INSPECT_ELEMENT = 41; -+ int FOLLOW_LINK = 42; + int INSPECT_ELEMENT = 39; ++ int FOLLOW_LINK = 40; // ALWAYS UPDATE! -- int NUM_ENTRIES = 42; -+ int NUM_ENTRIES = 43; +- int NUM_ENTRIES = 40; ++ int NUM_ENTRIES = 41; } /** Mapping from {@link Item} to the ID found in the ids.xml. */ -@@ -175,6 +176,7 @@ class ChromeContextMenuItem { - R.id.contextmenu_forward, // Item.FORWARD - R.id.contextmenu_reload, // Item.RELOAD +@@ -169,6 +170,7 @@ class ChromeContextMenuItem { + R.id.contextmenu_share_page, // Item.SHARE_PAGE + R.id.contextmenu_print_page, // Item.PRINT_PAGE R.id.contextmenu_inspect_element, // Item.INSPECT_ELEMENT + R.id.contextmenu_open_in_tab, // Item.OPEN_IN_NEW_CHROME_TAB }; /** Mapping from {@link Item} to the ID of the string that describes the action of the item. */ -@@ -221,6 +223,7 @@ class ChromeContextMenuItem { - R.string.contextmenu_forward, // Item.FORWARD - R.string.contextmenu_reload, // Item.RELOAD +@@ -213,6 +215,7 @@ class ChromeContextMenuItem { + R.string.contextmenu_share_page, // Item.SHARE_PAGE + R.string.contextmenu_print_page, // Item.PRINT_PAGE R.string.contextmenu_inspect_element, // Item.INSPECT_ELEMENT + R.string.contextmenu_open_in_tab, // Item.OPEN_IN_NEW_CHROME_TAB }; @@ -128,7 +128,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java -@@ -380,6 +380,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -369,6 +369,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } if (mParams.isAnchor()) { ModelList linkGroup = new ModelList(); @@ -138,7 +138,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl()) && UrlUtilities.isAcceptedScheme(mParams.getUrl())) { -@@ -817,6 +820,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -834,6 +837,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { getProfile(), false); }); @@ -168,27 +168,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -367,6 +367,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { - &kTabGroupEntryPointsAndroid, +@@ -381,6 +381,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kTabGroupParityBottomSheetAndroid, + &kTabletTabStripAnimation, &kToolbarPhoneCleanup, + &blink::features::kShowAlwaysContextMenuOnLinks, &kTabStateFlatBuffer, &kTabStripContextMenuAndroid, - &kTabStripGroupDragDropAndroid, + &kTabStripDensityChangeAndroid, diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -438,6 +438,8 @@ public abstract class ChromeFeatureList { +@@ -454,6 +454,8 @@ public abstract class ChromeFeatureList { "DisableToolbarSwipeUp"; public static final String MOVE_TOP_TOOLBAR_TO_BOTTOM = "MoveTopToolbarToBottom"; + public static final String SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS = + "ShowAlwaysContextMenuOnLinks"; - public static final String NEW_TAB_SEARCH_ENGINE_URL_ANDROID = "NewTabSearchEngineUrlAndroid"; + public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = + "NewTabPageCustomizationToolbarButton"; public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe"; - public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = -@@ -809,6 +811,8 @@ public abstract class ChromeFeatureList { +@@ -867,6 +869,8 @@ public abstract class ChromeFeatureList { newCachedFlag(DISABLE_TOOLBAR_SWIPE_UP, false); public static final CachedFlag sMoveTopToolbarToBottom = newCachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false); @@ -197,18 +197,18 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true); -@@ -978,6 +982,7 @@ public abstract class ChromeFeatureList { +@@ -1071,6 +1075,7 @@ public abstract class ChromeFeatureList { sTabWindowManagerReportIndicesMismatch, + sTopControlsRefactor, sTraceBinderIpc, - sUseChimeAndroidSdk, + sShowAlwaysContextMenuOnLinks, + sUseChimeAndroidSdk, + sUseActivityManagerForTabActivation, sUseLibunwindstackNativeUnwinderAndroid, - sWebApkMinShellApkVersion); - 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 -@@ -1725,6 +1725,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1719,6 +1719,12 @@ Your Google account may have other forms of browsing history like searches and a Disable toolbar swipe up @@ -221,7 +221,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -3326,6 +3332,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -3330,6 +3336,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Open in new Chrome tab @@ -249,7 +249,7 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -54,6 +54,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -53,6 +53,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment private BooleanPreferenceDelegate mMoveTopToolbarToBottomDelegate; private BooleanPreferenceDelegate mDisableToolbarSwipeUpDelegate; @@ -259,7 +259,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -143,6 +146,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -139,6 +142,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDisableToolbarSwipeUpPref.setChecked(mDisableToolbarSwipeUpDelegate.getValue()); mDisableToolbarSwipeUpPref.setOnPreferenceChangeListener(this); @@ -272,7 +272,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -224,6 +233,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -220,6 +229,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment } else if (PREF_DISABLE_TOOLBAR_SWIPE_UP.equals(preference.getKey())) { mDisableToolbarSwipeUpDelegate.setValue((Boolean) newValue); mDelegate.requestRestart(getActivity()); @@ -467,7 +467,7 @@ diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_ #include "third_party/blink/renderer/core/paint/timing/paint_timing.h" #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer_entry.h" -@@ -794,6 +796,21 @@ void HTMLImageElement::DidFinishLifecycleUpdate( +@@ -815,6 +817,21 @@ void HTMLImageElement::DidFinishLifecycleUpdate( } } @@ -504,7 +504,7 @@ diff --git a/third_party/blink/renderer/core/html/html_image_element.h b/third_p diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc --- a/third_party/blink/renderer/core/page/context_menu_controller.cc +++ b/third_party/blink/renderer/core/page/context_menu_controller.cc -@@ -198,14 +198,16 @@ void ContextMenuController::DocumentDetached(Document* document) { +@@ -200,14 +200,16 @@ void ContextMenuController::DocumentDetached(Document* document) { } } @@ -524,7 +524,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t mouse_event->SetDefaultHandled(); } -@@ -430,7 +432,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( +@@ -432,7 +434,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( bool ContextMenuController::ShowContextMenu(LocalFrame* frame, const PhysicalOffset& point, WebMenuSourceType source_type, @@ -534,7 +534,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t // Displaying the context menu in this function is a big hack as we don't // have context, i.e. whether this is being invoked via a script or in // response to user input (Mouse event WM_RBUTTONDOWN, -@@ -453,6 +456,16 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, +@@ -455,6 +458,16 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, if (!result.InnerNodeOrImageMapImage()) return false; @@ -551,7 +551,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t // Clear any previously set cached results if we are resetting the hit test // result. image_selection_cached_result_ = nullptr; -@@ -816,11 +829,13 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, +@@ -830,11 +843,13 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, SetAutofillData(result.InnerNode(), data); diff --git a/build/patches/Bromite-auto-updater.patch b/build/patches/Bromite-auto-updater.patch index aec9f039..b313d0d2 100644 --- a/build/patches/Bromite-auto-updater.patch +++ b/build/patches/Bromite-auto-updater.patch @@ -36,12 +36,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../safety_hub/SafetyHubFetchService.java | 5 - .../strings/android_chrome_strings.grd | 23 +- .../ui/lens/lens_overlay_query_controller.cc | 1 + - .../endpoint_fetcher/endpoint_fetcher.cc | 133 ++++++-- + .../endpoint_fetcher/endpoint_fetcher.cc | 132 ++++++-- .../endpoint_fetcher/endpoint_fetcher.h | 24 ++ components/manta/base_provider.cc | 1 + .../Bromite-auto-updater.inc | 3 + .../Bromite-auto-updater.inc | 1 + - 33 files changed, 1240 insertions(+), 95 deletions(-) + 33 files changed, 1239 insertions(+), 95 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/CromiteUpdateStatusProvider.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java create mode 100644 chrome/browser/endpoint_fetcher/BUILD.gn @@ -70,7 +70,7 @@ diff --git a/build/android/java/templates/BuildConfig.template b/build/android/j diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1938,6 +1938,9 @@ if (!is_robolectric && enable_java_templates) { +@@ -1936,6 +1936,9 @@ if (!is_robolectric && enable_java_templates) { sources = [ "//build/android/java/templates/BuildConfig.template" ] defines = [] @@ -110,7 +110,7 @@ diff --git a/chrome/android/java/res/xml/about_chrome_preferences.xml b/chrome/a diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java -@@ -25,12 +25,18 @@ import org.chromium.ui.widget.Toast; +@@ -29,13 +29,19 @@ import org.chromium.ui.widget.Toast; import java.util.Calendar; @@ -119,6 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/ +import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; + /** Settings fragment that displays information about Chrome. */ + @NullMarked public class AboutChromeSettings extends PreferenceFragmentCompat - implements EmbeddableSettingsPage, Preference.OnPreferenceClickListener { + implements EmbeddableSettingsPage, Preference.OnPreferenceClickListener, @@ -130,8 +131,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/ private static final String PREF_OS_VERSION = "os_version"; private static final String PREF_LEGAL_INFORMATION = "legal_information"; -@@ -64,6 +70,13 @@ public class AboutChromeSettings extends PreferenceFragmentCompat - p = findPreference(PREF_LEGAL_INFORMATION); +@@ -72,6 +78,13 @@ public class AboutChromeSettings extends PreferenceFragmentCompat + assumeNonNull(p); int currentYear = Calendar.getInstance().get(Calendar.YEAR); p.setSummary(getString(R.string.legal_information_summary, currentYear)); + @@ -144,7 +145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/ } @Override -@@ -134,6 +147,19 @@ public class AboutChromeSettings extends PreferenceFragmentCompat +@@ -142,6 +155,19 @@ public class AboutChromeSettings extends PreferenceFragmentCompat return true; } @@ -676,7 +677,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2580,6 +2580,12 @@ static_library("browser") { +@@ -2620,6 +2620,12 @@ static_library("browser") { } if (is_android) { @@ -1089,25 +1090,25 @@ new file mode 100644 diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -324,6 +324,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -335,6 +335,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kProtectedTabsAndroid, &kPwaRestoreUi, &kPwaRestoreUiAtStartup, + &kInlineUpdateFlow, &kOmahaMinSdkVersionAndroid, &kShortCircuitUnfocusAnimation, - &kShowNewTabAnimations, + &kShowHomeButtonPolicyAndroid, diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -401,6 +401,7 @@ public abstract class ChromeFeatureList { - public static final String HISTORY_PANE_ANDROID = "HistoryPaneAndroid"; +@@ -416,6 +416,7 @@ public abstract class ChromeFeatureList { + "HomepageIsNewTabPagePolicyAndroid"; public static final String HTTPS_FIRST_BALANCED_MODE = "HttpsFirstBalancedMode"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; + public static final String INLINE_UPDATE_FLOW = "InlineUpdateFlow"; + public static final String INSTANCE_SWITCHER_V2 = "InstanceSwitcherV2"; public static final String IP_PROTECTION_UX = "IpProtectionUx"; - public static final String KEYBOARD_ESC_BACK_NAVIGAION = "KeyboardEscBackNavigation"; - public static final String LEGACY_TAB_STATE_DEPRECATION = "LegacyTabStateDeprecation"; + public static final String KEYBOARD_ESC_BACK_NAVIGATION = "KeyboardEscBackNavigation"; diff --git a/chrome/browser/omaha/android/BUILD.gn b/chrome/browser/omaha/android/BUILD.gn --- a/chrome/browser/omaha/android/BUILD.gn +++ b/chrome/browser/omaha/android/BUILD.gn @@ -1656,7 +1657,7 @@ new file mode 100644 diff --git a/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/browser/safety_hub/SafetyHubFetchService.java b/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/browser/safety_hub/SafetyHubFetchService.java --- a/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/browser/safety_hub/SafetyHubFetchService.java +++ b/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/browser/safety_hub/SafetyHubFetchService.java -@@ -82,9 +82,6 @@ public class SafetyHubFetchService implements SigninManager.SignInStateObserver, +@@ -84,9 +84,6 @@ public class SafetyHubFetchService implements SigninManager.SignInStateObserver, mLocalPasswordsFetchService = new SafetyHubPasswordsFetchService(passwordManagerHelper, prefService, null); @@ -1666,7 +1667,7 @@ diff --git a/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/brow recordMetricForUnusedSitePermissionsSettingState(); } -@@ -113,8 +110,6 @@ public class SafetyHubFetchService implements SigninManager.SignInStateObserver, +@@ -115,8 +112,6 @@ public class SafetyHubFetchService implements SigninManager.SignInStateObserver, if (mSigninManager != null) { mSigninManager.removeSignInStateObserver(this); } @@ -1678,7 +1679,7 @@ diff --git a/chrome/browser/safety_hub/android/java/src/org/chromium/chrome/brow 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 -@@ -2410,6 +2410,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2420,6 +2420,12 @@ Your Google account may have other forms of browsing history like searches and a Chrome updates are no longer supported for this version of Android @@ -1691,7 +1692,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -4361,7 +4367,10 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4383,7 +4389,10 @@ To change this setting, BEGIN_LINKdelete the Chrome d @@ -1703,7 +1704,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Newer version is available -@@ -4372,6 +4381,18 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4394,6 +4403,18 @@ To change this setting, BEGIN_LINKdelete the Chrome d Android version is unsupported @@ -1725,8 +1726,8 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/lens/lens_overlay_query_controller.cc b/chrome/browser/ui/lens/lens_overlay_query_controller.cc --- a/chrome/browser/ui/lens/lens_overlay_query_controller.cc +++ b/chrome/browser/ui/lens/lens_overlay_query_controller.cc -@@ -924,6 +924,7 @@ LensOverlayQueryController::CreateEndpointFetcher( - /*post_data=*/request_string, +@@ -923,6 +923,7 @@ LensOverlayQueryController::CreateEndpointFetcher( + /*post_data=*/std::move(request_string), /*headers=*/request_headers, /*cors_exempt_headers=*/cors_exempt_headers, chrome::GetChannel(), + kTrafficAnnotationTag, @@ -1745,10 +1746,10 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi +#include "net/http/http_status_code.h" +#include "services/network/public/cpp/resource_request.h" + + namespace endpoint_fetcher { + namespace { - const char kContentTypeKey[] = "Content-Type"; - const char kDeveloperKey[] = "X-Developer-Key"; -@@ -35,6 +40,8 @@ std::string GetHttpMethodString(const HttpMethod& http_method) { +@@ -37,6 +42,8 @@ std::string GetHttpMethodString(const HttpMethod& http_method) { return "POST"; case HttpMethod::kDelete: return "DELETE"; @@ -1757,7 +1758,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi default: DCHECK(0) << base::StringPrintf("Unknown HttpMethod %d\n", static_cast(http_method)); -@@ -49,6 +56,8 @@ HttpMethod GetHttpMethod(const std::string& http_method_string) { +@@ -51,6 +58,8 @@ HttpMethod GetHttpMethod(const std::string& http_method_string) { return HttpMethod::kPost; } else if (http_method_string == "DELETE") { return HttpMethod::kDelete; @@ -1766,7 +1767,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi } return HttpMethod::kUndefined; } -@@ -115,9 +124,11 @@ EndpointFetcher::EndpointFetcher( +@@ -117,9 +126,11 @@ EndpointFetcher::EndpointFetcher( const std::vector& headers, const std::vector& cors_exempt_headers, version_info::Channel channel, @@ -1778,7 +1779,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi consent_level_(std::nullopt), sanitize_response_(true), channel_(channel), -@@ -137,6 +148,7 @@ EndpointFetcher::EndpointFetcher( +@@ -139,6 +150,7 @@ EndpointFetcher::EndpointFetcher( const net::NetworkTrafficAnnotationTag& annotation_tag) : url_loader_factory_(url_loader_factory), identity_manager_(nullptr), @@ -1786,7 +1787,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi consent_level_(std::nullopt), sanitize_response_(false), request_params_(EndpointFetcher::RequestParams::Builder(HttpMethod::kGet, -@@ -161,6 +173,7 @@ EndpointFetcher::EndpointFetcher( +@@ -163,6 +175,7 @@ EndpointFetcher::EndpointFetcher( : oauth_consumer_name_(oauth_consumer_name), url_loader_factory_(url_loader_factory), identity_manager_(identity_manager), @@ -1794,15 +1795,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi consent_level_(consent_level), sanitize_response_(true), request_params_( -@@ -190,6 +203,7 @@ EndpointFetcher::EndpointFetcher( - bool is_oauth_fetch) - : url_loader_factory_(url_loader_factory), - identity_manager_(nullptr), -+ intercept_redirect_(false), - consent_level_(std::nullopt), - sanitize_response_(true), - request_params_( -@@ -207,6 +221,7 @@ EndpointFetcher::EndpointFetcher( +@@ -182,6 +195,7 @@ EndpointFetcher::EndpointFetcher( EndpointFetcher::EndpointFetcher( const net::NetworkTrafficAnnotationTag& annotation_tag) : identity_manager_(nullptr), @@ -1810,7 +1803,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi consent_level_(std::nullopt), sanitize_response_(true), request_params_( -@@ -215,6 +230,27 @@ EndpointFetcher::EndpointFetcher( +@@ -190,6 +204,27 @@ EndpointFetcher::EndpointFetcher( .SetTimeout(kDefaultTimeOut) .Build()) {} @@ -1838,7 +1831,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi EndpointFetcher::~EndpointFetcher() = default; void EndpointFetcher::Fetch(EndpointFetcherCallback endpoint_fetcher_callback) { -@@ -272,12 +308,9 @@ void EndpointFetcher::PerformRequest( +@@ -247,12 +282,9 @@ void EndpointFetcher::PerformRequest( auto resource_request = std::make_unique(); resource_request->method = GetHttpMethodString(request_params_.http_method()); resource_request->url = request_params_.url(); @@ -1854,7 +1847,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi if (request_params_.http_method() == HttpMethod::kPost) { resource_request->headers.SetHeader(kContentTypeKey, request_params_.content_type()); -@@ -305,10 +338,26 @@ void EndpointFetcher::PerformRequest( +@@ -280,10 +312,26 @@ void EndpointFetcher::PerformRequest( default: break; } @@ -1881,7 +1874,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi if (request_params_.http_method() == HttpMethod::kPost) { simple_url_loader_->AttachStringForUpload( -@@ -320,15 +369,25 @@ void EndpointFetcher::PerformRequest( +@@ -295,15 +343,25 @@ void EndpointFetcher::PerformRequest( } simple_url_loader_->SetRetryOptions(GetMaxRetries(), network::SimpleURLLoader::RETRY_ON_5XX); @@ -1913,7 +1906,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi } void EndpointFetcher::OnResponseFetched( -@@ -406,21 +465,6 @@ void EndpointFetcher::OnSanitizationResult( +@@ -381,21 +439,6 @@ void EndpointFetcher::OnSanitizationResult( std::move(endpoint_fetcher_callback).Run(std::move(response)); } @@ -1935,11 +1928,10 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi int EndpointFetcher::GetMaxRetries() const { if (!request_params_.max_retries.has_value()) { return kNumRetries; -@@ -445,3 +489,38 @@ UploadProgressCallback EndpointFetcher::GetUploadProgressCallback() const { - std::string EndpointFetcher::GetUrlForTesting() { +@@ -421,4 +464,39 @@ std::string EndpointFetcher::GetUrlForTesting() { return request_params_.url().spec(); } -+ + +void EndpointFetcher::OnSimpleLoaderRedirect( + const GURL& url_before_redirect, + const net::RedirectInfo& redirect_info, @@ -1974,10 +1966,12 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi + response_->response = net_error; + std::move(endpoint_fetcher_callback_).Run(std::move(response_)); +} ++ + } // namespace endpoint_fetcher diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoint_fetcher/endpoint_fetcher.h --- a/components/endpoint_fetcher/endpoint_fetcher.h +++ b/components/endpoint_fetcher/endpoint_fetcher.h -@@ -32,6 +32,8 @@ class EndpointFetcherTest; +@@ -21,6 +21,8 @@ namespace base { class TimeDelta; } // namespace base @@ -1986,7 +1980,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin namespace network { struct ResourceRequest; -@@ -61,6 +63,7 @@ enum class HttpMethod { +@@ -59,6 +61,7 @@ enum class HttpMethod { kGet = 0, kPost = 1, kDelete = 2, @@ -1994,7 +1988,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin }; enum AuthType { -@@ -76,6 +79,8 @@ enum AuthType { +@@ -74,6 +77,8 @@ enum AuthType { struct EndpointResponse { std::string response; @@ -2003,7 +1997,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin int http_status_code{-1}; std::optional error_type; }; -@@ -296,6 +301,7 @@ class EndpointFetcher { +@@ -294,6 +299,7 @@ class EndpointFetcher { const std::vector& headers, const std::vector& cors_exempt_headers, version_info::Channel channel, @@ -2011,7 +2005,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin const RequestParams request_params); // Constructor if no authentication is needed. -@@ -304,6 +310,14 @@ class EndpointFetcher { +@@ -302,6 +308,14 @@ class EndpointFetcher { const GURL& url, const net::NetworkTrafficAnnotationTag& annotation_tag); @@ -2026,7 +2020,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin // Used for tests. Can be used if caller constructs their own // url_loader_factory and identity_manager. EndpointFetcher( -@@ -360,6 +374,11 @@ class EndpointFetcher { +@@ -344,6 +358,11 @@ class EndpointFetcher { void OnSanitizationResult(std::unique_ptr response, EndpointFetcherCallback endpoint_fetcher_callback, data_decoder::JsonSanitizer::Result result); @@ -2038,7 +2032,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin network::mojom::CredentialsMode GetCredentialsMode() const; int GetMaxRetries() const; -@@ -370,12 +389,14 @@ class EndpointFetcher { +@@ -354,12 +373,14 @@ class EndpointFetcher { // network::SimpleURLLoader. const std::string oauth_consumer_name_; signin::ScopeSet oauth_scopes_; @@ -2053,7 +2047,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin // `consent_level_` is used together with `identity_manager_`, so it can be // null if `identity_manager_` is null. const std::optional consent_level_; -@@ -388,6 +409,9 @@ class EndpointFetcher { +@@ -372,6 +393,9 @@ class EndpointFetcher { access_token_fetcher_; std::unique_ptr simple_url_loader_; @@ -2066,7 +2060,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin diff --git a/components/manta/base_provider.cc b/components/manta/base_provider.cc --- a/components/manta/base_provider.cc +++ b/components/manta/base_provider.cc -@@ -160,6 +160,7 @@ std::unique_ptr BaseProvider::CreateEndpointFetcherForDemoMode( +@@ -163,6 +163,7 @@ std::unique_ptr BaseProvider::CreateEndpointFetcherForDemoMode( /*cors_exempt_headers=*/std::vector(), // ChromeOS always uses the stable channel API key version_info::Channel::STABLE, diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index c6849894..c9b599ec 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -44,7 +44,7 @@ Require: bromite-build-utils.patch .../BromiteCustomContentSettingImpl.java | 412 ++++++++++++++++++ ...tomTriStateSiteSettingsPreferenceImpl.java | 24 + .../ContentSettingsResources.java | 37 +- - .../site_settings/SingleCategorySettings.java | 54 ++- + .../site_settings/SingleCategorySettings.java | 60 ++- .../site_settings/SingleWebsiteSettings.java | 58 ++- .../site_settings/SiteSettings.java | 33 +- .../site_settings/SiteSettingsCategory.java | 18 +- @@ -72,7 +72,7 @@ Require: bromite-build-utils.patch .../core/common/content_settings.mojom | 6 + .../common/content_settings_mojom_traits.cc | 12 +- .../common/content_settings_mojom_traits.h | 24 + - .../core/common/content_settings_types.mojom | 2 + + .../core/common/content_settings_types.mojom | 1 + .../renderer/content_settings_agent_impl.cc | 74 ++++ .../renderer/content_settings_agent_impl.h | 9 + .../PageInfoPermissionsController.java | 9 + @@ -84,7 +84,7 @@ Require: bromite-build-utils.patch .../platform/web_content_settings_client.h | 13 + .../execution_context/execution_context.cc | 16 + .../execution_context/execution_context.h | 5 + - 73 files changed, 1963 insertions(+), 102 deletions(-) + 73 files changed, 1963 insertions(+), 107 deletions(-) create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java @@ -118,7 +118,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C } @Override -@@ -389,6 +393,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -370,6 +374,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { return mPrivacySandboxBridge.getRelatedWebsiteSetOwner(memberOrigin); } @@ -151,7 +151,7 @@ diff --git a/chrome/browser/content_settings/page_specific_content_settings_dele diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html -@@ -1595,4 +1595,5 @@ +@@ -1345,4 +1345,5 @@ @@ -160,7 +160,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts -@@ -52,6 +52,7 @@ import {SiteSettingsPrefsBrowserProxyImpl} from '../site_settings/site_settings_ +@@ -54,6 +54,7 @@ import {SiteSettingsPrefsBrowserProxyImpl} from '../site_settings/site_settings_ import {PrivacyGuideAvailabilityMixin} from './privacy_guide/privacy_guide_availability_mixin.js'; import {getTemplate} from './privacy_page.html.js'; @@ -168,7 +168,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/ch interface BlockAutoplayStatus { enabled: boolean; -@@ -75,8 +76,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { +@@ -77,8 +78,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { return 'settings-privacy-page'; } @@ -263,7 +263,7 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc /** * Add all of the child routes that originate from the privacy route, -@@ -172,6 +173,7 @@ function addPrivacyChildRoutes(r: Partial) { +@@ -164,6 +165,7 @@ function addPrivacyChildRoutes(r: Partial) { r.SITE_SETTINGS_LOCAL_NETWORK_ACCESS = r.SITE_SETTINGS.createChild('localNetworkAccess'); } @@ -710,7 +710,7 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1817,6 +1817,7 @@ static_library("ui") { +@@ -1757,6 +1757,7 @@ static_library("ui") { "//components/commerce/core/mojom:mojo_bindings", "//components/commerce/core/webui", "//components/endpoint_fetcher:endpoint_fetcher", @@ -718,10 +718,10 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn "//components/enterprise/common:files_scan_data", "//components/feedback/proto", "//components/headless/policy", -@@ -5055,6 +5056,7 @@ static_library("ui") { +@@ -5013,6 +5014,7 @@ static_library("ui") { + "//components/power_bookmarks/core:core", "//components/power_bookmarks/storage", "//components/prefs", - "//components/reading_list/features:flags", + "//components/strings:components_strings_grit", "//components/services/app_service", "//components/soda", @@ -746,15 +746,15 @@ diff --git a/chrome/browser/ui/views/controls/rich_controls_container_view.h b/c diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc --- a/chrome/browser/ui/views/page_info/page_info_main_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc -@@ -56,6 +56,7 @@ - #include "ui/views/controls/separator.h" +@@ -59,6 +59,7 @@ #include "ui/views/layout/box_layout.h" #include "ui/views/layout/flex_layout.h" + #include "ui/views/vector_icons.h" +#include "ui/views/layout/table_layout.h" #include "ui/views/view_class_properties.h" #if BUILDFLAG(FULL_SAFE_BROWSING) -@@ -258,8 +259,20 @@ void PageInfoMainView::SetPermissionInfo( +@@ -284,8 +285,20 @@ void PageInfoMainView::SetPermissionInfo( scroll_view->SetDrawOverflowIndicator(false); auto* content_view = scroll_view->SetContents(std::make_unique()); @@ -777,7 +777,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b content_view->SetID(PageInfoViewFactory::VIEW_ID_PAGE_INFO_PERMISSION_VIEW); content_view->SetProperty(views::kElementIdentifierKey, kPermissionsElementId); -@@ -274,11 +287,16 @@ void PageInfoMainView::SetPermissionInfo( +@@ -300,11 +313,16 @@ void PageInfoMainView::SetPermissionInfo( } } @@ -794,7 +794,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b toggle_row->SetProperty(views::kCrossAxisAlignmentKey, views::LayoutAlignment::kStretch); syncable_permission_rows_.emplace(permission.type, toggle_row); -@@ -286,6 +304,8 @@ void PageInfoMainView::SetPermissionInfo( +@@ -312,6 +330,8 @@ void PageInfoMainView::SetPermissionInfo( } for (auto& object : chosen_object_info_list) { @@ -803,7 +803,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b // The view takes ownership of the object info. auto object_view = std::make_unique( std::move(object), -@@ -296,6 +316,10 @@ void PageInfoMainView::SetPermissionInfo( +@@ -322,6 +342,10 @@ void PageInfoMainView::SetPermissionInfo( content_view->AddChildView(std::move(object_view))); } @@ -817,16 +817,16 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrome/browser/ui/views/page_info/page_info_view_factory.cc --- a/chrome/browser/ui/views/page_info/page_info_view_factory.cc +++ b/chrome/browser/ui/views/page_info/page_info_view_factory.cc -@@ -27,6 +27,8 @@ - #include "chrome/browser/ui/views/page_info/page_info_permission_content_view.h" +@@ -28,6 +28,8 @@ #include "chrome/browser/ui/views/page_info/page_info_security_content_view.h" #include "components/content_settings/core/common/content_settings_types.h" + #include "components/content_settings/core/common/cookie_controls_state.h" +#include "components/content_settings/core/browser/website_settings_info.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/page_info/core/features.h" #include "components/page_info/core/proto/about_this_site_metadata.pb.h" #include "components/page_info/page_info.h" -@@ -279,7 +281,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -292,7 +294,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( ContentSetting setting = info.setting == CONTENT_SETTING_DEFAULT ? info.default_setting : info.setting; @@ -841,7 +841,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom // For guard content settings and Automatic Picture-in-Picture, ASK is treated // as an "on" state. const bool show_blocked_badge = -@@ -580,6 +589,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -593,6 +602,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( icon = &vector_icons::kPrinterIcon; break; default: @@ -862,7 +862,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.h b/chrome/browser/ui/views/page_info/page_info_view_factory.h --- a/chrome/browser/ui/views/page_info/page_info_view_factory.h +++ b/chrome/browser/ui/views/page_info/page_info_view_factory.h -@@ -97,6 +97,11 @@ class PageInfoViewFactory { +@@ -100,6 +100,11 @@ class PageInfoViewFactory { const PageInfo::PermissionInfo& info, bool blocked_on_system_level = false); @@ -1187,7 +1187,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide #include "components/password_manager/core/browser/leak_detection_dialog_utils.h" #include "components/password_manager/core/browser/manage_passwords_referrer.h" #include "components/password_manager/core/common/password_manager_features.h" -@@ -3841,6 +3845,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3811,6 +3815,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -1256,8 +1256,8 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_pattern.h" #include "components/content_settings/core/common/content_settings_types.h" -@@ -258,13 +260,13 @@ constexpr auto kContentSettingsTypeGroupNames = std::to_array< - {ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, nullptr}, +@@ -261,13 +263,13 @@ constexpr auto kContentSettingsTypeGroupNames = std::to_array< + {ContentSettingsType::SUSPICIOUS_NOTIFICATION_IDS, nullptr}, }); -static_assert( @@ -1277,7 +1277,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b struct SiteSettingSourceStringMapping { SiteSettingSource source; -@@ -526,6 +528,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { +@@ -529,6 +531,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { return true; } } @@ -1291,7 +1291,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b return false; } -@@ -539,11 +548,24 @@ ContentSettingsType ContentSettingsTypeFromGroupName(std::string_view name) { +@@ -542,11 +551,24 @@ ContentSettingsType ContentSettingsTypeFromGroupName(std::string_view name) { return entry.type; } } @@ -1317,7 +1317,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b for (const auto& entry : kContentSettingsTypeGroupNames) { if (type == entry.type) { // Content setting types that aren't represented in the settings UI -@@ -558,7 +580,6 @@ std::string_view ContentSettingsTypeToGroupName(ContentSettingsType type) { +@@ -561,7 +583,6 @@ std::string_view ContentSettingsTypeToGroupName(ContentSettingsType type) { return entry.name ? entry.name : std::string_view(); } } @@ -1325,7 +1325,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b NOTREACHED() << static_cast(type) << " is not a recognized content settings type."; } -@@ -670,6 +691,13 @@ std::vector GetVisiblePermissionCategories( +@@ -673,6 +694,13 @@ std::vector GetVisiblePermissionCategories( base_types->push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -1450,7 +1450,7 @@ new file mode 100644 diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java -@@ -29,6 +29,7 @@ public class SpinnerPreference extends Preference { +@@ -29,6 +29,7 @@ public class SpinnerPreference extends Preference implements Preference.OnPrefer private @Nullable ArrayAdapter mAdapter; private int mSelectedIndex; private final boolean mSingleLine; @@ -1458,8 +1458,8 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium /** Constructor for inflating from XML. */ public SpinnerPreference(Context context, AttributeSet attrs) { -@@ -43,6 +44,19 @@ public class SpinnerPreference extends Preference { - } +@@ -44,6 +45,19 @@ public class SpinnerPreference extends Preference implements Preference.OnPrefer + setOnPreferenceClickListener(this); } + public SpinnerPreference(Context context, boolean singleLine) { @@ -1478,7 +1478,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium /** * Provides a list of arbitrary objects to be shown in the spinner. Visually, each option will * be presented as its toString() text. Alternative to {@link #setAdapter(ArrayAdapter, int)}. -@@ -62,6 +76,12 @@ public class SpinnerPreference extends Preference { +@@ -63,6 +77,12 @@ public class SpinnerPreference extends Preference implements Preference.OnPrefer mSelectedIndex = selectedIndex; } @@ -1491,7 +1491,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium /** Returns the Spinner instance for introspection during tests. */ public @Nullable Spinner getSpinnerForTesting() { return mSpinner; -@@ -94,6 +114,10 @@ public class SpinnerPreference extends Preference { +@@ -95,6 +115,10 @@ public class SpinnerPreference extends Preference implements Preference.OnPrefer public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); @@ -2222,7 +2222,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c int icon, int title, @ContentSettingValues @Nullable Integer defaultEnabledValue, -@@ -629,6 +650,8 @@ public class ContentSettingsResources { +@@ -624,6 +645,8 @@ public class ContentSettingsResources { R.string.website_settings_vr_ask, R.string.website_settings_vr_block); } @@ -2231,7 +2231,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c assert false; // NOTREACHED return assumeNonNull(null); } -@@ -787,6 +810,14 @@ public class ContentSettingsResources { +@@ -782,6 +805,14 @@ public class ContentSettingsResources { return getResourceItem(contentType).getDefaultDisabledValue(); } @@ -2246,7 +2246,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** * Returns the string resource id for a given ContentSetting to show with a permission category. * -@@ -961,6 +992,8 @@ public class ContentSettingsResources { +@@ -956,6 +987,8 @@ public class ContentSettingsResources { */ public static int @Nullable [] getTriStateSettingDescriptionIDs( int contentType, boolean isPermissionSiteSettingsRadioButtonFeatureEnabled) { @@ -2308,7 +2308,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) { getSiteSettingsDelegate() .launchProtectedContentHelpAndFeedbackActivity(getActivity()); -@@ -659,6 +673,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -664,6 +678,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment BrowserContextHandle browserContextHandle = getSiteSettingsDelegate().getBrowserContextHandle(); PrefService prefService = UserPrefs.get(browserContextHandle); @@ -2320,7 +2320,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (BINARY_RADIO_BUTTON_KEY.equals(preference.getKey()) || BINARY_TOGGLE_KEY.equals(preference.getKey())) { assert !mCategory.isManaged(); -@@ -837,7 +856,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -842,7 +861,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? R.string.website_settings_add_site_description_javascript_optimizer_block : R.string.website_settings_add_site_description_javascript_optimizer_allow; } @@ -2329,7 +2329,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // OnPreferenceClickListener: -@@ -957,10 +976,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -962,21 +981,18 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment default: break; } @@ -2339,12 +2339,24 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + Boolean allow = BromiteCustomContentSettingImpl.allowSpecifyingExceptions(mCategory); + if (allow != null) allowSpecifyingExceptions = (boolean)allow; if (allowSpecifyingExceptions) { +- boolean enableAddExceptionButton = +- (!mCategory.isManaged() +- || mCategory.getType() +- == SiteSettingsCategory.Type.THIRD_PARTY_COOKIES); + int exceptionDialogMessageResourceId = getAddExceptionDialogMessageResourceId(); + assert exceptionDialogMessageResourceId != 0; getPreferenceScreen() .addPreference( new AddExceptionPreference( -@@ -1145,8 +1165,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + getStyledContext(), + ADD_EXCEPTION_KEY, + getString(exceptionDialogMessageResourceId), +- enableAddExceptionButton, ++ true, + mCategory, + this)); + } +@@ -1155,8 +1171,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment private boolean isBlocked() { switch (mGlobalToggleLayout) { case GlobalToggleLayout.TRI_STATE_TOGGLE: @@ -2361,7 +2373,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return (triStateToggle.getCheckedSetting() == ContentSettingValues.BLOCK); case GlobalToggleLayout.TRI_STATE_COOKIE_TOGGLE: TriStateCookieSettingsPreference triStateCookieToggle = -@@ -1293,7 +1321,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1303,7 +1327,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else if (res_id != -1) { infoText.setSummary(res_id); } else { @@ -2374,7 +2386,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // Hide the anti-abuse text preferences, as needed. -@@ -1332,6 +1364,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1342,6 +1370,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else { screen.removePreference(mLocationTriStatePref); } @@ -2382,7 +2394,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c maybeShowReasonToggleDisabled(screen); -@@ -1544,6 +1577,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1554,6 +1583,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment iconIds = ContentSettingsResources.getTriStateSettingIconIDs(contentType); } triStateToggle.initialize( @@ -2390,7 +2402,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c setting, descriptionIds, iconIds, -@@ -1703,6 +1737,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1713,6 +1743,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment @ContentSettingValues Integer value = site.getContentSetting(browserContextHandle, contentSettingsType); @@ -2449,7 +2461,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c preference.setKey(getPreferenceKey(type)); if (type == ContentSettingsType.ADS) { -@@ -1274,20 +1288,32 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1278,20 +1292,32 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment @ContentSettingValues @Nullable Integer value, boolean isEmbargoed, boolean isOneTime) { @@ -2490,7 +2502,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } -@@ -1512,14 +1538,20 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1516,14 +1542,20 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment if (newValue instanceof Boolean) { permission = (Boolean) newValue ? getEnabledValue(type) : ContentSettingValues.BLOCK; } else { @@ -2653,7 +2665,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java -@@ -213,6 +213,8 @@ public interface SiteSettingsDelegate { +@@ -198,6 +198,8 @@ public interface SiteSettingsDelegate { */ String getRelatedWebsiteSetOwner(String memberOrigin); @@ -2712,7 +2724,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -336,7 +336,11 @@ public final class Website implements WebsiteEntry { +@@ -337,7 +337,11 @@ public final class Website implements WebsiteEntry { RecordUserAction.record("SoundContentSetting.UnmuteBy.SiteSettings"); } } @@ -2836,7 +2848,7 @@ diff --git a/components/content_settings/android/BUILD.gn b/components/content_s diff --git a/components/content_settings/core/browser/BUILD.gn b/components/content_settings/core/browser/BUILD.gn --- a/components/content_settings/core/browser/BUILD.gn +++ b/components/content_settings/core/browser/BUILD.gn -@@ -86,6 +86,13 @@ static_library("browser") { +@@ -77,6 +77,13 @@ static_library("browser") { } configs += [ "//build/config/compiler:wexit_time_destructors" ] @@ -2867,7 +2879,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. namespace content_settings { -@@ -873,6 +874,7 @@ void ContentSettingsRegistry::Init() { +@@ -864,6 +865,7 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); @@ -2878,7 +2890,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc -@@ -218,11 +218,7 @@ void RecordContentSettingsHistogram(const std::string& name, +@@ -222,11 +222,7 @@ void RecordContentSettingsHistogram(const std::string& name, } int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting) { @@ -3005,7 +3017,7 @@ diff --git a/components/content_settings/core/browser/website_settings_registry. diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn --- a/components/content_settings/core/common/BUILD.gn +++ b/components/content_settings/core/common/BUILD.gn -@@ -56,6 +56,13 @@ static_library("common") { +@@ -57,6 +57,13 @@ static_library("common") { "//net", "//url", ] @@ -3019,7 +3031,7 @@ diff --git a/components/content_settings/core/common/BUILD.gn b/components/conte } source_set("unit_tests") { -@@ -90,6 +97,7 @@ mojom("content_settings_types") { +@@ -91,6 +98,7 @@ mojom("content_settings_types") { sources = [ "content_settings_types.mojom" ] public_deps = [ "//mojo/public/mojom/base" ] @@ -3213,11 +3225,10 @@ diff --git a/components/content_settings/core/common/content_settings_mojom_trai diff --git a/components/content_settings/core/common/content_settings_types.mojom b/components/content_settings/core/common/content_settings_types.mojom --- a/components/content_settings/core/common/content_settings_types.mojom +++ b/components/content_settings/core/common/content_settings_types.mojom -@@ -483,5 +483,7 @@ enum ContentSettingsType { - // Content setting for whether the site is allowed to make local network - // requests. - LOCAL_NETWORK_ACCESS, -+ +@@ -491,5 +491,6 @@ enum ContentSettingsType { + // site. Used for recovering notification contents from the database if the + // user decides they would like to see all of these notifications. + SUSPICIOUS_NOTIFICATION_IDS, +#include "components/content_settings/core/common/bromite_content_settings.inc" }; // LINT.ThenChange(//components/content_settings/core/browser/content_settings_uma_util.cc:kHistogramValue) @@ -3308,7 +3319,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h --- a/components/content_settings/renderer/content_settings_agent_impl.h +++ b/components/content_settings/renderer/content_settings_agent_impl.h -@@ -77,6 +77,13 @@ class ContentSettingsAgentImpl +@@ -76,6 +76,13 @@ class ContentSettingsAgentImpl static mojom::ContentSettingsManager::StorageType ConvertToMojoStorageType( StorageType storage_type); @@ -3322,7 +3333,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.h // blink::WebContentSettingsClient: void AllowStorageAccess(StorageType storage_type, base::OnceCallback callback) override; -@@ -129,6 +136,8 @@ class ContentSettingsAgentImpl +@@ -128,6 +135,8 @@ class ContentSettingsAgentImpl // Resets the `content_blocked_` array. void ClearBlockedContentSettings(); @@ -3421,7 +3432,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. #include "components/content_settings/browser/ui/cookie_controls_controller.h" #include "components/content_settings/core/browser/content_settings_registry.h" #include "components/content_settings/core/browser/content_settings_uma_util.h" -@@ -1281,6 +1282,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1295,6 +1296,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, // applies to permissions listed in |kPermissionType|. bool PageInfo::ShouldShowPermission( const PageInfo::PermissionInfo& info) const { @@ -3436,7 +3447,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. // Note |ContentSettingsType::ADS| will show up regardless of its default // value when it has been activated on the current origin. if (info.type == ContentSettingsType::ADS) { -@@ -1397,7 +1406,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1411,7 +1420,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -3563,7 +3574,7 @@ diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/t diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -69,6 +69,22 @@ +@@ -70,6 +70,22 @@ namespace blink { diff --git a/build/patches/Disable-Android-Tab-Declutter.patch b/build/patches/Disable-Android-Tab-Declutter.patch index 6cd799de..afe6d527 100644 --- a/build/patches/Disable-Android-Tab-Declutter.patch +++ b/build/patches/Disable-Android-Tab-Declutter.patch @@ -5,32 +5,28 @@ Subject: Disable Android Tab Declutter Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../org/chromium/chrome/browser/flags/ChromeFeatureList.java | 4 ++-- - .../chrome_feature_list_cc/Disable-Android-Tab-Declutter.inc | 1 + - 2 files changed, 3 insertions(+), 2 deletions(-) + .../org/chromium/chrome/browser/tab/TabArchiveSettings.java | 3 ++- + .../chrome_feature_list_cc/Disable-Android-Tab-Declutter.inc | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-Android-Tab-Declutter.inc -diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java ---- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -1017,7 +1017,7 @@ public abstract class ChromeFeatureList { - public static final MutableFlagWithSafeDefault sAndroidNativePagesInNewTab = - newMutableFlagWithSafeDefault(ANDROID_NATIVE_PAGES_IN_NEW_TAB, false); - public static final MutableFlagWithSafeDefault sAndroidTabDeclutter = -- newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER, true); -+ newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER, false); - public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveAllButActiveTab = - newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE, false); - public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveDuplicateTabs = -@@ -1504,7 +1504,7 @@ public abstract class ChromeFeatureList { - sAndroidNativePagesInNewTab.newBooleanParam( - "android_native_pages_in_new_tab_downloads_enabled", true); - public static final MutableBooleanParamWithSafeDefault sAndroidTabDeclutterArchiveEnabled = -- sAndroidTabDeclutter.newBooleanParam("android_tab_declutter_archive_enabled", true); -+ sAndroidTabDeclutter.newBooleanParam("android_tab_declutter_archive_enabled", false); - public static final MutableIntParamWithSafeDefault sAndroidTabDeclutterArchiveTimeDeltaHours = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_archive_time_delta_hours", 21 * 24); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabArchiveSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabArchiveSettings.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabArchiveSettings.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabArchiveSettings.java +@@ -104,11 +104,12 @@ public class TabArchiveSettings { + // are created, and tabs disappearing from tests is very unexpected. For archive tests, + // this will need to be turned on manually. + return mPrefsManager.readBoolean( +- ChromePreferenceKeys.TAB_DECLUTTER_ARCHIVE_ENABLED, !BuildConfig.IS_FOR_TEST); ++ ChromePreferenceKeys.TAB_DECLUTTER_ARCHIVE_ENABLED, false); + } + + /** Sets whether archive is enabled in settings. */ + public void setArchiveEnabled(boolean enabled) { ++ enabled = false; + mPrefsManager.writeBoolean(ChromePreferenceKeys.TAB_DECLUTTER_ARCHIVE_ENABLED, enabled); + } + diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-Android-Tab-Declutter.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-Android-Tab-Declutter.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Disable-GSA-by-default.patch b/build/patches/Disable-GSA-by-default.patch index 559037a3..47abb091 100644 --- a/build/patches/Disable-GSA-by-default.patch +++ b/build/patches/Disable-GSA-by-default.patch @@ -4,16 +4,27 @@ Subject: Disable GSA by default License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- + .../src/org/chromium/base/PackageUtils.java | 1 + .../chrome/browser/IntentHandler.java | 6 ---- - .../provider/PageContentProviderImpl.java | 6 ---- .../chrome/browser/share/LensUtils.java | 14 ++------- .../chromium/chrome/browser/gsa/GSAUtils.java | 29 ++++--------------- .../GoogleBottomBarActionsHandler.java | 19 ++---------- - .../chrome/browser/pdf/PdfCoordinator.java | 4 +-- + .../chrome/browser/pdf/PdfCoordinator.java | 2 +- .../Disable-GSA-by-default.inc | 1 + - 7 files changed, 11 insertions(+), 68 deletions(-) + 7 files changed, 12 insertions(+), 60 deletions(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-GSA-by-default.inc +diff --git a/base/android/java/src/org/chromium/base/PackageUtils.java b/base/android/java/src/org/chromium/base/PackageUtils.java +--- a/base/android/java/src/org/chromium/base/PackageUtils.java ++++ b/base/android/java/src/org/chromium/base/PackageUtils.java +@@ -165,6 +165,7 @@ public class PackageUtils { + * @return Package name of assistant app, or null if unable to get. + */ + public static @Nullable String getDefaultAssistantPackageName(Context context) { ++ if ((true)) return null; + @Nullable String defaultAssistantSetting = + Settings.Secure.getString(context.getContentResolver(), DEFAULT_ASSISTANT_SETTING); + if (defaultAssistantSetting == null || defaultAssistantSetting.isBlank()) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java @@ -25,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManager; -@@ -276,9 +275,6 @@ public class IntentHandler { +@@ -279,9 +278,6 @@ public class IntentHandler { public static final String EXTRA_CCT_EARLY_NAV = "org.chromium.chrome.browser.cct_early_nav"; @@ -35,7 +46,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j private static Pair sPendingReferrer; private static int sReferrerId; private static String sPendingIncognitoUrl; -@@ -554,8 +550,6 @@ public class IntentHandler { +@@ -557,8 +553,6 @@ public class IntentHandler { return ExternalAppId.LINE; } else if (packageName.equals(PACKAGE_WHATSAPP)) { return ExternalAppId.WHATSAPP; @@ -44,29 +55,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j } else if (packageName.equals(ContextUtils.getApplicationContext().getPackageName())) { return ExternalAppId.CHROME; } else if (packageName.startsWith(WEBAPK_PACKAGE_PREFIX)) { -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/provider/PageContentProviderImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/provider/PageContentProviderImpl.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/provider/PageContentProviderImpl.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/provider/PageContentProviderImpl.java -@@ -57,8 +57,6 @@ public class PageContentProviderImpl extends SplitCompatContentProvider.Impl { - - private static final int INVALIDATE_URI_DELAY_MS = 60_000; - private static final int PAGE_EXTRACTION_TIMEOUT_MS = 30_000; -- private static final String[] AUTHORIZED_PACKAGE_NAMES = -- new String[] {GSAUtils.GSA_PACKAGE_NAME}; - - static final class PageContentInvocationState { - -@@ -354,10 +352,6 @@ public class PageContentProviderImpl extends SplitCompatContentProvider.Impl { - } - - private static void grantAccessToUri(Uri uri) { -- for (String packageName : AUTHORIZED_PACKAGE_NAMES) { -- ContextUtils.getApplicationContext() -- .grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); -- } - } - - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java @@ -232,7 +220,7 @@ diff --git a/chrome/browser/ui/android/google_bottom_bar/java/src/org/chromium/c diff --git a/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfCoordinator.java b/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfCoordinator.java --- a/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfCoordinator.java +++ b/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfCoordinator.java -@@ -253,7 +253,7 @@ public class PdfCoordinator { +@@ -265,7 +265,7 @@ public class PdfCoordinator { } @Nullable String requestAssistContent(String filename, boolean isWorkProfile) { @@ -241,15 +229,6 @@ diff --git a/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/ return null; } String structuredData; -@@ -271,8 +271,6 @@ public class PdfCoordinator { - } catch (JSONException e) { - return null; - } -- mActivity.grantUriPermission( -- GSAUtils.GSA_PACKAGE_NAME, mUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); - PdfUtils.recordIsWorkProfile(isWorkProfile); - return structuredData; - } diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-GSA-by-default.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-GSA-by-default.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index 8a9fdf93..b64ea951 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -66,7 +66,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -763,8 +763,6 @@ static_library("browser") { +@@ -775,8 +775,6 @@ static_library("browser") { "navigation_predictor/navigation_predictor_keyed_service_factory.h", "navigation_predictor/navigation_predictor_metrics_document_data.cc", "navigation_predictor/navigation_predictor_metrics_document_data.h", @@ -75,7 +75,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "navigation_predictor/preloading_model_keyed_service.cc", "navigation_predictor/preloading_model_keyed_service.h", "navigation_predictor/preloading_model_keyed_service_factory.cc", -@@ -2312,7 +2310,7 @@ static_library("browser") { +@@ -2343,7 +2341,7 @@ static_library("browser") { "//components/resources", "//components/safe_browsing/content/browser", "//components/safe_browsing/content/browser:safe_browsing_service", @@ -187,7 +187,7 @@ diff --git a/chrome/browser/optimization_guide/model_validator_keyed_service.cc diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc -@@ -519,7 +519,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( +@@ -516,7 +516,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( void OptimizationGuideKeyedService::RegisterOptimizationTypes( const std::vector& optimization_types) { @@ -272,7 +272,7 @@ diff --git a/chrome/browser/preloading/prefetch/search_prefetch/field_trial_sett diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc --- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc +++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc -@@ -84,6 +84,7 @@ SearchPrefetchURLLoader::RequestHandler +@@ -85,6 +85,7 @@ SearchPrefetchURLLoader::RequestHandler SearchPrefetchURLLoaderInterceptor::MaybeCreateLoaderForRequest( const network::ResourceRequest& tentative_resource_request, content::FrameTreeNodeId frame_tree_node_id) { @@ -283,7 +283,7 @@ diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -1155,7 +1155,6 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1177,7 +1177,6 @@ void ChromeBrowserMainExtraPartsProfiles:: base::FeatureList::IsEnabled( permissions::features::kPermissionOnDeviceGeolocationPredictions) || base::FeatureList::IsEnabled(permissions::features::kPermissionsAIv1)) { @@ -334,7 +334,7 @@ diff --git a/chrome/browser/safe_browsing/notification_content_detection/notific diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -442,7 +442,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -444,7 +444,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { } MixedContentSettingsTabHelper::CreateForWebContents(web_contents); NavigationMetricsRecorder::CreateForWebContents(web_contents); @@ -371,7 +371,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc } // namespace -@@ -155,10 +159,13 @@ void ReadAloudAppModel::PreprocessTextForSpeech( +@@ -153,10 +157,13 @@ void ReadAloudAppModel::PreprocessTextForSpeech( } } @@ -385,7 +385,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc void ReadAloudAppModel::CalculatePhrases( a11y::ReadAloudCurrentGranularity& granularity) { if (!features::IsReadAnythingReadAloudPhraseHighlightingEnabled()) { -@@ -215,19 +222,23 @@ void ReadAloudAppModel::CalculatePhrases( +@@ -213,19 +220,23 @@ void ReadAloudAppModel::CalculatePhrases( base::BindOnce(&ReadAloudAppModel::UpdatePhraseBoundaries, weak_ptr_factory_.GetWeakPtr(), phrase_tokens)); } @@ -411,7 +411,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc // Reset the phrase calculation flag, so that the next phrase calculation can // be scheduled, if needed. is_calculating_phrases = false; -@@ -289,6 +300,7 @@ void ReadAloudAppModel::UpdatePhraseBoundaries(std::vector tokens, +@@ -287,6 +298,7 @@ void ReadAloudAppModel::UpdatePhraseBoundaries(std::vector tokens, current_phrase_calculation_index_ = -1; LOG(WARNING) << "All phrases calculated!"; } @@ -433,7 +433,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.h #include "chrome/renderer/accessibility/read_anything/read_aloud_traversal_utils.h" #include "ui/accessibility/ax_node_position.h" -@@ -113,8 +116,10 @@ class ReadAloudAppModel { +@@ -116,8 +119,10 @@ class ReadAloudAppModel { bool is_docs, const std::set* current_nodes); @@ -444,7 +444,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.h // Increments the processed_granularity_index_, updating ReadAloud's state of // the current granularity to refer to the next granularity. The current -@@ -271,9 +276,11 @@ class ReadAloudAppModel { +@@ -274,9 +279,11 @@ class ReadAloudAppModel { // still needs to be read. bool NoValidTextRemainingInCurrentNode(bool is_pdf, bool is_docs) const; @@ -456,7 +456,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.h // Once the phrase segmentation has completed for a given sentence, update the // granularity with the phrase boundaries, and calculate phrases for the next -@@ -335,7 +342,7 @@ class ReadAloudAppModel { +@@ -344,7 +351,7 @@ class ReadAloudAppModel { // Whether a phrase calculation for a sentence is currently underway. (We // do not initiate a second calculation before the first has completed.) @@ -478,7 +478,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr #include "chrome/renderer/accessibility/read_anything/read_aloud_traversal_utils.h" #include "chrome/renderer/accessibility/read_anything/read_anything_app_model.h" #include "chrome/renderer/accessibility/read_anything/read_anything_node_utils.h" -@@ -1562,6 +1564,7 @@ void ReadAnythingAppController::OnConnected() { +@@ -1589,6 +1591,7 @@ void ReadAnythingAppController::OnConnected() { render_frame()->GetBrowserInterfaceBroker().GetInterface( std::move(page_handler_factory_receiver)); @@ -486,7 +486,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr // Get the dependency parser model used by phrase-based highlighting. if (read_aloud_model_.GetDependencyParserModel().IsAvailable()) { return; -@@ -1570,6 +1573,7 @@ void ReadAnythingAppController::OnConnected() { +@@ -1597,6 +1600,7 @@ void ReadAnythingAppController::OnConnected() { page_handler_->GetDependencyParserModel( base::BindOnce(&ReadAnythingAppController::UpdateDependencyParserModel, weak_ptr_factory_.GetWeakPtr())); @@ -494,7 +494,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr } void ReadAnythingAppController::OnCopy() const { -@@ -1787,8 +1791,10 @@ std::vector ReadAnythingAppController::GetCurrentText() { +@@ -1828,8 +1832,10 @@ std::vector ReadAnythingAppController::GetCurrentText() { } void ReadAnythingAppController::PreprocessTextForSpeech() { @@ -505,7 +505,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr } void ReadAnythingAppController::MovePositionToNextGranularity() { -@@ -1998,14 +2004,18 @@ bool ReadAnythingAppController::IsDocsLoadMoreButtonVisible() const { +@@ -2044,14 +2050,18 @@ bool ReadAnythingAppController::IsDocsLoadMoreButtonVisible() const { void ReadAnythingAppController::UpdateDependencyParserModel( base::File model_file) { @@ -537,7 +537,7 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr class ReadAnythingAppControllerTest; class ReadAnythingAppControllerScreen2xDataCollectionModeTest; -@@ -284,7 +286,9 @@ class ReadAnythingAppController +@@ -285,7 +287,9 @@ class ReadAnythingAppController // available. void UpdateDependencyParserModel(base::File model_file); @@ -587,7 +587,7 @@ diff --git a/chrome/utility/services.cc b/chrome/utility/services.cc diff --git a/components/BUILD.gn b/components/BUILD.gn --- a/components/BUILD.gn +++ b/components/BUILD.gn -@@ -597,7 +597,7 @@ test("components_unittests") { +@@ -600,7 +600,7 @@ test("components_unittests") { "//components/media_router/common/providers/cast/channel:unit_tests", "//components/page_info:unit_tests", "//components/permissions:unit_tests", @@ -628,7 +628,7 @@ diff --git a/components/autofill/core/browser/integrators/optimization_guide/aut diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc -@@ -50,7 +50,9 @@ +@@ -51,7 +51,9 @@ #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_match_type.h" #include "components/omnibox/browser/autocomplete_provider.h" @@ -638,7 +638,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/ #include "components/omnibox/browser/autocomplete_scoring_signals_annotator.h" #include "components/omnibox/browser/bookmark_provider.h" #include "components/omnibox/browser/bookmark_scoring_signals_annotator.h" -@@ -123,6 +125,7 @@ using ProviderType = AutocompleteProvider::Type; +@@ -125,6 +127,7 @@ using ProviderType = AutocompleteProvider::Type; constexpr bool is_android = !!BUILDFLAG(IS_ANDROID); @@ -646,7 +646,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/ void RecordMlScoreCoverage(size_t matches_with_non_null_scores, size_t total_scored_matches) { int percent_score_coverage = -@@ -231,6 +234,7 @@ void RecordTotalMatchesScored(size_t num_scored) { +@@ -233,6 +236,7 @@ void RecordTotalMatchesScored(size_t num_scored) { base::UmaHistogramCounts1000("Omnibox.URLScoringModelExecuted.Matches", num_scored); } @@ -701,10 +701,10 @@ diff --git a/components/optimization_guide/core/hints_manager.cc b/components/op std::optional request_context_metadata) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if ((true)) return; // no consent on bromite - - InsertionOrderedSet urls_to_fetch; - InsertionOrderedSet hosts_to_fetch; -@@ -1409,6 +1411,9 @@ OptimizationTypeDecision HintsManager::CanApplyOptimization( + if (!on_demand_hints_for_testing_.empty()) { + for (const GURL& url : urls) { + const auto& all_hints = on_demand_hints_for_testing_[url]; +@@ -1425,6 +1427,9 @@ OptimizationTypeDecision HintsManager::CanApplyOptimization( bool skip_cache, OptimizationMetadata* optimization_metadata) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -729,7 +729,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b } // namespace -@@ -453,8 +449,7 @@ size_t MaxURLKeyedHintCacheSize() { +@@ -460,8 +456,7 @@ size_t MaxURLKeyedHintCacheSize() { } bool ShouldPersistHintsToDisk() { @@ -739,7 +739,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b } RequestContextSet GetAllowedContextsForPersonalizedMetadata() { -@@ -903,5 +898,13 @@ bool IsPrivacyGuideAiSettingsEnabled() { +@@ -904,5 +899,13 @@ bool IsPrivacyGuideAiSettingsEnabled() { return base::FeatureList::IsEnabled(kPrivacyGuideAiSettings); } @@ -840,7 +840,7 @@ diff --git a/components/page_content_annotations/core/page_content_annotations_m diff --git a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn --- a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn +++ b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn -@@ -26,6 +26,13 @@ source_set("notification_content_detection") { +@@ -27,6 +27,13 @@ source_set("notification_content_detection") { ] } @@ -868,7 +868,7 @@ diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_ diff --git a/content/browser/service_worker/service_worker_main_resource_loader.cc b/content/browser/service_worker/service_worker_main_resource_loader.cc --- a/content/browser/service_worker/service_worker_main_resource_loader.cc +++ b/content/browser/service_worker/service_worker_main_resource_loader.cc -@@ -518,6 +518,7 @@ bool ServiceWorkerMainResourceLoader::MaybeStartAutoPreload( +@@ -516,6 +516,7 @@ bool ServiceWorkerMainResourceLoader::MaybeStartAutoPreload( bool ServiceWorkerMainResourceLoader::StartRaceNetworkRequest( scoped_refptr context, scoped_refptr version) { @@ -925,19 +925,19 @@ new file mode 100644 diff --git a/services/webnn/features.gni b/services/webnn/features.gni --- a/services/webnn/features.gni +++ b/services/webnn/features.gni -@@ -7,7 +7,7 @@ import("//services/on_device_model/on_device_model.gni") +@@ -9,7 +9,7 @@ assert(use_blink) declare_args() { - # TFLite is used as a fallback option on macOS and Windows. -- webnn_use_tflite = is_android || is_chromeos || is_linux || is_mac || is_win -+ webnn_use_tflite = false #is_android || is_chromeos || is_linux || is_mac || is_win + # TFLite is used as a fallback option on Apple and Windows. +- webnn_use_tflite = is_android || is_chromeos || is_linux || is_apple || is_win ++ webnn_use_tflite = false #is_android || is_chromeos || is_linux || is_apple || is_win # Enable the GPU delegate provided by the Optimization Guide library. webnn_use_chrome_ml_api = enable_ml_internal diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc --- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc -@@ -1757,6 +1757,7 @@ ALWAYS_INLINE bool HTMLDocumentParser::ShouldCheckTimeBudget( +@@ -1798,6 +1798,7 @@ ALWAYS_INLINE bool HTMLDocumentParser::ShouldCheckTimeBudget( } bool HTMLDocumentParser::ShouldSkipPreloadScan() { @@ -948,7 +948,7 @@ diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc diff --git a/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc b/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc --- a/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc +++ b/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc -@@ -644,6 +644,7 @@ void DocumentSpeculationRules::UpdateSpeculationCandidates() { +@@ -642,6 +642,7 @@ void DocumentSpeculationRules::UpdateSpeculationCandidates() { return; } @@ -959,7 +959,7 @@ diff --git a/third_party/blink/renderer/core/speculation_rules/document_speculat diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3564,7 +3564,7 @@ +@@ -3734,7 +3734,7 @@ // // It also has some feature params defined throughout the codebase. name: "Prerender2", diff --git a/build/patches/Disable-omission-of-URL-elements.patch b/build/patches/Disable-omission-of-URL-elements.patch index 24df908b..4d205549 100644 --- a/build/patches/Disable-omission-of-URL-elements.patch +++ b/build/patches/Disable-omission-of-URL-elements.patch @@ -9,11 +9,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../ShareSheetBottomSheetContent.java | 4 +- .../EphemeralTabSheetContent.java | 4 +- .../chrome_location_bar_model_delegate.cc | 2 +- - .../ui/views/page_info/page_info_main_view.cc | 68 ++++++++++--------- + .../ui/views/page_info/page_info_main_view.cc | 69 ++++++++++--------- .../components/bookmarks/BookmarkItem.java | 1 + .../omnibox/browser/titled_url_match_utils.cc | 2 +- .../page_info/PageInfoController.java | 3 +- - 7 files changed, 42 insertions(+), 42 deletions(-) + 7 files changed, 42 insertions(+), 43 deletions(-) diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java @@ -56,7 +56,7 @@ diff --git a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc b/c diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc --- a/chrome/browser/ui/views/page_info/page_info_main_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc -@@ -603,38 +603,42 @@ void PageInfoMainView::ChildPreferredSizeChanged(views::View* child) { +@@ -629,39 +629,42 @@ void PageInfoMainView::ChildPreferredSizeChanged(views::View* child) { } std::unique_ptr PageInfoMainView::CreateBubbleHeaderView() { @@ -82,6 +82,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b - views::BubbleFrameView::CreateCloseButton( - base::BindRepeating(&PageInfoNavigationHandler::CloseBubble, - base::Unretained(navigation_handler_)))) +- .SetID(PageInfoViewFactory::VIEW_ID_PAGE_INFO_CLOSE_BUTTON) - .SetVisible(true) - .SetProperty(views::kCrossAxisAlignmentKey, - views::LayoutAlignment::kStart) diff --git a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch index db633442..533e391b 100644 --- a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch +++ b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch @@ -33,18 +33,18 @@ diff --git a/chrome/version.gni b/chrome/version.gni diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc -@@ -323,9 +323,11 @@ const base::FeatureParam kADPFBoostTimeout{ - - // If enabled, Chrome includes the Renderer Main thread(s) into the - // ADPF(Android Dynamic Performance Framework) hint session. +@@ -329,9 +329,11 @@ BASE_FEATURE(kEnableInteractiveOnlyADPFRenderer, + // If enabled, Chrome includes the Compositor GPU Thread into the + // ADPF(Android Dynamic Performance Framework) hint session, instead + // of the GPU Main Thread. +// see https://source.chromium.org/chromium/chromium/src/+/e7507d15614ac7f499fb89086b3a09772fa8deb4 - BASE_FEATURE(kEnableADPFRendererMain, - "EnableADPFRendererMain", + BASE_FEATURE(kEnableADPFGpuCompositorThread, + "EnableADPFGpuCompositorThread", base::FEATURE_ENABLED_BY_DEFAULT); +SET_CROMITE_FEATURE_ENABLED(kEnableADPFRendererMain); - // If enabled, Chrome's ADPF(Android Dynamic Performance Framework) hint - // session includes Renderer threads only if: + // If enabled, Chrome puts Renderer Main threads into a separate + // ADPF(Android Dynamic Performance Framework) hint session, and does not diff --git a/components/viz/service/performance_hint/hint_session.cc b/components/viz/service/performance_hint/hint_session.cc --- a/components/viz/service/performance_hint/hint_session.cc +++ b/components/viz/service/performance_hint/hint_session.cc diff --git a/build/patches/Enable-ProcessBoundStringEncryption-by-default.patch b/build/patches/Enable-ProcessBoundStringEncryption-by-default.patch index 51182811..cef4146b 100644 --- a/build/patches/Enable-ProcessBoundStringEncryption-by-default.patch +++ b/build/patches/Enable-ProcessBoundStringEncryption-by-default.patch @@ -8,17 +8,16 @@ https://issuetracker.google.com/issues/372873695 License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - crypto/features.cc | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + crypto/features.cc | 3 +++ + 1 file changed, 3 insertions(+) diff --git a/crypto/features.cc b/crypto/features.cc --- a/crypto/features.cc +++ b/crypto/features.cc -@@ -11,5 +11,7 @@ namespace crypto::features { - BASE_FEATURE(kProcessBoundStringEncryption, - "ProcessBoundStringEncryption", +@@ -16,4 +16,7 @@ BASE_FEATURE(kIsHardwareBackedFixEnabled, + "IsHardwareBackedFixEnabled", base::FEATURE_DISABLED_BY_DEFAULT); -- + +#if BUILDFLAG(IS_WIN) +SET_CROMITE_FEATURE_ENABLED(kProcessBoundStringEncryption); +#endif diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index ab8e3911..36d9f3bc 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -54,7 +54,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -28,7 +28,9 @@ import androidx.preference.PreferenceCategory; +@@ -27,7 +27,9 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; import org.chromium.base.BuildInfo; @@ -63,7 +63,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage +import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; - import org.chromium.chrome.R; + import org.chromium.build.annotations.Nullable; @@ -60,6 +62,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; @@ -115,7 +115,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage if (shouldShowAutoSigninOption()) { createAutoSignInCheckbox(); } -@@ -583,6 +599,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -588,6 +604,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE)); } @@ -190,7 +190,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -474,8 +474,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -459,8 +459,7 @@ public class MainSettings extends ChromeBaseSettingsFragment private void updateAutofillPreferences() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O @@ -203,7 +203,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java -@@ -103,6 +103,13 @@ import java.lang.annotation.RetentionPolicy; +@@ -105,6 +105,13 @@ import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.util.Objects; @@ -217,7 +217,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav /** * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}. This * class is not intended to be extended. -@@ -1081,6 +1088,11 @@ class TabImpl implements Tab { +@@ -1084,6 +1091,11 @@ class TabImpl implements Tab { for (TabObserver observer : mObservers) observer.onDestroyed(this); mObservers.clear(); @@ -229,7 +229,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav mUserDataHost.destroy(); mTabViewManager.destroy(); hideNativePage(false, null); -@@ -1385,6 +1397,7 @@ class TabImpl implements Tab { +@@ -1389,6 +1401,7 @@ class TabImpl implements Tab { * @return iff the AutofillProvider should provide a ViewStructure when prompted. */ boolean providesAutofillStructure() { @@ -237,7 +237,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav if (!ChromeFeatureList.isEnabled( AutofillFeatures.AUTOFILL_VIRTUAL_VIEW_STRUCTURE_ANDROID)) { return false; -@@ -2169,16 +2182,21 @@ class TabImpl implements Tab { +@@ -2173,16 +2186,21 @@ class TabImpl implements Tab { * @return true if the the provider is available for the given WebContents. */ private boolean prepareAutofillProvider(WebContents newWebContents) { @@ -265,7 +265,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav mAutofillProvider = new AutofillProvider( getContext(), -@@ -2187,7 +2205,16 @@ class TabImpl implements Tab { +@@ -2191,7 +2209,16 @@ class TabImpl implements Tab { getContext().getString(R.string.app_name)); TabImplJni.get().initializeAutofillIfNecessary(mNativeTabAndroid); } @@ -286,7 +286,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3789,28 +3789,6 @@ const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { +@@ -3895,28 +3895,6 @@ const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { std::size(kLinkPreviewTriggerTypeLongPress), nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) @@ -312,10 +312,10 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc - -#endif // BUILDFLAG(IS_ANDROID) - - const FeatureEntry::FeatureParam - kPrerender2WarmUpCompositorTriggerPointDidCommitLoad[] = { - {"trigger_point", "did_commit_load"}}; -@@ -6345,15 +6323,6 @@ const FeatureEntry kFeatureEntries[] = { + const FeatureEntry::FeatureParam kGroupSuggestionEnableRecentlyOpenedOnly[] = { + {"group_suggestion_enable_recently_opened", "true"}, + {"group_suggestion_enable_switch_between", "false"}, +@@ -6419,15 +6397,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_ANDROID) @@ -347,7 +347,7 @@ diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_ diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/android/BUILD.gn --- a/chrome/browser/autofill/android/BUILD.gn +++ b/chrome/browser/autofill/android/BUILD.gn -@@ -149,7 +149,7 @@ android_library("bottom_sheet_utils_java") { +@@ -152,7 +152,7 @@ android_library("bottom_sheet_utils_java") { generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/autofill/AddressNormalizerFactory.java", @@ -359,7 +359,7 @@ diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java --- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java +++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java -@@ -79,8 +79,8 @@ public class AutofillClientProviderUtils { +@@ -83,8 +83,8 @@ public class AutofillClientProviderUtils { * @return {@link AndroidAutofillAvailabilityStatus.AVAILABLE} if Android Autofill can be used * or a reason why it can't. */ @@ -372,7 +372,7 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -869,12 +869,6 @@ const char kAutofillVcnEnrollStrikeExpiryTimeDescription[] = +@@ -921,12 +921,6 @@ const char kAutofillVcnEnrollStrikeExpiryTimeDescription[] = "When enabled, changes the amount of time required for VCN enrollment " "prompt strikes to expire."; @@ -388,7 +388,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -510,9 +510,6 @@ extern const char kAutofillVcnEnrollRequestTimeoutDescription[]; +@@ -546,9 +546,6 @@ extern const char kAutofillVcnEnrollRequestTimeoutDescription[]; extern const char kAutofillVcnEnrollStrikeExpiryTimeName[]; extern const char kAutofillVcnEnrollStrikeExpiryTimeDescription[]; @@ -417,15 +417,16 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/browser/ui/autofill/autofill_client_provider.cc --- a/chrome/browser/ui/autofill/autofill_client_provider.cc +++ b/chrome/browser/ui/autofill/autofill_client_provider.cc -@@ -13,84 +13,18 @@ - - #if BUILDFLAG(IS_ANDROID) +@@ -15,8 +15,6 @@ #include "base/android/jni_android.h" + #include "base/android/jni_string.h" + #include "base/task/thread_pool.h" -#include "chrome/browser/autofill/android/android_autofill_availability_status.h" -#include "chrome/browser/autofill/android/jni_headers/AutofillClientProviderUtils_jni.h" + #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "components/android_autofill/browser/android_autofill_client.h" #endif // BUILDFLAG(IS_ANDROID) - +@@ -24,67 +22,6 @@ namespace autofill { namespace { @@ -490,12 +491,18 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro -#endif // BUILDFLAG(IS_ANDROID) -} - + #if BUILDFLAG(IS_ANDROID) + std::string GetTrialGroupForPackage() { + JNIEnv* env = base::android::AttachCurrentThread(); +@@ -95,14 +32,11 @@ std::string GetTrialGroupForPackage() { + } // namespace -AutofillClientProvider::AutofillClientProvider(PrefService* prefs) - : uses_platform_autofill_(UsesVirtualViewStructureForAutofill(*prefs)) { +AutofillClientProvider::AutofillClientProvider(PrefService* prefs) { #if BUILDFLAG(IS_ANDROID) + DelayRegisteringFieldTrialForA11yDeprecation(); - RecordWhetherAndroidPrefResets(*prefs, uses_platform_autofill_); - // Ensure the pref is reset if platform autofill is restricted. prefs->SetBoolean(prefs::kAutofillUsingVirtualViewStructure, @@ -504,7 +511,7 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro if (base::FeatureList::IsEnabled( autofill::features::kAutofillVirtualViewStructureAndroid) && base::FeatureList::IsEnabled( -@@ -114,15 +48,7 @@ AutofillClientProvider::~AutofillClientProvider() = default; +@@ -126,15 +60,7 @@ AutofillClientProvider::~AutofillClientProvider() = default; void AutofillClientProvider::CreateClientForWebContents( content::WebContents* web_contents) { @@ -519,11 +526,11 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro - } } - } // namespace autofill + #if BUILDFLAG(IS_ANDROID) diff --git a/chrome/browser/ui/autofill/autofill_client_provider.h b/chrome/browser/ui/autofill/autofill_client_provider.h --- a/chrome/browser/ui/autofill/autofill_client_provider.h +++ b/chrome/browser/ui/autofill/autofill_client_provider.h -@@ -33,13 +33,7 @@ class AutofillClientProvider : public KeyedService { +@@ -37,11 +37,6 @@ class AutofillClientProvider : public KeyedService { // given `web_contents`. void CreateClientForWebContents(content::WebContents* web_contents); @@ -533,14 +540,20 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.h b/chrome/brow - bool uses_platform_autofill() const { return uses_platform_autofill_; } - private: + #if BUILDFLAG(IS_ANDROID) + // Posts a low-priority task to register the client in a synthetic field trial +@@ -51,7 +46,6 @@ class AutofillClientProvider : public KeyedService { + void RegisterSyntheticFieldTrialForPackage(const std::string& package); + #endif // BUILDFLAG(IS_ANDROID) + - const bool uses_platform_autofill_; + base::WeakPtrFactory weak_ptr_factory_{this}; }; - } // namespace autofill diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -384,9 +384,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -386,9 +386,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents); ChainedBackNavigationTracker::CreateForWebContents(web_contents); chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents); @@ -597,15 +610,15 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component if (event == EVENT_INPUT_SHOWN) manager.notifyInputUiChange(); } } -@@ -102,6 +103,7 @@ public class AutofillManagerWrapper { - // Uses Exception to catch various cases. (refer to crbug.com/1186406) - Log.e(TAG, "getAutofillServiceComponentName", e); - } +@@ -124,6 +125,7 @@ public class AutofillManagerWrapper { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + ComponentName componentName = getAutofillServiceComponentName(autofillManager); + if (isLoggable()) log("componentName=" + componentName); if (componentName != null) { mPackageName = componentName.getPackageName(); mIsAwGCurrentAutofillService = -@@ -274,7 +276,7 @@ public class AutofillManagerWrapper { +@@ -345,7 +347,7 @@ public class AutofillManagerWrapper { /** Always check isLoggable() before call this method. */ public static void log(String log) { // Log.i() instead of Log.d() is used here because log.d() is stripped out in release build. @@ -614,18 +627,17 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component } public static boolean isLoggable() { -@@ -287,6 +289,7 @@ public class AutofillManagerWrapper { +@@ -358,5 +360,6 @@ public class AutofillManagerWrapper { // NOTE: See the comment on TAG above for why this is still AwAutofillManager. // Check the system setting directly. sIsLoggable = android.util.Log.isLoggable(TAG, Log.DEBUG); + // sIsLoggable = true; // to force enable the log } - } diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java -@@ -197,13 +197,19 @@ public class AutofillProvider { +@@ -220,6 +220,10 @@ public class AutofillProvider { /** @return whether query autofill suggestion. */ public boolean shouldQueryAutofillSuggestion() { @@ -635,17 +647,24 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component + " !mAutofillManager.isAutofillInputUIShowing()=" + (!mAutofillManager.isAutofillInputUiShowing())); return mRequest != null && mRequest.getFocusField() != null - && !mAutofillManager.isAutofillInputUiShowing(); + && !getAutofillManagerWrapper().isAutofillInputUiShowing(); +@@ -228,6 +232,7 @@ public class AutofillProvider { + public boolean shouldOfferPasskeyEntry() { + if (!AndroidAutofillFeatures.ANDROID_AUTOFILL_VIRTUAL_VIEW_STRUCTURE_PASSKEY_LONG_PRESS + .isEnabled()) { ++ AutofillManagerWrapper.log("calling requestAutofill"); + return false; + } + return AutofillProviderJni.get().hasPasskeyRequest(mNativeAutofillProvider); +@@ -240,6 +245,7 @@ public class AutofillProvider { } public void queryAutofillSuggestion() { + AutofillManagerWrapper.log("queryAutofillSuggestion start"); if (shouldQueryAutofillSuggestion()) { -+ AutofillManagerWrapper.log("calling requestAutofill"); FocusField focusField = mRequest.getFocusField(); - mAutofillManager.requestAutofill( - mContainerView, -@@ -263,6 +269,7 @@ public class AutofillProvider { + getAutofillManagerWrapper() +@@ -302,6 +308,7 @@ public class AutofillProvider { float width, float height, boolean hasServerPrediction) { @@ -729,7 +748,7 @@ new file mode 100644 diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc --- a/components/autofill/content/browser/content_autofill_driver.cc +++ b/components/autofill/content/browser/content_autofill_driver.cc -@@ -252,6 +252,13 @@ void RouteToManager(ContentAutofillDriver& source, +@@ -270,6 +270,13 @@ void RouteToManager(ContentAutofillDriver& source, AutofillManager& manager = target.GetAutofillManager(); (manager.* manager_fun)(WithNewVersion(std::forward(args))...); @@ -743,7 +762,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }, source, Lift(source, std::forward(args))...); } -@@ -638,6 +645,10 @@ ContentAutofillDriver::GetAutofillAgent() { +@@ -656,6 +663,10 @@ ContentAutofillDriver::GetAutofillAgent() { return autofill_agent_; } @@ -770,7 +789,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com content::RenderFrameHost* render_frame_host() { return &*render_frame_host_; } const content::RenderFrameHost* render_frame_host() const { return &*render_frame_host_; -@@ -305,6 +311,10 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -306,6 +312,10 @@ class ContentAutofillDriver : public AutofillDriver, // The factory that created this driver. Outlives `this`. const raw_ref owner_; @@ -813,7 +832,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver_factory diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc -@@ -1529,14 +1529,19 @@ void AutofillAgent::ShowSuggestions( +@@ -1543,14 +1543,19 @@ void AutofillAgent::ShowSuggestions( password_generation_agent_->ShowPasswordGenerationSuggestions( input_element, form_cache)) { is_popup_possibly_visible_ = true; @@ -836,7 +855,7 @@ diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc -@@ -853,7 +853,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( +@@ -860,7 +860,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( void PasswordAutofillAgent::TrackAutofilledElement( const WebFormControlElement& element) { @@ -877,7 +896,7 @@ diff --git a/components/autofill/core/browser/foundations/autofill_driver_factor diff --git a/components/autofill/core/browser/foundations/autofill_manager.h b/components/autofill/core/browser/foundations/autofill_manager.h --- a/components/autofill/core/browser/foundations/autofill_manager.h +++ b/components/autofill/core/browser/foundations/autofill_manager.h -@@ -222,6 +222,8 @@ class AutofillManager +@@ -223,6 +223,8 @@ class AutofillManager LifecycleState new_state, base::PassKey pass_key); @@ -889,7 +908,7 @@ diff --git a/components/autofill/core/browser/foundations/autofill_manager.h b/c diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc -@@ -712,6 +712,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { +@@ -724,6 +724,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } @@ -901,7 +920,7 @@ diff --git a/components/autofill/core/browser/foundations/browser_autofill_manag diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.h b/components/autofill/core/browser/foundations/browser_autofill_manager.h --- a/components/autofill/core/browser/foundations/browser_autofill_manager.h +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.h -@@ -119,6 +119,8 @@ class BrowserAutofillManager : public AutofillManager { +@@ -120,6 +120,8 @@ class BrowserAutofillManager : public AutofillManager { ~BrowserAutofillManager() override; @@ -913,7 +932,7 @@ diff --git a/components/autofill/core/browser/foundations/browser_autofill_manag diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc -@@ -850,7 +850,7 @@ BASE_FEATURE(kAutofillThirdPartyModeContentProvider, +@@ -811,7 +811,7 @@ BASE_FEATURE(kAutofillThirdPartyModeContentProvider, BASE_FEATURE(kAutofillVirtualViewStructureAndroid, "AutofillVirtualViewStructureAndroid", base::FEATURE_ENABLED_BY_DEFAULT); @@ -925,7 +944,7 @@ diff --git a/components/autofill/core/common/autofill_features.cc b/components/a diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h -@@ -308,28 +308,6 @@ COMPONENT_EXPORT(AUTOFILL) +@@ -300,28 +300,6 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillThirdPartyModeContentProvider); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillVirtualViewStructureAndroid); @@ -966,7 +985,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto registry->RegisterIntegerPref(kAutocompleteLastVersionRetentionPolicy, 0); registry->RegisterStringPref(kAutofillUploadEncodingSeed, ""); registry->RegisterDictionaryPref(kAutofillVoteUploadEvents); -@@ -87,7 +89,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -89,7 +91,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { false); #if BUILDFLAG(IS_ANDROID) @@ -978,7 +997,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h --- a/components/autofill/core/common/autofill_prefs.h +++ b/components/autofill/core/common/autofill_prefs.h -@@ -104,6 +104,11 @@ inline constexpr char kAutofillUploadEventsLastResetTimestamp[] = +@@ -110,6 +110,11 @@ inline constexpr char kAutofillUploadEventsLastResetTimestamp[] = // retention policy was run. inline constexpr char kAutocompleteLastVersionRetentionPolicy[] = "autocomplete.retention_policy_last_version"; diff --git a/build/patches/Enable-network-isolation-features.patch b/build/patches/Enable-network-isolation-features.patch index c883e8c8..71626bda 100644 --- a/build/patches/Enable-network-isolation-features.patch +++ b/build/patches/Enable-network-isolation-features.patch @@ -53,7 +53,7 @@ new file mode 100644 diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc -@@ -655,7 +655,7 @@ bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) { +@@ -652,7 +652,7 @@ bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) { // static // Generate a key that can be used inside the cache. @@ -62,7 +62,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc const GURL& url, int load_flags, const NetworkIsolationKey& network_isolation_key, -@@ -692,8 +692,8 @@ std::string HttpCache::GenerateCacheKey( +@@ -690,8 +690,8 @@ std::string HttpCache::GenerateCacheKey( const bool is_initiator_cross_site = !net::SchemefulSite::IsSameSite(*initiator, url::Origin::Create(url)); if (is_initiator_cross_site) { @@ -73,7 +73,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc } } isolation_key = base::StrCat( -@@ -708,9 +708,11 @@ std::string HttpCache::GenerateCacheKey( +@@ -706,9 +706,11 @@ std::string HttpCache::GenerateCacheKey( // Strip out the reference, username, and password sections of the URL and // concatenate with the credential_key, the post_key, and the network // isolation key if we are splitting the cache. @@ -86,7 +86,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc } // static -@@ -733,10 +735,12 @@ HttpCache::GenerateCacheKeyForRequestWithAlternateURL( +@@ -731,11 +733,13 @@ HttpCache::GenerateCacheKeyForRequestWithAlternateURL( const int64_t upload_data_identifier = request->upload_data_stream ? request->upload_data_stream->identifier() : int64_t(0); @@ -94,7 +94,8 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc + auto key = GenerateCacheKey2( url, request->load_flags, request->network_isolation_key, upload_data_identifier, request->is_subframe_document_resource, - request->is_main_frame_navigation, request->initiator); + request->is_main_frame_navigation, request->is_shared_resource, + request->initiator); + if (key.empty()) return std::nullopt; + return key; } diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index 0f75a16c..e9892829 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -15,7 +15,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../chrome_browser_interface_binders.cc | 3 + .../chrome_browser_interface_binders_webui.cc | 21 ++ chrome/browser/extensions/extension_util.h | 2 +- - chrome/browser/resources/BUILD.gn | 6 + + chrome/browser/resources/BUILD.gn | 7 + chrome/browser/resources/settings/BUILD.gn | 2 +- .../resources/settings/page_visibility.ts | 36 ++- .../search_engine_edit_dialog.html | 6 + @@ -31,7 +31,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/search_engines/android/BUILD.gn | 1 + .../java/res/layout/search_engine_layout.xml | 25 ++ .../settings/SearchEngineSettings.java | 21 ++ - chrome/browser/ui/BUILD.gn | 25 ++ + chrome/browser/ui/BUILD.gn | 25 +- .../edit_search_engine_controller.cc | 8 +- .../edit_search_engine_controller.h | 6 +- .../keyword_editor_controller.cc | 13 +- @@ -78,7 +78,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/images/BUILD.gn | 2 +- ui/webui/resources/js/BUILD.gn | 2 +- ui/webui/resources/js/load_time_data.ts | 17 +- - 71 files changed, 1161 insertions(+), 70 deletions(-) + 71 files changed, 1161 insertions(+), 71 deletions(-) create mode 100644 chrome/app/settings_strings_android.grdp create mode 100644 chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml create mode 100644 chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc @@ -141,7 +141,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp -@@ -2397,6 +2397,9 @@ +@@ -2143,6 +2143,9 @@ URL with %s in place of query @@ -419,7 +419,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3575,6 +3575,9 @@ static_library("browser") { +@@ -3631,6 +3631,9 @@ static_library("browser") { "//components/user_scripts/android", ] } @@ -432,7 +432,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc -@@ -88,6 +88,9 @@ +@@ -87,6 +87,9 @@ #endif #if BUILDFLAG(IS_ANDROID) @@ -458,7 +458,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h" -@@ -477,6 +483,15 @@ void PopulateChromeWebUIFrameBinders( +@@ -485,6 +491,15 @@ void PopulateChromeWebUIFrameBinders( } #endif @@ -474,7 +474,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b #if !BUILDFLAG(IS_ANDROID) RegisterWebUIControllerInterfaceBinder< search_engine_choice::mojom::PageHandlerFactory, SearchEngineChoiceUI>( -@@ -611,6 +626,9 @@ void PopulateChromeWebUIFrameBinders( +@@ -627,6 +642,9 @@ void PopulateChromeWebUIFrameBinders( RegisterWebUIControllerInterfaceBinder(map); @@ -484,7 +484,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b RegisterWebUIControllerInterfaceBinder< customize_color_scheme_mode::mojom:: CustomizeColorSchemeModeHandlerFactory, -@@ -631,6 +649,9 @@ void PopulateChromeWebUIFrameBinders( +@@ -647,6 +665,9 @@ void PopulateChromeWebUIFrameBinders( CertificateManagerUI>(map); #endif // BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI) @@ -497,21 +497,21 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b diff --git a/chrome/browser/extensions/extension_util.h b/chrome/browser/extensions/extension_util.h --- a/chrome/browser/extensions/extension_util.h +++ b/chrome/browser/extensions/extension_util.h -@@ -13,7 +13,7 @@ +@@ -12,7 +12,7 @@ #include "extensions/buildflags/buildflags.h" #include "extensions/common/constants.h" -static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); +// static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); - namespace content { - class BrowserContext; + namespace base { + class CommandLine; diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn -@@ -21,6 +21,12 @@ group("resources") { - "segmentation_internals:resources", - ] +@@ -25,6 +25,13 @@ group("resources") { + public_deps += [ ":component_extension_resources" ] + } + if (is_android) { + public_deps += [ @@ -519,6 +519,7 @@ diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD. + "settings_shared:resources", + ] + } ++ if (!is_android) { public_deps += [ ":app_icon_resources", @@ -912,22 +913,22 @@ diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -702,6 +702,12 @@ static_library("ui") { +@@ -679,7 +679,11 @@ static_library("ui") { + "//ui/webui", "//v8:v8_version", ] - +- + if (is_android) { + deps += [ + "//ui/webui/resources/cr_components/help_bubble:mojo_bindings", + ] + } -+ + # TODO(crbug.com/413572035): Move into build files of the actual + # modules depending on this. eg: autofill, user_education. if (is_chrome_branded) { - deps += [ "//components/plus_addresses/resources:vector_icons" ] - } -@@ -1001,6 +1007,25 @@ static_library("ui") { - "android/toolbar/extension_actions_bridge_factory.h", - ] +@@ -959,6 +963,25 @@ static_library("ui") { + + deps += [ "//extensions/browser:extension_action_enums" ] } + sources += [ + "webui/settings/settings_ui_android.cc", @@ -985,7 +986,7 @@ diff --git a/chrome/browser/ui/search_engines/edit_search_engine_controller.cc b diff --git a/chrome/browser/ui/search_engines/edit_search_engine_controller.h b/chrome/browser/ui/search_engines/edit_search_engine_controller.h --- a/chrome/browser/ui/search_engines/edit_search_engine_controller.h +++ b/chrome/browser/ui/search_engines/edit_search_engine_controller.h -@@ -23,7 +23,8 @@ class EditSearchEngineControllerDelegate { +@@ -22,7 +22,8 @@ class EditSearchEngineControllerDelegate { virtual void OnEditedKeyword(TemplateURL* template_url, const std::u16string& title, const std::u16string& keyword, @@ -995,7 +996,7 @@ diff --git a/chrome/browser/ui/search_engines/edit_search_engine_controller.h b/ protected: virtual ~EditSearchEngineControllerDelegate() = default; -@@ -62,7 +63,8 @@ class EditSearchEngineController { +@@ -61,7 +62,8 @@ class EditSearchEngineController { // Completes the add or edit of a search engine. void AcceptAddOrEdit(const std::u16string& title_input, const std::u16string& keyword_input, @@ -1075,7 +1076,7 @@ diff --git a/chrome/browser/ui/search_engines/keyword_editor_controller.h b/chro diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chrome/browser/ui/search_engines/template_url_table_model.cc --- a/chrome/browser/ui/search_engines/template_url_table_model.cc +++ b/chrome/browser/ui/search_engines/template_url_table_model.cc -@@ -207,7 +207,8 @@ void TemplateURLTableModel::Remove(size_t index) { +@@ -201,7 +201,8 @@ void TemplateURLTableModel::Remove(size_t index) { void TemplateURLTableModel::Add(size_t index, const std::u16string& short_name, const std::u16string& keyword, @@ -1085,7 +1086,7 @@ diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chro DCHECK(index <= RowCount()); DCHECK(!url.empty()); TemplateURLData data; -@@ -215,13 +216,15 @@ void TemplateURLTableModel::Add(size_t index, +@@ -209,13 +210,15 @@ void TemplateURLTableModel::Add(size_t index, data.SetKeyword(keyword); data.SetURL(url); data.is_active = TemplateURLData::ActiveStatus::kTrue; @@ -1102,7 +1103,7 @@ diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chro DCHECK(index <= RowCount()); DCHECK(!url.empty()); TemplateURL* template_url = GetTemplateURL(index); -@@ -230,7 +233,7 @@ void TemplateURLTableModel::ModifyTemplateURL(size_t index, +@@ -224,7 +227,7 @@ void TemplateURLTableModel::ModifyTemplateURL(size_t index, DCHECK(template_url_service_->GetDefaultSearchProvider() != template_url || template_url->SupportsReplacement( template_url_service_->search_terms_data())); @@ -1114,7 +1115,7 @@ diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chro diff --git a/chrome/browser/ui/search_engines/template_url_table_model.h b/chrome/browser/ui/search_engines/template_url_table_model.h --- a/chrome/browser/ui/search_engines/template_url_table_model.h +++ b/chrome/browser/ui/search_engines/template_url_table_model.h -@@ -61,13 +61,15 @@ class TemplateURLTableModel : public ui::TableModel, +@@ -58,13 +58,15 @@ class TemplateURLTableModel : public ui::TableModel, void Add(size_t index, const std::u16string& short_name, const std::u16string& keyword, @@ -1135,7 +1136,7 @@ diff --git a/chrome/browser/ui/search_engines/template_url_table_model.h b/chrom diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_web_ui_configs.cc --- a/chrome/browser/ui/webui/chrome_web_ui_configs.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_configs.cc -@@ -61,6 +61,11 @@ +@@ -63,6 +63,11 @@ #include "components/user_scripts/browser/ui/user_scripts_ui.h" #endif @@ -1147,7 +1148,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #if BUILDFLAG(ENABLE_NACL) #include "chrome/browser/ui/webui/nacl_ui.h" #endif -@@ -420,4 +425,7 @@ void RegisterChromeWebUIConfigs() { +@@ -436,4 +441,7 @@ void RegisterChromeWebUIConfigs() { #if BUILDFLAG(IS_ANDROID) map.AddWebUIConfig(std::make_unique()); #endif @@ -1217,7 +1218,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui diff --git a/chrome/browser/ui/webui/favicon_source.h b/chrome/browser/ui/webui/favicon_source.h --- a/chrome/browser/ui/webui/favicon_source.h +++ b/chrome/browser/ui/webui/favicon_source.h -@@ -65,9 +65,11 @@ class FaviconSource : public content::URLDataSource { +@@ -64,9 +64,11 @@ class FaviconSource : public content::URLDataSource { int render_process_id) override; protected: @@ -1232,7 +1233,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.h b/chrome/browser/ui/webui/ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome/browser/ui/webui/settings/search_engines_handler.cc --- a/chrome/browser/ui/webui/settings/search_engines_handler.cc +++ b/chrome/browser/ui/webui/settings/search_engines_handler.cc -@@ -35,10 +35,12 @@ +@@ -34,10 +34,12 @@ #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_service.h" #include "content/public/browser/web_ui.h" @@ -1245,7 +1246,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome #if BUILDFLAG(IS_CHROMEOS) #include "ash/public/cpp/new_window_delegate.h" -@@ -50,6 +52,7 @@ namespace { +@@ -49,6 +51,7 @@ namespace { const char kSearchEngineField[] = "searchEngine"; const char kKeywordField[] = "keyword"; const char kQueryUrlField[] = "queryUrl"; @@ -1254,9 +1255,9 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome // Dummy number used for indicating that a new search engine is added. const int kNewSearchEngineIndex = -1; @@ -252,9 +255,10 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( - table_model->GetText(index, IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_COLUMN)); - dict.Set("keyword", table_model->GetKeywordToDisplay(index)); + dict.Set("keyword", table_model->GetText( + index, IDS_SEARCH_ENGINES_EDITOR_KEYWORD_COLUMN)); - Profile* profile = Profile::FromWebUI(web_ui()); dict.Set("url", template_url->url_ref().DisplayURL(UIThreadSearchTermsData())); @@ -1265,8 +1266,8 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome dict.Set("urlLocked", ((template_url->prepopulate_id() > 0) || (template_url->starter_pack_id() > 0))); GURL icon_url = template_url->favicon_url(); -@@ -262,6 +266,8 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( - dict.Set("iconURL", icon_url.spec()); +@@ -268,6 +272,8 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( + #endif } +#if !BUILDFLAG(IS_ANDROID) @@ -1274,15 +1275,15 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome // The icons that are used for search engines in the EEA region are bundled // with Chrome. We use the favicon service for countries outside the EEA // region to guarantee having icons for all search engines. -@@ -280,6 +286,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( - dict.Set("iconPath", base::StrCat({icon_path, "@2x"})); - } +@@ -284,6 +290,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( + base::StrCat({"chrome://theme/", + template_url->GetBuiltinImageResourceId(), "@2x"})); } +#endif dict.Set("modelIndex", base::checked_cast(index)); -@@ -296,6 +303,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( +@@ -300,6 +307,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( dict.Set("isOmniboxExtension", type == TemplateURL::OMNIBOX_API_EXTENSION); dict.Set("isPrepopulated", template_url->prepopulate_id() > 0); dict.Set("isStarterPack", template_url->starter_pack_id() > 0); @@ -1290,7 +1291,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome if (type == TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION || type == TemplateURL::OMNIBOX_API_EXTENSION) { const extensions::Extension* extension = -@@ -312,6 +320,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( +@@ -316,6 +324,7 @@ base::Value::Dict SearchEnginesHandler::CreateDictionaryForEngine( dict.Set("extension", std::move(ext_info)); } } @@ -1298,7 +1299,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome return dict; } -@@ -414,12 +423,13 @@ void SearchEnginesHandler::HandleSearchEngineEditStarted( +@@ -418,12 +427,13 @@ void SearchEnginesHandler::HandleSearchEngineEditStarted( void SearchEnginesHandler::OnEditedKeyword(TemplateURL* template_url, const std::u16string& title, const std::u16string& keyword, @@ -1315,7 +1316,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome } edit_controller_.reset(); -@@ -449,6 +459,8 @@ bool SearchEnginesHandler::CheckFieldValidity(const std::string& field_name, +@@ -453,6 +463,8 @@ bool SearchEnginesHandler::CheckFieldValidity(const std::string& field_name, is_valid = edit_controller_->IsKeywordValid(base::UTF8ToUTF16(field_value)); } else if (field_name.compare(kQueryUrlField) == 0) { is_valid = edit_controller_->IsURLValid(field_value); @@ -1324,7 +1325,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chrome } else { NOTREACHED(); } -@@ -471,18 +483,20 @@ void SearchEnginesHandler::HandleSearchEngineEditCompleted( +@@ -475,18 +487,20 @@ void SearchEnginesHandler::HandleSearchEngineEditCompleted( return; } @@ -1364,17 +1365,8 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.h b/chrome/ 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 -@@ -2484,6 +2484,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { - {"searchEnginesQueryURL", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL}, - {"searchEnginesQueryURLExplanation", - IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL_EXPLANATION}, -+ {"searchEnginesSuggestionURLExplanation", -+ IDS_SETTINGS_SEARCH_ENGINES_SUGGESTION_URL_EXPLANATION}, - {"searchEnginesMakeDefault", IDS_SETTINGS_SEARCH_ENGINES_MAKE_DEFAULT}, - {"searchEnginesActivate", IDS_SETTINGS_SEARCH_ENGINES_ACTIVATE}, - {"searchEnginesDeactivate", IDS_SETTINGS_SEARCH_ENGINES_DEACTIVATE}, -@@ -3838,6 +3840,12 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, - AddSystemStrings(html_source); +@@ -143,6 +143,12 @@ + #include "chrome/browser/ui/webui/settings/system_handler.h" #endif +#if BUILDFLAG(IS_ANDROID) @@ -1383,9 +1375,18 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide + html_source->AddString("chromeAndroid", ""); +#endif + - #if BUILDFLAG(USE_NSS_CERTS) - certificate_manager::AddLocalizedStrings(html_source); + #if BUILDFLAG(IS_LINUX) + #include "ui/display/screen.h" #endif +@@ -2458,6 +2464,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { + {"searchEnginesQueryURL", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL}, + {"searchEnginesQueryURLExplanation", + IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL_EXPLANATION}, ++ {"searchEnginesSuggestionURLExplanation", ++ IDS_SETTINGS_SEARCH_ENGINES_SUGGESTION_URL_EXPLANATION}, + {"searchEnginesMakeDefault", IDS_SETTINGS_SEARCH_ENGINES_MAKE_DEFAULT}, + {"searchEnginesActivate", IDS_SETTINGS_SEARCH_ENGINES_ACTIVATE}, + {"searchEnginesDeactivate", IDS_SETTINGS_SEARCH_ENGINES_DEACTIVATE}, diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc new file mode 100644 --- /dev/null @@ -1866,8 +1867,8 @@ new file mode 100644 diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni -@@ -169,6 +169,17 @@ template("chrome_extra_paks") { - sources += invoker.additional_paks +@@ -184,6 +184,17 @@ template("chrome_extra_paks") { + deps += [ "//chrome/browser/resources:component_extension_resources" ] } + if (is_android) { @@ -1910,7 +1911,7 @@ new file mode 100644 diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc -@@ -423,7 +423,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( +@@ -422,7 +422,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( if (regulatory_api_turl->safe_for_autoreplace()) { template_url_service_->ResetTemplateURL( regulatory_api_turl, regulatory_api_turl->short_name(), @@ -1933,7 +1934,7 @@ diff --git a/components/search_engines/search_engines_switches.cc b/components/s diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc -@@ -2051,6 +2051,10 @@ void TemplateURL::SetURL(const std::string& url) { +@@ -2098,6 +2098,10 @@ void TemplateURL::SetURL(const std::string& url) { url_ref().InvalidateCachedValues(); } @@ -1947,7 +1948,7 @@ diff --git a/components/search_engines/template_url.cc b/components/search_engin diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h --- a/components/search_engines/template_url.h +++ b/components/search_engines/template_url.h -@@ -971,6 +971,7 @@ class TemplateURL { +@@ -975,6 +975,7 @@ class TemplateURL { bool CreatedByRegulatoryProgram() const; void SetURL(const std::string& url); @@ -1958,7 +1959,7 @@ diff --git a/components/search_engines/template_url.h b/components/search_engine diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc -@@ -778,13 +778,15 @@ TemplateURL* TemplateURLService::AddWithOverrides( +@@ -770,13 +770,15 @@ TemplateURL* TemplateURLService::AddWithOverrides( std::unique_ptr template_url, const std::u16string& short_name, const std::u16string& keyword, @@ -1975,7 +1976,7 @@ diff --git a/components/search_engines/template_url_service.cc b/components/sear return Add(std::move(template_url)); } -@@ -999,7 +1001,8 @@ void TemplateURLService::IncrementUsageCount(TemplateURL* url) { +@@ -991,7 +993,8 @@ void TemplateURLService::IncrementUsageCount(TemplateURL* url) { void TemplateURLService::ResetTemplateURL(TemplateURL* url, const std::u16string& title, const std::u16string& keyword, @@ -1985,7 +1986,7 @@ diff --git a/components/search_engines/template_url_service.cc b/components/sear DCHECK(!IsCreatedByExtension(url)); DCHECK(!keyword.empty()); DCHECK(!search_url.empty()); -@@ -1011,6 +1014,7 @@ void TemplateURLService::ResetTemplateURL(TemplateURL* url, +@@ -1003,6 +1006,7 @@ void TemplateURLService::ResetTemplateURL(TemplateURL* url, // The urls have changed, reset the favicon url. data.favicon_url = GURL(); } @@ -1996,7 +1997,7 @@ diff --git a/components/search_engines/template_url_service.cc b/components/sear diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h --- a/components/search_engines/template_url_service.h +++ b/components/search_engines/template_url_service.h -@@ -260,7 +260,8 @@ class TemplateURLService final : public WebDataServiceConsumer, +@@ -255,7 +255,8 @@ class TemplateURLService final : public WebDataServiceConsumer, TemplateURL* AddWithOverrides(std::unique_ptr template_url, const std::u16string& short_name, const std::u16string& keyword, @@ -2006,7 +2007,7 @@ diff --git a/components/search_engines/template_url_service.h b/components/searc // Removes the keyword from the model. This deletes the supplied TemplateURL. // This fails if the supplied template_url is the default search provider. -@@ -346,7 +347,8 @@ class TemplateURLService final : public WebDataServiceConsumer, +@@ -341,7 +342,8 @@ class TemplateURLService final : public WebDataServiceConsumer, void ResetTemplateURL(TemplateURL* url, const std::u16string& title, const std::u16string& keyword, @@ -2309,7 +2310,7 @@ diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_ele ts_files += [ "cr_container_shadow_mixin.ts", "cr_radio_button/cr_radio_button_mixin.ts", -@@ -237,7 +237,7 @@ build_webui("build") { +@@ -238,7 +238,7 @@ build_webui("build") { "../js:build_ts", "//third_party/lit/v3_0:build_ts", ] @@ -2359,8 +2360,8 @@ diff --git a/ui/webui/resources/css/BUILD.gn b/ui/webui/resources/css/BUILD.gn diff --git a/ui/webui/resources/images/BUILD.gn b/ui/webui/resources/images/BUILD.gn --- a/ui/webui/resources/images/BUILD.gn +++ b/ui/webui/resources/images/BUILD.gn -@@ -51,7 +51,7 @@ generate_grd("build_grdp") { - input_files += [ "chrome_logo_dark.svg" ] +@@ -55,7 +55,7 @@ generate_grd("build_grdp") { + ] } - if (!is_android && !is_ios) { diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index dee89f4f..f6d38d39 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -158,7 +158,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -5034,6 +5034,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -5044,6 +5044,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -171,7 +171,7 @@ diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -@@ -54,6 +54,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; +@@ -53,6 +53,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -179,7 +179,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.util.List; -@@ -193,7 +194,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -183,7 +184,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T @Override public void initializeWithNative( BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, @@ -189,7 +189,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser ObservableSupplierImpl tabStripTokenSupplier = new ObservableSupplierImpl<>(); var currentTabGroupModelFilterSupplier = -@@ -285,7 +287,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -274,7 +276,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T sharedImageTilesConfigBuilder, mThemeColorProvider, onSnapshotTokenChange, @@ -317,15 +317,15 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java -@@ -12,6 +12,7 @@ import org.chromium.ui.modelutil.PropertyKey; +@@ -13,6 +13,7 @@ import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey; import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey; import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey; +import android.content.res.ColorStateList; /** {@link PropertyKey} list for the TabGroupUi. */ - class TabGroupUiProperties { -@@ -39,6 +40,9 @@ class TabGroupUiProperties { + @NullMarked +@@ -41,6 +42,9 @@ class TabGroupUiProperties { public static final WritableObjectPropertyKey> WIDTH_PX_CALLBACK = new WritableObjectPropertyKey<>(); @@ -335,7 +335,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser public static final PropertyKey[] ALL_KEYS = new PropertyKey[] { SHOW_GROUP_DIALOG_ON_CLICK_LISTENER, -@@ -50,5 +54,6 @@ class TabGroupUiProperties { +@@ -52,5 +56,6 @@ class TabGroupUiProperties { TINT, INITIAL_SCROLL_INDEX, WIDTH_PX_CALLBACK, @@ -345,7 +345,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java -@@ -19,6 +19,10 @@ import org.chromium.base.Callback; +@@ -20,6 +20,10 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.tab_ui.R; import org.chromium.ui.widget.ChromeImageView; @@ -354,9 +354,9 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser +import org.chromium.chrome.browser.flags.ChromeFeatureList; + /** Toolbar for the bottom tab strip see {@link TabGroupUiCoordinator}. */ + @NullMarked public class TabGroupUiToolbarView extends FrameLayout { - private ChromeImageView mNewTabButton; -@@ -93,6 +97,19 @@ public class TabGroupUiToolbarView extends FrameLayout { +@@ -95,6 +99,19 @@ public class TabGroupUiToolbarView extends FrameLayout { mFadingEdgeEnd.setColorFilter(color, PorterDuff.Mode.SRC_IN); } @@ -379,7 +379,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java -@@ -13,6 +13,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiPropert +@@ -14,6 +14,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiPropert import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.SHOW_GROUP_DIALOG_ON_CLICK_LISTENER; import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.TINT; import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.WIDTH_PX_CALLBACK; @@ -387,7 +387,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import android.view.View; -@@ -51,6 +52,8 @@ class TabGroupUiViewBinder { +@@ -54,6 +55,8 @@ class TabGroupUiViewBinder { } else if (NEW_TAB_BUTTON_ON_CLICK_LISTENER == propertyKey) { viewHolder.toolbarView.setNewTabButtonOnClickListener( model.get(NEW_TAB_BUTTON_ON_CLICK_LISTENER)); @@ -429,7 +429,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; -@@ -132,6 +140,124 @@ public class TabListCoordinator +@@ -131,6 +139,124 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO private int mAwaitingTabId = Tab.INVALID_TAB_ID; private @TabActionState int mTabActionState; @@ -554,7 +554,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Construct a coordinator for UI that shows a list of tabs. * -@@ -367,6 +493,12 @@ public class TabListCoordinator +@@ -363,6 +489,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO checkAwaitingLayout(); } }; @@ -567,7 +567,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -376,7 +508,7 @@ public class TabListCoordinator +@@ -372,7 +504,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO Rect frame = new Rect(); mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); updateGridCardLayout(frame.width()); @@ -576,7 +576,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser LinearLayoutManager layoutManager = new LinearLayoutManager( activity, -@@ -391,6 +523,25 @@ public class TabListCoordinator +@@ -387,6 +519,25 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO } }; mRecyclerView.setLayoutManager(layoutManager); @@ -602,7 +602,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -411,7 +562,7 @@ public class TabListCoordinator +@@ -407,7 +558,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO if (hasEmptyView) { mTabListEmptyCoordinator = new TabListEmptyCoordinator( @@ -611,7 +611,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } configureRecyclerViewTouchHelpers(); -@@ -700,6 +851,9 @@ public class TabListCoordinator +@@ -697,6 +848,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); @@ -624,7 +624,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java -@@ -9,7 +9,9 @@ import android.view.View; +@@ -11,7 +11,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -632,9 +632,9 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser +import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import androidx.annotation.DrawableRes; - import androidx.annotation.Nullable; import androidx.annotation.StringRes; -@@ -19,6 +21,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; + +@@ -24,6 +26,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.tab_ui.R; import org.chromium.ui.modelutil.ListObservable; import org.chromium.ui.modelutil.ListObservable.ListObserver; @@ -642,7 +642,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Empty coordinator that is responsible for showing an empty state view in tab switcher when we are -@@ -39,15 +42,18 @@ class TabListEmptyCoordinator { +@@ -47,15 +50,18 @@ class TabListEmptyCoordinator { private boolean mIsTabSwitcherShowing; private boolean mIsListObserverAttached; private @Nullable TabListEmptyIllustrationAnimationManager mIllustrationAnimationManager; @@ -660,9 +660,9 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mModel = model; + mBrowserControlsStateProvider = browserControlsStateProvider; mListObserver = - new ListObserver() { + new ListObserver<>() { @Override -@@ -169,6 +175,15 @@ class TabListEmptyCoordinator { +@@ -178,6 +184,15 @@ class TabListEmptyCoordinator { public void attachEmptyView() { if (mEmptyView != null && mEmptyView.getParent() == null) { mRootView.addView(mEmptyView); @@ -675,8 +675,8 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser + emptyViewParams.topMargin = toolbarHeightPx; + } + mEmptyView.setLayoutParams(emptyViewParams); + setEmptyViewVisibility(View.GONE); } - setEmptyViewVisibility(View.GONE); } diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java @@ -714,15 +714,15 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java -@@ -13,6 +13,7 @@ import android.os.Handler; - import android.os.Looper; +@@ -15,6 +15,7 @@ import android.os.Looper; import android.os.SystemClock; + import android.view.Gravity; import android.view.LayoutInflater; +import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -@@ -579,6 +580,9 @@ public class FeedSurfaceCoordinator +@@ -621,6 +622,9 @@ public class FeedSurfaceCoordinator ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMarginStart(margin); layoutParams.setMarginEnd(margin); @@ -735,7 +735,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -18,6 +18,14 @@ import org.chromium.chrome.browser.flags.CromiteNativeUtils; +@@ -20,6 +20,14 @@ import org.chromium.chrome.browser.flags.CromiteNativeUtils; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; @@ -748,9 +748,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s +import org.chromium.chrome.browser.lifetime.ApplicationLifetime; + /** The Chrome implementation of AccessibilitySettingsDelegate. */ + @NullMarked public class ChromeAccessibilitySettingsDelegate implements AccessibilitySettingsDelegate { - private static class TextSizeContrastAccessibilityDelegate -@@ -81,6 +89,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -84,6 +92,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting return new ForceTabletUIDelegate(); } @@ -763,7 +763,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s private final Profile mProfile; /** -@@ -92,6 +106,62 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -95,6 +109,62 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting mProfile = profile; } @@ -829,7 +829,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/HeadlessBrowserControlsStateProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/HeadlessBrowserControlsStateProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/HeadlessBrowserControlsStateProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/HeadlessBrowserControlsStateProvider.java -@@ -18,6 +18,11 @@ public class HeadlessBrowserControlsStateProvider implements BrowserControlsStat +@@ -25,6 +25,11 @@ public class HeadlessBrowserControlsStateProvider implements BrowserControlsStat return 0; } @@ -844,7 +844,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/He diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -@@ -258,6 +258,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -259,6 +259,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -855,7 +855,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp if (forwarder != null) forwarder.setCurrentTouchOffsetY(top); } -@@ -900,6 +904,9 @@ public class CompositorViewHolder extends FrameLayout +@@ -901,6 +905,9 @@ public class CompositorViewHolder extends FrameLayout mApplicationBottomInsetSupplier != null ? mApplicationBottomInsetSupplier.get().webContentsHeightInset : 0; @@ -913,16 +913,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java -@@ -39,6 +39,7 @@ import org.chromium.ui.base.WindowAndroid; +@@ -38,6 +38,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa + import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.dragdrop.DragAndDropDelegate; - import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; +import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; /** LayoutManagerChromeTablet is the specialization of LayoutManagerChrome for the tablet. */ public class LayoutManagerChromeTablet extends LayoutManagerChrome { -@@ -138,7 +139,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { - modalDialogManager, +@@ -134,7 +135,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { + actionConfirmationManager, dataSharingTabManager, bottomSheetController, - shareDelegateSupplier); @@ -992,7 +992,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.Supplier; -@@ -108,6 +109,8 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -109,6 +110,8 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; @@ -1033,7 +1033,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over + y -= mStripFilterArea.top; long time = time(); if (mModelSelectorButton != null && mModelSelectorButton.click(x, y, buttons)) { - mModelSelectorButton.handleClick(time); + mModelSelectorButton.handleClick(time, buttons); @@ -313,6 +322,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; @@ -1050,8 +1050,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(x, y); } -@@ -449,7 +460,8 @@ public class StripLayoutHelperManager - ModalDialogManager modalDialogManager, +@@ -447,7 +458,8 @@ public class StripLayoutHelperManager + ActionConfirmationManager actionConfirmationManager, DataSharingTabManager dataSharingTabManager, @NonNull BottomSheetController bottomSheetController, - @NonNull Supplier shareDelegateSupplier) { @@ -1060,7 +1060,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mContext = context; Resources res = context.getResources(); mManagerHost = managerHost; -@@ -556,6 +568,8 @@ public class StripLayoutHelperManager +@@ -557,6 +569,8 @@ public class StripLayoutHelperManager multiInstanceManager, shareDelegateSupplier, TabGroupListBottomSheetCoordinator::new); @@ -1069,10 +1069,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over tabHoverCardViewStub.setOnInflateListener( (viewStub, view) -> { -@@ -809,6 +823,10 @@ public class StripLayoutHelperManager - // layer should be a negative value. - yOffset -= getHeight(); +@@ -815,6 +829,10 @@ public class StripLayoutHelperManager + yOffset = 0; } + + int topControlsHeight = 0; + if (mBrowserControlsManagerSupplier.get() != null) { + topControlsHeight = mBrowserControlsManagerSupplier.get().getTopControlsHeight(); @@ -1080,7 +1080,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mTabStripTreeProvider.pushAndUpdateStrip( this, mLayerTitleCacheSupplier.get(), -@@ -822,7 +840,9 @@ public class StripLayoutHelperManager +@@ -828,7 +846,9 @@ public class StripLayoutHelperManager mStripTransitionScrimOpacity, mLeftPadding, mRightPadding, @@ -1091,7 +1091,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over return mTabStripTreeProvider; } -@@ -888,11 +908,21 @@ public class StripLayoutHelperManager +@@ -894,11 +914,21 @@ public class StripLayoutHelperManager mRightPadding, mTopPadding); @@ -1242,8 +1242,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow /** A class that manages browser control visibility and positioning. */ public class BrowserControlsManager implements ActivityStateListener, BrowserControlsSizer { // The amount of time to delay the control show request after returning to a once visible -@@ -559,6 +561,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon - return mTopControlsHeight; +@@ -568,6 +570,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon + } } + @Override @@ -1257,7 +1257,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow @Override public int getTopControlsMinHeight() { return mTopControlsMinHeight; -@@ -660,6 +670,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -669,6 +679,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon @Override public float getTopVisibleContentOffset() { @@ -1320,7 +1320,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -115,6 +115,7 @@ import org.chromium.content_public.browser.NavigationController; +@@ -116,6 +116,7 @@ import org.chromium.content_public.browser.NavigationController; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1328,7 +1328,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import androidx.annotation.NonNull; import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; -@@ -775,11 +776,16 @@ public class NewTabPage +@@ -777,11 +778,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1347,7 +1347,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -795,9 +801,7 @@ public class NewTabPage +@@ -797,9 +803,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1370,10 +1370,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; - import android.widget.LinearLayout; -@@ -170,7 +173,12 @@ public class NewTabPageLayout extends LinearLayout { - mMiddleSpacer = findViewById(R.id.ntp_middle_spacer); + import android.widget.ImageView; +@@ -177,7 +180,12 @@ public class NewTabPageLayout extends LinearLayout mFakeSearchBoxLayout = findViewById(R.id.search_box); + mFakeSearchBoxEditText = findViewById(R.id.search_box_text); insertSiteSectionView(); - + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -1555,7 +1555,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -204,6 +204,9 @@ import org.chromium.url.GURL; +@@ -211,6 +211,9 @@ import org.chromium.url.GURL; import java.util.List; @@ -1565,7 +1565,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -811,6 +814,17 @@ public class ToolbarManager +@@ -832,6 +835,17 @@ public class ToolbarManager }, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1583,7 +1583,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1427,6 +1441,7 @@ public class ToolbarManager +@@ -1457,6 +1471,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1591,7 +1591,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1440,6 +1455,7 @@ public class ToolbarManager +@@ -1470,6 +1485,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1599,7 +1599,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -1894,9 +1910,21 @@ public class ToolbarManager +@@ -1994,9 +2010,21 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarViewRectProvider(); } @@ -1622,7 +1622,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar assert mTabGroupUiOneshotSupplier == null; assert mUndoBarThrottle != null; ThemeColorProvider bottomUiThemeColorProvider = -@@ -1911,7 +1939,7 @@ public class ToolbarManager +@@ -2011,7 +2039,7 @@ public class ToolbarManager mActivityTabProvider, mTabModelSelector, mActivity, @@ -1631,7 +1631,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsSizer, mScrimManager, mOmniboxFocusStateSupplier, -@@ -1938,7 +1966,7 @@ public class ToolbarManager +@@ -2038,7 +2066,7 @@ public class ToolbarManager mControlsVisibilityDelegate, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1640,7 +1640,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -1946,7 +1974,8 @@ public class ToolbarManager +@@ -2046,7 +2074,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1733,7 +1733,7 @@ diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/b #include "cc/resources/scoped_ui_resource.h" #include "cc/slim/layer.h" #include "cc/slim/nine_patch_layer.h" -@@ -115,8 +116,13 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, +@@ -116,8 +117,13 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, debug_layer_->RemoveFromParent(); // Position the toolbar at the bottom of the space available for top controls. @@ -1833,9 +1833,9 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java -@@ -119,6 +119,12 @@ public interface BrowserControlsStateProvider { +@@ -124,6 +124,12 @@ public interface BrowserControlsStateProvider { */ - int getTopControlsHeight(); + int getTopControlsHairlineHeight(); + /** + * @return The height of the top controls in pixels. @@ -1849,15 +1849,15 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedListContentManager.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedListContentManager.java --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedListContentManager.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedListContentManager.java -@@ -14,6 +14,7 @@ import android.widget.FrameLayout; - import androidx.annotation.Nullable; - import androidx.annotation.Px; +@@ -15,6 +15,7 @@ import androidx.annotation.Px; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.xsurface.ListContentManager; import org.chromium.chrome.browser.xsurface.ListContentManagerObserver; import org.chromium.chrome.browser.xsurface.LoggingParameters; -@@ -142,7 +143,10 @@ public class FeedListContentManager implements ListContentManager { +@@ -144,7 +145,10 @@ public class FeedListContentManager implements ListContentManager { FrameLayout enclosingLayout = new FrameLayout(parent.getContext()); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( @@ -1880,9 +1880,9 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse #include "chrome/browser/android/webapk/webapk_features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/contextmenu/context_menu_features.h" -@@ -315,6 +316,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { - &kNavigationCaptureRefactorAndroid, - &kNewTabSearchEngineUrlAndroid, +@@ -326,6 +327,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kNavBarColorAnimation, + &kNavBarColorMatchesTabBackground, &kNewTabPageAndroidTriggerForPrerender2, + &features::kMoveTopToolbarToBottom, + &features::kDisableToolbarSwipeUp, @@ -1892,7 +1892,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -434,6 +434,10 @@ public abstract class ChromeFeatureList { +@@ -450,6 +450,10 @@ public abstract class ChromeFeatureList { public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 = "NewTabPageAndroidTriggerForPrerender2"; public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization"; @@ -1900,10 +1900,10 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f + "DisableToolbarSwipeUp"; + public static final String MOVE_TOP_TOOLBAR_TO_BOTTOM = + "MoveTopToolbarToBottom"; - public static final String NEW_TAB_SEARCH_ENGINE_URL_ANDROID = "NewTabSearchEngineUrlAndroid"; + public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = + "NewTabPageCustomizationToolbarButton"; public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe"; - public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = -@@ -801,6 +805,10 @@ public abstract class ChromeFeatureList { +@@ -859,6 +863,10 @@ public abstract class ChromeFeatureList { newCachedFlag(NOTIFICATION_TRAMPOLINE, false); public static final CachedFlag sOptimizationGuidePushNotifications = newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true); @@ -1914,8 +1914,8 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true); -@@ -947,6 +955,8 @@ public abstract class ChromeFeatureList { - sNewTabPageCustomization, +@@ -1036,6 +1044,8 @@ public abstract class ChromeFeatureList { + sNewTabPageCustomizationToolbarButton, sNotificationTrampoline, sOptimizationGuidePushNotifications, + sMoveTopToolbarToBottom, @@ -2120,7 +2120,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -2282,7 +2282,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2321,7 +2321,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2128,7 +2128,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse + true); #endif - registry->RegisterBooleanPref( + #if BUILDFLAG(ENTERPRISE_DATA_CONTROLS) diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java @@ -2139,19 +2139,19 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch +import android.os.Build; import android.os.SystemClock; import android.text.TextUtils; - import android.view.Gravity; -@@ -52,6 +53,7 @@ import org.chromium.build.annotations.NullMarked; + import android.util.SparseArray; +@@ -53,6 +54,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.RequiresNonNull; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider.ControlsPosition; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ui.appmenu.internal.R; import org.chromium.components.browser_ui.styles.SemanticColorUtils; - import org.chromium.components.browser_ui.widget.chips.ChipView; -@@ -284,6 +286,12 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler + import org.chromium.components.browser_ui.util.motion.MotionEventInfo; +@@ -295,6 +297,12 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler } - mListView = (ListView) contentView.findViewById(R.id.app_menu_list); + mListView = contentView.findViewById(R.id.app_menu_list); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // always scroll to the bottom to show new items + mListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); @@ -2161,7 +2161,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch int footerHeight = inflateFooter(footerResourceId, contentView, menuWidth); int headerHeight = inflateHeader(headerResourceId, contentView, menuWidth); -@@ -322,7 +330,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -333,7 +341,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler Math.min( Math.abs(mTempLocation[1] - visibleDisplayFrame.top), Math.abs(mTempLocation[1] - visibleDisplayFrame.bottom)); @@ -2170,7 +2170,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch menuItemIds, heightList, visibleDisplayFrame, -@@ -342,8 +350,14 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -353,8 +361,14 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler sizingPadding, anchorView, popupWidth, @@ -2186,7 +2186,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch try { mPopup.showAtLocation( -@@ -405,11 +419,20 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -416,11 +430,20 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler Rect padding, View anchorView, int popupWidth, @@ -2208,7 +2208,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch int[] offsets = new int[2]; // If we have a hardware menu button, locate the app menu closer to the estimated // hardware menu button location. -@@ -585,7 +608,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -596,7 +619,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler } @RequiresNonNull("mPopup") @@ -2217,7 +2217,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch List menuItemIds, List heightList, Rect appDimensions, -@@ -604,7 +627,13 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -615,7 +638,13 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler - footerHeight - headerHeight - anchorViewImpactHeight; @@ -2232,7 +2232,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch if (mIsByPermanentButton) availableScreenSpace -= padding.top; if (availableScreenSpace <= 0 && sExceptionReporter != null) { String logMessage = -@@ -634,6 +663,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler +@@ -645,6 +674,7 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler menuItemIds, heightList, groupDividerResourceId, availableScreenSpace); menuHeight += footerHeight + headerHeight + padding.top + padding.bottom; mPopup.setHeight(menuHeight); @@ -2243,7 +2243,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java -@@ -23,6 +23,7 @@ import androidx.annotation.VisibleForTesting; +@@ -25,6 +25,7 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.Callback; import org.chromium.base.metrics.RecordUserAction; @@ -2251,10 +2251,10 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch import org.chromium.base.supplier.Supplier; import org.chromium.build.annotations.MonotonicNonNull; import org.chromium.build.annotations.NullMarked; -@@ -248,7 +249,16 @@ class AppMenuHandlerImpl - id, customViewBinders, customViewTypeOffsetMap); - }, - this); +@@ -241,7 +242,16 @@ class AppMenuHandlerImpl + assert !(isByPermanentButton && startDragging); + + mModelList = mDelegate.getMenuItems(this); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // reverses the order of items in the menu + ModelList modelListReversed = new ModelList(); @@ -2271,7 +2271,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java --- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java +++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java -@@ -147,6 +147,7 @@ public class EdgeToEdgeControllerFactory { +@@ -149,6 +149,7 @@ public class EdgeToEdgeControllerFactory { * to the window. */ public static boolean isSupportedConfiguration(Activity activity) { @@ -2282,7 +2282,7 @@ diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromi diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java --- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java +++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java -@@ -562,6 +562,7 @@ public class EdgeToEdgeControllerImpl +@@ -580,6 +580,7 @@ public class EdgeToEdgeControllerImpl * the system insets due to the keyboard or the bottom controls being visible. */ private boolean shouldPadAdjusters() { @@ -2293,14 +2293,14 @@ diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromi diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java --- a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java +++ b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java -@@ -327,6 +327,7 @@ public class EdgeToEdgeUtils { +@@ -335,6 +335,7 @@ public class EdgeToEdgeUtils { * @return whether the given window's insets indicate a tappable navigation bar. */ static boolean hasTappableNavigationBar(Window window) { + if ((true)) return true; - var rootInsets = window.getDecorView().getRootWindowInsets(); - assert rootInsets != null; - Insets navigationBarInsets = + if (sObservedTappableNavigationBar + && ChromeFeatureList.sEdgeToEdgeMonitorConfigurations.isEnabled()) { + return true; diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/DeferredIMEWindowInsetApplicationCallback.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/DeferredIMEWindowInsetApplicationCallback.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/DeferredIMEWindowInsetApplicationCallback.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/DeferredIMEWindowInsetApplicationCallback.java @@ -2312,7 +2312,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow private boolean mAnimationInProgress; private @Nullable WindowInsetsAnimationCompat mCurrentAnimation; private @Nullable InsetObserver mInsetObserver; -@@ -88,6 +89,10 @@ public class DeferredIMEWindowInsetApplicationCallback +@@ -89,6 +90,10 @@ public class DeferredIMEWindowInsetApplicationCallback return mKeyboardHeight; } @@ -2323,7 +2323,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow @Override public void onPrepare(WindowInsetsAnimationCompat animation) { if ((animation.getTypeMask() & WindowInsetsCompat.Type.ime()) == 0) return; -@@ -120,11 +125,13 @@ public class DeferredIMEWindowInsetApplicationCallback +@@ -121,11 +126,13 @@ public class DeferredIMEWindowInsetApplicationCallback public WindowInsetsCompat onApplyWindowInsets( View view, WindowInsetsCompat windowInsetsCompat) { int newKeyboardHeight = 0; @@ -2334,9 +2334,9 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars()); newKeyboardHeight = imeInsets.bottom - systemBarInsets.bottom; + mSystemBarInsetsBottom = systemBarInsets.bottom; - } - // Keyboard going away or the change is not animated; apply immediately. - if (newKeyboardHeight < mKeyboardHeight || !mAnimationInProgress) { + + // Since the ime insets are greater than 0, the keyboard is showing, but its height is + // being suppressed in that this class deliberately wants to avoid application resizing. diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java @@ -2454,7 +2454,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java -@@ -10,6 +10,7 @@ import android.view.KeyEvent; +@@ -12,6 +12,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -2462,7 +2462,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.core.view.ViewCompat; -@@ -49,6 +50,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -51,6 +52,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.LazyConstructionPropertyMcp; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; @@ -2470,15 +2470,15 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; -@@ -68,6 +70,7 @@ public class AutocompleteCoordinator +@@ -70,6 +72,7 @@ public class AutocompleteCoordinator private @Nullable OmniboxSuggestionsDropdown mDropdown; - private ObserverList mScrollListenerList = + private final ObserverList mScrollListenerList = new ObserverList<>(); + private final @NonNull OmniboxSuggestionsDropdownEmbedder mDropdownEmbedder; /** An observer watching for changes to the visual state of the omnibox suggestions. */ public interface OmniboxSuggestionsVisualStateObserver { -@@ -102,6 +105,7 @@ public class AutocompleteCoordinator +@@ -104,6 +107,7 @@ public class AutocompleteCoordinator Context context = parent.getContext(); ModelList listItems = new ModelList(); @@ -2486,7 +2486,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow PropertyModel listModel = new PropertyModel.Builder(SuggestionListProperties.ALL_KEYS) .with(SuggestionListProperties.EMBEDDER, dropdownEmbedder) -@@ -224,6 +228,16 @@ public class AutocompleteCoordinator +@@ -226,6 +230,16 @@ public class AutocompleteCoordinator dropdown.forcePhoneStyleOmnibox(forcePhoneStyleOmnibox); dropdown.setAdapter(mAdapter); @@ -2550,15 +2550,15 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /** A widget for showing a list of omnibox suggestions. */ @NullMarked public class OmniboxSuggestionsDropdown extends RecyclerView { -@@ -269,7 +272,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -270,7 +273,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { addItemDecoration(new SuggestionHorizontalDivider(context)); mLayoutScrollListener = new SuggestionLayoutScrollListener(context); - setLayoutManager(mLayoutScrollListener); - mSelectionController = new RecyclerViewSelectionController(mLayoutScrollListener); - addOnChildAttachStateChangeListener(mSelectionController); - -@@ -278,6 +280,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { + mSelectionController = + new RecyclerViewSelectionController( + mLayoutScrollListener, SelectionController.Mode.SATURATING_WITH_SENTINEL); +@@ -281,6 +283,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_bottom); int paddingTop = resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_top); @@ -2627,7 +2627,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow 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 -@@ -1692,6 +1692,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1686,6 +1686,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2643,7 +2643,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn -@@ -190,6 +190,7 @@ android_library("java") { +@@ -206,6 +206,7 @@ android_library("java") { "//content/public/android:content_java", "//third_party/android_deps:material_design_java", "//third_party/androidx:androidx_annotation_annotation_experimental_java", @@ -2892,7 +2892,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -@@ -70,6 +70,10 @@ import java.lang.annotation.Retention; +@@ -72,6 +72,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.function.BooleanSupplier; @@ -2903,7 +2903,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Layout for the browser controls (omnibox, menu, tab strip, etc..). */ @NullMarked public class ToolbarControlContainer extends OptimizedFrameLayout -@@ -174,6 +178,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -177,6 +181,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout if (view != null) ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; } @@ -2912,9 +2912,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow + CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams)getLayoutParams(); + layoutParams.gravity = Gravity.START | Gravity.BOTTOM; + } - mToolbarContainer = - (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); + mToolbarContainer = findViewById(R.id.toolbar_container); ViewStub toolbarStub = findViewById(R.id.toolbar_stub); + toolbarStub.setLayoutResource(toolbarLayoutId); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java @@ -2980,7 +2980,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java -@@ -18,6 +18,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing +@@ -17,6 +17,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.resources.ResourceManager; @@ -2988,7 +2988,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** A SceneLayer to render the top toolbar. This is the "view" piece of the top toolbar overlay. */ @JNINamespace("android") -@@ -44,6 +45,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { +@@ -43,6 +44,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { /** Push all information about the texture to native at once. */ private void pushProperties(PropertyModel model) { if (mResourceManagerSupplier.get() == null) return; @@ -3002,7 +3002,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow TopToolbarSceneLayerJni.get() .updateToolbarLayer( mNativePtr, -@@ -54,7 +62,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { +@@ -53,7 +61,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { model.get(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID), model.get(TopToolbarOverlayProperties.URL_BAR_COLOR), model.get(TopToolbarOverlayProperties.X_OFFSET), @@ -3030,7 +3030,7 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -49,6 +49,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -48,6 +48,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment private BooleanPreferenceDelegate mForceTabletUIDelegate; static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; @@ -3042,7 +3042,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -63,6 +68,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -62,6 +67,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate = delegate; } @@ -3053,7 +3053,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -@@ -122,6 +131,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -118,6 +127,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment forceTabletUiPref.setChecked(mForceTabletUIDelegate.getValue()); forceTabletUiPref.setOnPreferenceChangeListener(this); @@ -3072,7 +3072,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -197,6 +218,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -193,6 +214,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -3115,7 +3115,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc -@@ -28,6 +28,7 @@ +@@ -31,6 +31,7 @@ #include "base/task/single_thread_task_runner.h" #include "base/task/thread_pool.h" #include "base/threading/scoped_blocking_call.h" @@ -3123,7 +3123,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ #include "cc/base/math_util.h" #include "cc/slim/layer.h" #include "components/input/events_helper.h" -@@ -900,6 +901,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -917,6 +918,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( // factor. Thus, |top_content_offset| in CSS pixels is also in DIPs. float top_content_offset = metadata.top_controls_height * metadata.top_controls_shown_ratio; diff --git a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch index 600e2fc7..a103bde1 100644 --- a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch +++ b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch @@ -37,7 +37,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -76,6 +76,13 @@ import org.chromium.ui.text.SpanApplier; +@@ -77,6 +77,13 @@ import org.chromium.ui.text.SpanApplier; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -51,7 +51,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting /** Fragment to keep track of the all the privacy related preferences. */ public class PrivacySettings extends ChromeBaseSettingsFragment implements Preference.OnPreferenceChangeListener { -@@ -96,6 +103,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -97,6 +104,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private static final String PREF_INCOGNITO_TRACKING_PROTECTIONS = "incognito_tracking_protections"; @VisibleForTesting static final String PREF_DO_NOT_TRACK = "do_not_track"; @@ -68,9 +68,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @VisibleForTesting static final String PREF_THIRD_PARTY_COOKIES = "third_party_cookies"; @VisibleForTesting static final String PREF_TRACKING_PROTECTION = "tracking_protection"; private static final String PREF_ADVANCED_PROTECTION_INFO = "advanced_protection_info"; -@@ -211,6 +228,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment - passwordLeakTogglePref.setVisible(false); - } +@@ -208,6 +225,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + (ChromeSwitchPreference) findPreference(PREF_PASSWORD_LEAK_DETECTION); + passwordLeakTogglePref.setOnPreferenceChangeListener(this); + mSearchSuggestions = (ChromeSwitchPreference) findPreference(PREF_SEARCH_SUGGESTIONS); + mSearchSuggestions.setOnPreferenceChangeListener(this); @@ -85,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting ChromeSwitchPreference canMakePaymentPref = (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT); canMakePaymentPref.setOnPreferenceChangeListener(this); -@@ -359,6 +386,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -356,6 +383,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment } else if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) { UserPrefs.get(getProfile()) .setBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED, (boolean) newValue); @@ -95,7 +95,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; } -@@ -371,6 +401,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -368,6 +398,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment /** Updates the preferences. */ public void updatePreferences() { @@ -104,7 +104,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + ChromeSwitchPreference passwordLeakTogglePref = (ChromeSwitchPreference) findPreference(PREF_PASSWORD_LEAK_DETECTION); - if (passwordLeakTogglePref != null && passwordLeakTogglePref.isVisible()) { + if (passwordLeakTogglePref != null) { 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 diff --git a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch index 66aa3b72..00072ebd 100644 --- a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -7,7 +7,7 @@ Voice button and legacy share/voice functionality is not restored. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../ReaderModeToolbarButtonController.java | 6 +++--- + .../ReaderModeToolbarButtonController.java | 5 +++-- .../ContextualPageActionController.java | 4 ++++ .../chrome/browser/settings/MainSettings.java | 9 +-------- .../segmentation_platform_config.cc | 1 + @@ -19,13 +19,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../adaptive/AdaptiveToolbarStats.java | 2 ++ ...oButtonGroupAdaptiveToolbarPreference.java | 19 ++++++++++++------- ...ve-button-in-top-toolbar-customization.inc | 1 + - 12 files changed, 41 insertions(+), 22 deletions(-) + 12 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-adaptive-button-in-top-toolbar-customization.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java -@@ -39,12 +39,12 @@ public class ReaderModeToolbarButtonController extends BaseButtonDataProvider { +@@ -39,11 +39,12 @@ public class ReaderModeToolbarButtonController extends BaseButtonDataProvider { modalDialogManager, buttonDrawable, context.getString(R.string.reader_view_text_alt), @@ -34,8 +34,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/R /* supportsTinting= */ true, /* iphCommandBuilder= */ null, AdaptiveToolbarButtonVariant.READER_MODE, -- /* tooltipTextResId= */ Resources.ID_NULL, -- /* showBackgroundHighlight= */ false); +- /* tooltipTextResId= */ Resources.ID_NULL); + /* tooltipTextResId= */ R.string.reader_mode_action_chip_label_simplify_page, + /* showBackgroundHighlight= */ true); } @@ -44,7 +43,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/R diff --git a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java b/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java -@@ -202,6 +202,10 @@ public class ContextualPageActionController { +@@ -212,6 +212,10 @@ public class ContextualPageActionController { && mTabSupplier.get().getId() == tab.getId(); if (!isSameTab) return; @@ -58,7 +57,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_pl diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -305,14 +305,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -299,14 +299,7 @@ public class MainSettings extends ChromeBaseSettingsFragment getContext(), getProfile(), /* androidPermissionDelegate= */ null, @@ -107,7 +106,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/radio_button_grou diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java -@@ -320,7 +320,7 @@ public class AdaptiveToolbarButtonController +@@ -335,7 +335,7 @@ public class AdaptiveToolbarButtonController } private boolean isScreenWideEnoughForButton() {