diff --git a/build/patches/Disable-safety-check.patch b/build/patches/Disable-safety-check.patch index c064faab..4b4322f2 100644 --- a/build/patches/Disable-safety-check.patch +++ b/build/patches/Disable-safety-check.patch @@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -442,7 +442,6 @@ if (_is_default_toolchain) { +@@ -445,7 +445,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:java", "//chrome/browser/regional_capabilities/android:java", "//chrome/browser/safe_browsing/android:java", @@ -30,7 +30,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/safety_hub/android:java", "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", -@@ -1137,8 +1136,6 @@ if (_is_default_toolchain) { +@@ -1141,8 +1140,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:junit", "//chrome/browser/recent_tabs/internal:junit", "//chrome/browser/safe_browsing/android:junit", @@ -51,7 +51,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -982,7 +982,6 @@ chrome_java_sources = [ +@@ -990,7 +990,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingPasswordReuseDialogBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingReferringAppBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingSettingsNavigation.java", @@ -62,7 +62,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -54,7 +54,7 @@ found in the LICENSE file. +@@ -55,7 +55,7 @@ found in the LICENSE file. android:fragment="org.chromium.chrome.browser.safety_hub.SafetyHubFragment" android:key="safety_hub" android:order="10" @@ -123,7 +123,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/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -35,13 +35,6 @@ import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDeleg +@@ -34,13 +34,6 @@ import org.chromium.chrome.browser.privacy_guide.PrivacyGuideFragment; import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsBaseFragment; import org.chromium.chrome.browser.privacy_sandbox.TopicsManageFragment; import org.chromium.chrome.browser.profiles.Profile; @@ -135,9 +135,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme -import org.chromium.chrome.browser.safety_hub.SafetyHubFragment; -import org.chromium.chrome.browser.safety_hub.SafetyHubModuleDelegateImpl; import org.chromium.chrome.browser.search_engines.settings.SearchEngineSettings; + import org.chromium.chrome.browser.settings.search.SettingsSearchCoordinator; import org.chromium.chrome.browser.signin.SigninAndHistorySyncActivityLauncherImpl; - import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate; -@@ -123,17 +116,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -137,17 +130,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl delegate.setSnackbarManagerSupplier(mSnackbarManagerSupplier); baseSiteSettingsFragment.setSiteSettingsDelegate(delegate); } @@ -155,22 +155,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme if (fragment instanceof CredentialEntryFragmentViewBase) { CredentialEditUiFactory.create((CredentialEntryFragmentViewBase) fragment, mProfile); } -@@ -204,14 +186,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl - ((AutofillLocalIbanEditor) fragment) - .setModalDialogManagerSupplier(mModalDialogManagerSupplier); +@@ -216,14 +198,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl + .setModalDialogManagerSupplier( + (Supplier<@Nullable ModalDialogManager>) mModalDialogManagerSupplier); } - if (fragment instanceof SafetyHubFragment safetyHubFragment) { - safetyHubFragment.setDelegate( - new SafetyHubModuleDelegateImpl( - mProfile, -- mModalDialogManagerSupplier, +- mModalDialogManagerSupplier.asNonNull(), - SigninAndHistorySyncActivityLauncherImpl.get(), - new SettingsCustomTabLauncherImpl())); - } if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } -@@ -226,8 +200,5 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -238,8 +212,5 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl if (fragment instanceof ManageSyncSettings) { ((ManageSyncSettings) fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } @@ -182,15 +182,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme 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 -@@ -373,7 +373,7 @@ public class MainSettings extends ChromeBaseSettingsFragment - removePreferenceIfPresent(PREF_UI_THEME); - } +@@ -378,7 +378,7 @@ public class MainSettings extends ChromeBaseSettingsFragment + } -- if (DeviceInfo.isAutomotive()) { -+ if (((true)) || DeviceInfo.isAutomotive()) { - getPreferenceScreen().removePreference(findPreference(PREF_SAFETY_HUB)); - } else { - findPreference(PREF_SAFETY_HUB) + private static boolean shouldShowSafetyHubPref() { +- return !DeviceInfo.isAutomotive(); ++ return false; + } + + private static boolean shouldShowNotificationPref(Context context, Intent intent) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java @@ -202,7 +202,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.chrome.browser.password_manager.settings.PasswordSettings; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; -@@ -131,7 +130,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { +@@ -153,7 +152,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { case SettingsFragment.PAYMENT_METHODS: return AutofillPaymentMethodsFragment.class; case SettingsFragment.SAFETY_CHECK: @@ -214,7 +214,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3446,7 +3446,6 @@ static_library("browser") { +@@ -3410,7 +3410,6 @@ static_library("browser") { "//chrome/browser/recent_tabs:jni_headers", "//chrome/browser/regional_capabilities", "//chrome/browser/safe_browsing/android:safe_browsing_enums", diff --git a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch index 4a89a09e..ba6a9a72 100644 --- a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch +++ b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch @@ -12,16 +12,16 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/version.gni b/chrome/version.gni --- a/chrome/version.gni +++ b/chrome/version.gni -@@ -87,7 +87,7 @@ if (target_os == "android") { +@@ -86,7 +86,7 @@ if (target_os == "android") { _version_dictionary_template += "trichrome_auto_64_version_code = \"@TRICHROME_AUTO_64_VERSION_CODE@\" " _version_dictionary_template += "trichrome_desktop_64_version_code = \"@TRICHROME_DESKTOP_64_VERSION_CODE@\" " - if (target_cpu == "arm64") { + if (target_cpu == "arm64" || target_cpu == "x64") { - _version_dictionary_template += "chrome_high_version_code = \"@CHROME_HIGH_VERSION_CODE@\" " - _version_dictionary_template += "chrome_high_beta_version_code = \"@CHROME_HIGH_BETA_VERSION_CODE@\" " - _version_dictionary_template += "trichrome_64_32_high_version_code = \"@TRICHROME_64_32_HIGH_VERSION_CODE@\" " -@@ -230,16 +230,16 @@ if (is_mac) { + _version_dictionary_template += + "chrome_high_version_code = \"@CHROME_HIGH_VERSION_CODE@\" " + _version_dictionary_template += +@@ -231,16 +231,16 @@ if (is_mac) { chrome_version_name = chrome_version_full # There is a different version code only for arm64. @@ -44,26 +44,26 @@ 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 -@@ -191,6 +191,7 @@ const base::FeatureParam kWebViewADPFSocManufacturerBlocklist{ - // HWUI. This feature works only when WebViewEnableADPF is enabled, otherwise - // this is a no-op. - BASE_FEATURE(kWebViewEnableADPFRendererMain, base::FEATURE_DISABLED_BY_DEFAULT); +@@ -161,6 +161,7 @@ BASE_FEATURE(kWebViewNewInvalidateHeuristic, base::FEATURE_ENABLED_BY_DEFAULT); + + BASE_FEATURE(kWebViewNewInvalidateHeuristicForTV, + base::FEATURE_DISABLED_BY_DEFAULT); +SET_CROMITE_FEATURE_ENABLED(kWebViewEnableADPFRendererMain); - // If enabled, the GPU Main thread is included in the set of threads reported - // to the HWUI. This feature works only when WebViewEnableADPF is enabled, -@@ -291,6 +292,7 @@ BASE_FEATURE(kEnableADPFSeparateRendererMainSession, - // If enabled, Chrome uses SetThreads instead of recreating an - // ADPF(Android Dynamic Performance Framework) hint session when the set of - // threads in the session changes. + // If enabled and the device's SOC manufacturer is in the allowlist, WebView + // reports the set of threads involved in frame production to HWUI, and they're +@@ -241,6 +242,7 @@ BASE_FEATURE(kEnableADPFRendererMain, base::FEATURE_ENABLED_BY_DEFAULT); + // If enabled, Chrome puts Renderer Main threads into a separate + // ADPF(Android Dynamic Performance Framework) hint session, and does not + // report any timing hints from this session. +// see https://source.chromium.org/chromium/chromium/src/+/e7507d15614ac7f499fb89086b3a09772fa8deb4 - BASE_FEATURE(kEnableADPFSetThreads, base::FEATURE_ENABLED_BY_DEFAULT); + BASE_FEATURE(kEnableADPFSeparateRendererMainSession, + base::FEATURE_DISABLED_BY_DEFAULT); - // If enabled, Chrome uses notifyWorkloadIncrease ADPF(Android Dynamic 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 -@@ -370,16 +370,13 @@ bool IsAdpfEnabled() { +@@ -437,16 +437,13 @@ bool IsAdpfEnabled() { switches::kDisableAdpf)) { return false; } @@ -80,5 +80,5 @@ diff --git a/components/viz/service/performance_hint/hint_session.cc b/component + if ((true)) return true; std::string soc_allowlist = features::kADPFSocManufacturerAllowlist.Get(); - std::string soc_blocklist = features::kADPFSocManufacturerBlocklist.Get(); + std::string soc = base::SysInfo::SocManufacturer(); -- diff --git a/build/patches/Enable-extension-in-incognito.patch b/build/patches/Enable-extension-in-incognito.patch index 9d0dcbf2..88af7bb7 100644 --- a/build/patches/Enable-extension-in-incognito.patch +++ b/build/patches/Enable-extension-in-incognito.patch @@ -16,7 +16,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../tabmodel/TabModelSelectorBase.java | 7 ++ .../browser/toolbar/ToolbarManager.java | 4 +- .../chrome/browser/ui/RootUiCoordinator.java | 6 +- - .../developer_private_functions_shared.cc | 4 +- + .../developer_private_functions.cc | 3 +- .../browser/extensions/extension_tab_util.cc | 2 +- .../tabmodel/IncognitoTabModelImpl.java | 10 +- .../tabmodel/IncognitoTabModelObserver.java | 2 + @@ -25,19 +25,19 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../ui/extensions/ExtensionActionsBridge.java | 6 ++ .../android/tab_model/tab_model_jni_bridge.cc | 4 + .../ExtensionActionListCoordinator.java | 4 +- - .../ExtensionActionListMediator.java | 24 ++--- + .../ExtensionActionListMediator.java | 19 +++- .../ExtensionToolbarCoordinator.java | 7 +- .../ExtensionToolbarCoordinatorImpl.java | 5 +- .../extensions/ExtensionsMenuCoordinator.java | 4 +- - .../extensions/ExtensionsMenuMediator.java | 14 +-- - .../ChromeAndroidTaskTrackerImpl.java | 97 ++++++++++++++----- + .../extensions/ExtensionsMenuMediator.java | 10 +- + .../ChromeAndroidTaskTrackerImpl.java | 92 ++++++++++++++----- .../ChromeAndroidTaskTracker.java | 7 +- - 26 files changed, 234 insertions(+), 70 deletions(-) + 26 files changed, 233 insertions(+), 56 deletions(-) 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 -@@ -109,6 +109,7 @@ import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperMa +@@ -118,6 +118,7 @@ import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperMa import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperManager.TabModelStartupInfo; import org.chromium.chrome.browser.cookies.CookiesFetcher; import org.chromium.chrome.browser.crypto.CipherFactory; @@ -45,7 +45,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.data_sharing.DataSharingIntentUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabGroupUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabManager; -@@ -289,12 +290,14 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; +@@ -300,11 +301,13 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; import org.chromium.chrome.browser.tasks.tab_management.TabUiUtils; import org.chromium.chrome.browser.tasks.tab_management.TabsSettings; import org.chromium.chrome.browser.tasks.tab_management.archived_tabs_auto_delete_promo.ArchivedTabsAutoDeletePromoManager; @@ -54,13 +54,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.chrome.browser.toolbar.extensions.ExtensionToolbarCoordinator; import org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer; - import org.chromium.chrome.browser.toolbar.top.tab_strip.StripVisibilityState; import org.chromium.chrome.browser.ui.AppLaunchDrawBlocker; +import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; import org.chromium.chrome.browser.ui.IncognitoRestoreAppLaunchDrawBlockerFactory; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; -@@ -828,7 +831,36 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -822,7 +825,36 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mTabModelNotificationDotManager.initWithNative(mTabModelSelector); TabModel currentTabModel = mTabModelSelector.getCurrentModel(); initializeChromeAndroidTask( @@ -98,7 +97,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct // For saving non-incognito tab closures for Recent Tabs. boolean alwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -@@ -2940,7 +2972,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -2969,7 +3001,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mLayoutStateProviderSupplier, getBrowserControlsManager(), getWindowAndroid(), @@ -107,7 +106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct getLifecycleDispatcher(), getLayoutManagerSupplier(), /* menuOrKeyboardActionController= */ this, -@@ -3908,6 +3940,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -3885,6 +3917,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt } RecordUserAction.record("MobileMenuRecentTabs"); } else if (id == R.id.extensions_menu_id) { @@ -121,7 +120,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct 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 -@@ -453,7 +453,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -458,7 +458,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity private @Nullable TabStateThemeResourceProvider mThemeResourceProvider; @@ -130,10 +129,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv new OneshotSupplierImpl<>(); protected ChromeActivity() { -@@ -1101,13 +1101,29 @@ public abstract class ChromeActivity extends AsyncInitializationActivity - } +@@ -1121,13 +1121,29 @@ public abstract class ChromeActivity extends AsyncInitializationActivity + () -> ExtensionWindowControllerBridgeFactory.create(chromeAndroidTask)); - // 3. Make the ChromeAndroidTask available via OneshotSupplier. + // 5. Make the ChromeAndroidTask available via OneshotSupplier. - mChromeAndroidTaskSupplier.set(chromeAndroidTask); + if (!currentTabModel.isIncognito()) + mChromeAndroidTaskSupplierInternal.set(chromeAndroidTask); @@ -163,7 +162,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv } @Override -@@ -2032,7 +2048,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2053,7 +2069,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity getProfileProviderSupplier().runSyncOrOnAvailable(this::initializeManualFillingComponent); @@ -172,7 +171,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv if (chromeAndroidTask != null) { chromeAndroidTask.onNativeInitializationFinished(); } -@@ -2076,7 +2092,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2097,7 +2113,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity && DeviceFormFactor.isNonMultiDisplayContextOnTablet(this)) { HostZoomMap.setTransparentZoomAdjustment( ContentFeatureList.sAndroidMonitorZoomScalingFactor.getValue() / 100.0f); @@ -184,7 +183,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java -@@ -391,7 +391,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity { +@@ -392,7 +392,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity { getTabModelSelectorSupplier(), getBrowserControlsManager(), getWindowAndroid(), @@ -196,7 +195,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Base diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java -@@ -91,6 +91,7 @@ import org.chromium.chrome.browser.tab.EmptyTabObserver; +@@ -92,6 +92,7 @@ import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.RequestDesktopUtils; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab_ui.TabContentManager; @@ -204,7 +203,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Base import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarBehavior; -@@ -123,6 +124,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -124,6 +125,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import java.util.function.BooleanSupplier; import java.util.function.Supplier; @@ -212,7 +211,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Base /** A {@link RootUiCoordinator} variant that controls UI for {@link BaseCustomTabActivity}. */ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator { -@@ -209,7 +211,7 @@ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator { +@@ -210,7 +212,7 @@ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator { @NonNull ObservableSupplier tabModelSelectorSupplier, @NonNull BrowserControlsManager browserControlsManager, @NonNull ActivityWindowAndroid windowAndroid, @@ -251,7 +250,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust 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 -@@ -182,6 +182,7 @@ import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarBehavior; +@@ -185,6 +185,7 @@ import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarBehavior; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker; import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; @@ -259,7 +258,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderCoordinator; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; -@@ -423,7 +424,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -421,7 +422,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @NonNull OneshotSupplier layoutStateProviderOneshotSupplier, @NonNull BrowserControlsManager browserControlsManager, @NonNull ActivityWindowAndroid windowAndroid, @@ -271,7 +270,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelJniBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelJniBridge.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelJniBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelJniBridge.java -@@ -131,10 +131,10 @@ public abstract class TabModelJniBridge implements TabModelInternal { +@@ -133,10 +133,10 @@ public abstract class TabModelJniBridge implements TabModelInternal { @Override public void associateWithBrowserWindow(long nativeAndroidBrowserWindow) { // Ensure this isn't set multiple times. @@ -287,7 +286,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java -@@ -480,6 +480,13 @@ public abstract class TabModelSelectorBase +@@ -488,6 +488,13 @@ public abstract class TabModelSelectorBase } } @@ -304,7 +303,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod 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 -@@ -135,6 +135,7 @@ import org.chromium.chrome.browser.tab.TabObscuringHandler; +@@ -141,6 +141,7 @@ import org.chromium.chrome.browser.tab.TabObscuringHandler; import org.chromium.chrome.browser.tab.TabSelectionType; import org.chromium.chrome.browser.tab_ui.TabContentManager; import org.chromium.chrome.browser.tab_ui.TabModelDotInfo; @@ -312,7 +311,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModel; -@@ -234,6 +235,7 @@ import org.chromium.url.GURL; +@@ -241,6 +242,7 @@ import org.chromium.url.GURL; import java.util.List; import java.util.function.Supplier; @@ -320,7 +319,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.flags.ChromeFeatureList; import android.view.Gravity; -@@ -810,7 +812,7 @@ public class ToolbarManager +@@ -802,7 +804,7 @@ public class ToolbarManager ObservableSupplier omniboxFocusStateSupplier, OneshotSupplier promoShownOneshotSupplier, WindowAndroid windowAndroid, @@ -332,7 +331,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -144,6 +144,7 @@ import org.chromium.chrome.browser.tab.TabSelectionType; +@@ -149,6 +149,7 @@ import org.chromium.chrome.browser.tab.TabSelectionType; import org.chromium.chrome.browser.tab_ui.RecyclerViewPosition; import org.chromium.chrome.browser.tab_ui.TabContentManager; import org.chromium.chrome.browser.tab_ui.TabSwitcher; @@ -340,7 +339,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.tabmodel.TabCreatorManager; import org.chromium.chrome.browser.tabmodel.TabModel; -@@ -237,6 +238,7 @@ import org.chromium.url.GURL; +@@ -243,6 +244,7 @@ import org.chromium.url.GURL; import java.lang.ref.WeakReference; import java.util.function.BooleanSupplier; import java.util.function.Supplier; @@ -348,7 +347,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi /** * The root UI coordinator. This class will eventually be responsible for inflating and managing -@@ -270,7 +272,7 @@ public class RootUiCoordinator +@@ -276,7 +278,7 @@ public class RootUiCoordinator protected @Nullable AppMenuCoordinator mAppMenuCoordinator; private final MenuOrKeyboardActionController mMenuOrKeyboardActionController; protected final ActivityWindowAndroid mWindowAndroid; @@ -357,7 +356,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi protected final ActivityTabProvider mActivityTabProvider; protected ObservableSupplier mShareDelegateSupplier; -@@ -459,7 +461,7 @@ public class RootUiCoordinator +@@ -468,7 +470,7 @@ public class RootUiCoordinator @NonNull OneshotSupplier layoutStateProviderOneshotSupplier, @NonNull BrowserControlsManager browserControlsManager, @NonNull ActivityWindowAndroid windowAndroid, @@ -366,24 +365,23 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi @NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher, @NonNull ObservableSupplier layoutManagerSupplier, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, -diff --git a/chrome/browser/extensions/api/developer_private/developer_private_functions_shared.cc b/chrome/browser/extensions/api/developer_private/developer_private_functions_shared.cc ---- a/chrome/browser/extensions/api/developer_private/developer_private_functions_shared.cc -+++ b/chrome/browser/extensions/api/developer_private/developer_private_functions_shared.cc -@@ -1665,8 +1665,8 @@ DeveloperPrivateDismissSafetyHubExtensionsMenuNotificationFunction::Run() { +diff --git a/chrome/browser/extensions/api/developer_private/developer_private_functions.cc b/chrome/browser/extensions/api/developer_private/developer_private_functions.cc +--- a/chrome/browser/extensions/api/developer_private/developer_private_functions.cc ++++ b/chrome/browser/extensions/api/developer_private/developer_private_functions.cc +@@ -1746,7 +1746,8 @@ DeveloperPrivateDismissSafetyHubExtensionsMenuNotificationFunction::Run() { } Profile* profile = Profile::FromBrowserContext(browser_context()); - SafetyHubMenuNotificationServiceFactory::GetForProfile(profile) -- ->DismissActiveNotificationOfModule( + if (auto* menu_notification_service_factory = SafetyHubMenuNotificationServiceFactory::GetForProfile(profile)) -+ menu_notification_service_factory->DismissActiveNotificationOfModule( ++ menu_notification_service_factory + ->DismissActiveNotificationOfModule( safety_hub::SafetyHubModuleType::EXTENSIONS); return RespondNow(NoArguments()); - } diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc -@@ -1428,7 +1428,7 @@ bool ExtensionTabUtil::OpenOptionsPageFromWebContents( +@@ -1256,7 +1256,7 @@ bool ExtensionTabUtil::OpenOptionsPageFromWebContents( if (!url) { return false; } @@ -395,7 +393,7 @@ diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/ex diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java -@@ -140,8 +140,12 @@ class IncognitoTabModelImpl implements IncognitoTabModelInternal { +@@ -145,8 +145,12 @@ class IncognitoTabModelImpl implements IncognitoTabModelInternal { return; } @@ -409,7 +407,7 @@ diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browse } mDelegateModel -@@ -152,6 +156,10 @@ class IncognitoTabModelImpl implements IncognitoTabModelInternal { +@@ -157,6 +161,10 @@ class IncognitoTabModelImpl implements IncognitoTabModelInternal { mCurrentTabSupplier.set(null); mTabCountSupplier.set(0); @@ -423,7 +421,7 @@ diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelObserver.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelObserver.java --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelObserver.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelObserver.java -@@ -30,4 +30,6 @@ public interface IncognitoTabModelObserver { +@@ -33,4 +33,6 @@ public interface IncognitoTabModelObserver { /** Called when the last tab of the {@link IncognitoTabModel} is closed. */ default void didBecomeEmpty() {} @@ -442,7 +440,7 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ #include "ui/color/color_provider_manager.h" #include "ui/events/android/key_event_android.h" #include "ui/events/event.h" -@@ -226,6 +228,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) { +@@ -221,6 +223,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) { install_directory, install_updacked_directory)); } @@ -462,7 +460,7 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/chrome/browser/ui/android/extensions/extension_actions_bridge.h --- a/chrome/browser/ui/android/extensions/extension_actions_bridge.h +++ b/chrome/browser/ui/android/extensions/extension_actions_bridge.h -@@ -54,6 +54,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer, +@@ -53,6 +53,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer { int tab_id, content::WebContents* web_contents); void ClearExtensionData(JNIEnv* env); @@ -473,7 +471,7 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/c diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java --- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java +++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java -@@ -244,6 +244,10 @@ public class ExtensionActionsBridge { +@@ -245,6 +245,10 @@ public class ExtensionActionsBridge implements Destroyable { ExtensionActionsBridgeJni.get().clearExtensionData(mNativeExtensionActionsBridge); } @@ -484,7 +482,7 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b @NativeMethods public interface Natives { boolean extensionsEnabled(@JniType("Profile*") Profile profile); -@@ -278,6 +282,8 @@ public class ExtensionActionsBridge { +@@ -281,6 +285,8 @@ public class ExtensionActionsBridge implements Destroyable { void clearExtensionData(long nativeExtensionActionsBridge); @@ -496,7 +494,7 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc --- a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc +++ b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc -@@ -118,6 +118,10 @@ void TabModelJniBridge::AssociateWithBrowserWindow( +@@ -126,6 +126,10 @@ void TabModelJniBridge::AssociateWithBrowserWindow( // BrowserWindowInterface is available on desktop Android, but not other Android // builds. For non-desktop Android, this function should be a no-op. #if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) @@ -510,7 +508,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java -@@ -23,6 +23,8 @@ import org.chromium.ui.listmenu.ListMenuButton; +@@ -21,6 +21,8 @@ import org.chromium.ui.listmenu.ListMenuButton; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.ViewGroupAdapter; @@ -519,19 +517,19 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Root component for the extension action buttons. Exposes public API for external consumers to * interact with the buttons and affect their states. -@@ -39,7 +41,7 @@ public class ExtensionActionListCoordinator implements Destroyable { +@@ -37,7 +39,7 @@ public class ExtensionActionListCoordinator implements Destroyable { Context context, ExtensionActionListContainer container, WindowAndroid windowAndroid, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier) { +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier) { mContainer = container; + diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java -@@ -33,6 +33,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem; +@@ -31,6 +31,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; @@ -540,36 +538,31 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow @NullMarked class ExtensionActionListMediator implements Destroyable { private static final String TAG = "EALMediator"; -@@ -40,7 +42,7 @@ class ExtensionActionListMediator implements Destroyable { +@@ -38,7 +40,7 @@ class ExtensionActionListMediator implements Destroyable { private final Context mContext; private final WindowAndroid mWindowAndroid; private final ModelList mModels; -- private final OneshotSupplier mTaskSupplier; +- private final ChromeAndroidTask mTask; + private final Function mTaskSupplier; private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate(); -@@ -53,7 +55,7 @@ class ExtensionActionListMediator implements Destroyable { +@@ -51,12 +53,12 @@ class ExtensionActionListMediator implements Destroyable { Context context, WindowAndroid windowAndroid, ModelList models, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier) { +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier) { mContext = context; -@@ -108,17 +110,17 @@ class ExtensionActionListMediator implements Destroyable { - // button while its popup is open. - closePopup(); + mWindowAndroid = windowAndroid; + mModels = models; +- mTask = task; ++ mTaskSupplier = task; -- ChromeAndroidTask task = mTaskSupplier.get(); -- if (task == null) { -- return; -- } -- - Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab(); - if (currentTab == null) { - return; + mExtensionActionsUpdateHelper = + new ExtensionActionsUpdateHelper( +@@ -111,8 +113,13 @@ class ExtensionActionListMediator implements Destroyable { } int tabId = currentTab.getId(); @@ -579,37 +572,36 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow + } + ExtensionActionPopupContents contents = - ExtensionActionPopupContents.create(task, actionId, tabId); +- ExtensionActionPopupContents.create(mTask, actionId, tabId); ++ ExtensionActionPopupContents.create(task, actionId, tabId); assert mCurrentPopup == null; -@@ -129,13 +131,13 @@ class ExtensionActionListMediator implements Destroyable { - } - - private void onContextClick(ListMenuButton buttonView, String actionId) { -- ChromeAndroidTask task = mTaskSupplier.get(); -- if (task == null) { -+ Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab(); -+ if (currentTab == null) { + mCurrentPopup = + new ExtensionActionPopup(mContext, mWindowAndroid, buttonView, actionId, contents); +@@ -131,9 +138,11 @@ class ExtensionActionListMediator implements Destroyable { return; } -- Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab(); -- if (currentTab == null) { + ChromeAndroidTask task = mTaskSupplier.apply(currentTab); -+ if (task == null) { - return; - } ++ + ExtensionActionContextMenuBridge bridge = + new ExtensionActionContextMenuBridge( +- mTask, actionId, webContents, ContextMenuSource.TOOLBAR_ACTION); ++ task, actionId, webContents, ContextMenuSource.TOOLBAR_ACTION); + ExtensionActionContextMenuUtils.showContextMenu( + mContext, buttonView, bridge, MenuBuilderHelper.getRectProvider(buttonView), null); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java -@@ -17,11 +17,14 @@ import org.chromium.build.annotations.NullMarked; +@@ -15,12 +15,15 @@ import org.chromium.build.annotations.Initializer; + import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; - import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; + import org.chromium.chrome.browser.ui.extensions.ExtensionUi; import org.chromium.ui.base.WindowAndroid; +import java.util.function.Function; @@ -617,36 +609,36 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * The coordinator of the extension-related toolbar UI. * -@@ -42,7 +45,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { +@@ -41,7 +44,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, -@@ -75,7 +78,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { + ThemeColorProvider themeColorProvider) { +@@ -77,7 +80,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, + ThemeColorProvider themeColorProvider); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java -@@ -19,6 +19,7 @@ import org.chromium.build.annotations.Nullable; +@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.ServiceImpl; - import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; -@@ -27,6 +28,8 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi; +@@ -24,6 +25,8 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi; import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.ui.base.WindowAndroid; @@ -655,19 +647,19 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The implementation of {@link ExtensionToolbarCoordinator}. */ @NullMarked @ServiceImpl(ExtensionToolbarCoordinator.class) -@@ -46,7 +49,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina +@@ -39,7 +42,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, + ThemeColorProvider themeColorProvider) { diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java -@@ -44,6 +44,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -40,6 +40,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.widget.RectProvider; @@ -676,19 +668,19 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Coordinator for the extensions menu, accessed from the puzzle icon in the toolbar. This class is * responsible for the button and the menu. -@@ -84,7 +86,7 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -75,7 +77,7 @@ public class ExtensionsMenuCoordinator implements Destroyable { + Context context, ListMenuButton extensionsMenuButton, - MaterialDivider extensionsMenuTabSwitcherDivider, ThemeColorProvider themeColorProvider, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, + ExtensionActionListCoordinator extensionActionListCoordinator) { diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java -@@ -30,6 +30,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList; +@@ -26,6 +26,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.widget.RectProvider; @@ -697,56 +689,51 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Mediator for the extensions menu. This class is responsible for listening to changes in the * extensions and updating the model accordingly. -@@ -38,7 +40,7 @@ import org.chromium.ui.widget.RectProvider; +@@ -34,7 +36,7 @@ import org.chromium.ui.widget.RectProvider; class ExtensionsMenuMediator implements Destroyable { private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate(); private final Context mContext; -- private final OneshotSupplier mTaskSupplier; -+ private final Function mTaskSupplier; - private final ObservableSupplier<@Nullable Profile> mProfileSupplier; +- private final ChromeAndroidTask mTask; ++ private final Function mTask; private final Runnable mOnUpdateFinishedRunnable; - private final Callback mOnExtensionsAvailableCallback; -@@ -49,7 +51,7 @@ class ExtensionsMenuMediator implements Destroyable { + private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; + private final View mRootView; +@@ -42,7 +44,7 @@ class ExtensionsMenuMediator implements Destroyable { public ExtensionsMenuMediator( Context context, -- OneshotSupplier taskSupplier, -+ Function taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +- ChromeAndroidTask task, ++ Function task, + NullableObservableSupplier currentTabSupplier, ModelList extensionModels, -@@ -112,13 +114,13 @@ class ExtensionsMenuMediator implements Destroyable { - } - - private void onPrimaryClick(ListMenuButton buttonView, String actionId) { -- ChromeAndroidTask task = mTaskSupplier.get(); -- if (task == null) { -+ Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab(); -+ if (currentTab == null) { + Runnable onUpdateFinishedRunnable, +@@ -99,9 +101,11 @@ class ExtensionsMenuMediator implements Destroyable { return; } -- Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab(); -- if (currentTab == null) { -+ ChromeAndroidTask task = mTaskSupplier.apply(currentTab); -+ if (task == null) { - return; - } ++ ChromeAndroidTask task = mTaskSupplier.get(); ++ + ExtensionActionContextMenuBridge bridge = + new ExtensionActionContextMenuBridge( +- mTask, actionId, webContents, ContextMenuSource.MENU_ITEM); ++ task, actionId, webContents, ContextMenuSource.MENU_ITEM); + ExtensionActionContextMenuUtils.showContextMenu( + mContext, diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java --- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java +++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java -@@ -19,6 +19,7 @@ import org.chromium.base.ResettersForTesting; - import org.chromium.build.annotations.NullMarked; - import org.chromium.build.annotations.Nullable; +@@ -23,6 +23,7 @@ import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.browser.customtabs.PopupIntentCreatorProvider; + import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask.PendingTaskInfo; + import org.chromium.chrome.browser.util.WindowFeatures; import org.chromium.ui.base.ActivityWindowAndroid; - -@@ -32,6 +33,30 @@ import java.util.Map; - @NullMarked +@@ -39,6 +40,30 @@ import java.util.Map; final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + private static final String TAG = "CrAndroidTaskTracker"; + private static class Key { + public final Integer mTaskId; @@ -775,129 +762,120 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro private static @Nullable ChromeAndroidTaskTrackerImpl sInstance; private static boolean sPausePendingTaskActivityCreationForTesting; -@@ -50,7 +75,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { +@@ -56,7 +81,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + * Maps {@link ChromeAndroidTask} IDs to their instances. This reflects the {@link * ChromeAndroidTask}'s ID when it is alive, and is different from its ID in the pending state. */ - @GuardedBy("mTasksLock") - private final Map mTasks = new ArrayMap<>(); + private final Map mTasksCromite = new ArrayMap<>(); /** * Maps pending {@link ChromeAndroidTask} IDs to their instances. This reflects the {@link -@@ -82,7 +107,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { +@@ -86,7 +111,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + ThreadUtils.assertOnUiThread(); int taskId = getTaskId(activityScopedObjects.mActivityWindowAndroid); - synchronized (mTasksLock) { -- var existingTask = mTasks.get(taskId); -+ var key = new Key(taskId, activityScopedObjects.mTabModel); -+ var existingTask = mTasksCromite.get(key); - if (existingTask != null) { - assert existingTask.getBrowserWindowType() == browserWindowType - : "The browser window type of an existing task can't be changed."; -@@ -94,12 +120,12 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { - ChromeAndroidTask pendingTask = mPendingTasks.remove(pendingId); - assert pendingTask != null : "Invalid pendingId provided."; - pendingTask.setActivityScopedObjects(activityScopedObjects); -- mTasks.put(taskId, pendingTask); -+ mTasksCromite.put(key, pendingTask); - return pendingTask; - } - - var newTask = new ChromeAndroidTaskImpl(browserWindowType, activityScopedObjects); -- mTasks.put(taskId, newTask); -+ mTasksCromite.put(key, newTask); - mObservers.forEach((observer) -> observer.onTaskAdded(newTask)); - return newTask; +- var existingTask = mTasks.get(taskId); ++ var key = new Key(taskId, activityScopedObjects.mTabModel); ++ var existingTask = mTasksCromite.get(key); + if (existingTask != null) { + assert existingTask.getBrowserWindowType() == browserWindowType + : "The browser window type of an existing task can't be changed."; +@@ -98,12 +124,12 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + ChromeAndroidTask pendingTask = mPendingTasks.remove(pendingId); + assert pendingTask != null : "Invalid pendingId provided."; + pendingTask.addActivityScopedObjects(activityScopedObjects); +- mTasks.put(taskId, pendingTask); ++ mTasksCromite.put(key, pendingTask); + return pendingTask; } -@@ -139,29 +165,30 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + + var newTask = new ChromeAndroidTaskImpl(browserWindowType, activityScopedObjects); +- mTasks.put(taskId, newTask); ++ mTasksCromite.put(key, newTask); + mObservers.forEach((observer) -> observer.onTaskAdded(newTask)); + return newTask; + } +@@ -141,28 +167,43 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { @Override @Nullable - public ChromeAndroidTask get(int taskId) { + public ChromeAndroidTask get(int taskId, TabModel tabModel) { - synchronized (mTasksLock) { -- return mTasks.get(taskId); -+ var key = new Key(taskId, tabModel); -+ return mTasksCromite.get(key); - } + ThreadUtils.assertOnUiThread(); +- return mTasks.get(taskId); ++ var key = new Key(taskId, tabModel); ++ return mTasksCromite.get(key); } - @Override - public void remove(int taskId) { -- synchronized (mTasksLock) { -- removeInternalLocked(taskId); -- } +- ThreadUtils.assertOnUiThread(); +- removeInternal(taskId); - } ++ + // @Override + // public void remove(int taskId) { -+ // synchronized (mTasksLock) { -+ // removeInternalLocked(taskId); -+ // } -+ // } ++ // ThreadUtils.assertOnUiThread(); ++ // removeInternal(taskId); ++ // } @Override public void onActivityWindowAndroidDestroy(ActivityWindowAndroid activityWindowAndroid) { - synchronized (mTasksLock) { -- int taskId = getTaskId(activityWindowAndroid); -- var task = mTasks.get(taskId); -+ int taskId = getTaskId(activityWindowAndroid); + ThreadUtils.assertOnUiThread(); + int taskId = getTaskId(activityWindowAndroid); +- var task = mTasks.get(taskId); -- if (task == null) { -- return; -- } -+ for (Key key : mTasksCromite.keySet()) { ++ for (Key key : mTasksCromite.keySet()) { + if (key == null) continue; + if (key.mTaskId != taskId) continue; - ++ + var task = mTasksCromite.get(key); - // If the ActivityWindowAndroid that's passed in isn't the ActivityWindowAndroid held by - // this ChromeAndroidTask, don't do anything. - // -@@ -180,6 +207,17 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { - // the right time to clear and destroy the ActivityWindowAndroid held by the - // ChromeAndroidTask. - if (task.getActivityWindowAndroid() != activityWindowAndroid) { ++ if (task.getActivityWindowAndroid() != activityWindowAndroid) { + continue; + } -+ onActivityWindowAndroidDestroy(task); -+ } ++ onActivityWindowAndroidDestroy(task, activityWindowAndroid); + } + } + + @Override -+ public void onActivityWindowAndroidDestroy(ChromeAndroidTask task) { -+ synchronized (mTasksLock) { -+ if (task == null) { - return; - } ++ public void onActivityWindowAndroidDestroy(ChromeAndroidTask task, ActivityWindowAndroid activityWindowAndroid) { + if (task == null) { + return; + } -@@ -195,7 +233,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { - // - // In the future, we can register a Task listener when a ChromeAndroidTask is created, - // then destroy it when notified of the Task removal. -- removeInternalLocked(taskId); -+ removeInternalLocked(task); +- task.removeActivityScopedObjects(activityWindowAndroid); ++ task.removeActivityScopedObjects(activityWindowAndroid); <-- check this + + // Destroy the ChromeAndroidTask if there is no ActivityWindowAndroid associated with it. + // +@@ -177,7 +218,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + // In the future, we can register a Task listener when a ChromeAndroidTask is created, + // then destroy it when notified of the Task removal. + if (task.getTopActivityWindowAndroid() == null) { +- removeInternal(taskId); ++ removeInternal(task); <-- check this } } -@@ -259,8 +297,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { +@@ -239,8 +280,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { */ void removeAllForTesting() { - synchronized (mTasksLock) { -- mTasks.forEach((taskId, task) -> task.destroy()); -- mTasks.clear(); -+ mTasksCromite.forEach((taskId, task) -> task.destroy()); -+ mTasksCromite.clear(); - mPendingTasks.forEach((taskId, task) -> task.destroy()); - mPendingTasks.clear(); - } -@@ -299,11 +337,17 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + ThreadUtils.assertOnUiThread(); +- mTasks.forEach((taskId, task) -> task.destroy()); +- mTasks.clear(); ++ mTasksCromite.forEach((taskId, task) -> task.destroy()); ++ mTasksCromite.clear(); + mPendingTasks.forEach((taskId, task) -> task.destroy()); + mPendingTasks.clear(); + } +@@ -275,11 +316,17 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + pendingTaskInfo.mIntent, pendingTaskInfo.mCreateParams.getInitialBounds()); } - @GuardedBy("mTasksLock") -- private void removeInternalLocked(int taskId) { +- private void removeInternal(int taskId) { - var taskRemoved = mTasks.remove(taskId); -+ private void removeInternalLocked(ChromeAndroidTask taskRemoved) { ++ private void removeInternal(ChromeAndroidTask taskRemoved) { if (taskRemoved != null) { - mObservers.forEach((observer) -> observer.onTaskRemoved(taskRemoved)); - taskRemoved.destroy(); @@ -913,20 +891,20 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro } } -@@ -339,7 +383,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { - AndroidBrowserWindowCreateParams createParams) { - switch (createParams.getWindowType()) { +@@ -314,7 +361,8 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + @BrowserWindowType int browserWindowType = createParams.getWindowType(); + switch (browserWindowType) { case BrowserWindowType.NORMAL: - for (ChromeAndroidTask task : mTasks.values()) { + List tasks = new ArrayList<>(mTasksCromite.values()); + for (ChromeAndroidTask task : tasks) { - boolean isIncognito = createParams.getProfile().isIncognitoBranded(); var intent = task.createIntentForNormalBrowserWindow(isIncognito); if (intent != null) { -@@ -403,7 +448,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + return intent; +@@ -360,7 +408,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { + /** Returns all PENDING and ALIVE Tasks. */ - @GuardedBy("mTasksLock") - private List getAllTasksLocked() { + private List getAllTasks() { - List tasks = new ArrayList<>(mTasks.values()); + List tasks = new ArrayList<>(mTasksCromite.values()); tasks.addAll(mPendingTasks.values()); diff --git a/build/patches/Enable-share-intent.patch b/build/patches/Enable-share-intent.patch index 0f4b409d..83461024 100644 --- a/build/patches/Enable-share-intent.patch +++ b/build/patches/Enable-share-intent.patch @@ -15,7 +15,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/AndroidManifest.xml | 28 ++- .../res/layout/sharing_intent_content.xml | 88 ++++++++++ .../chrome/browser/IntentHandler.java | 16 +- - .../browser/LaunchIntentDispatcher.java | 14 +- + .../browser/LaunchIntentDispatcher.java | 2 +- + .../document/ChromeLauncherActivity.java | 13 +- .../init/ProcessInitializationHandler.java | 2 + .../SharedIntentShareActivity.java | 159 ++++++++++++++++++ .../flags/android/chrome_feature_list.cc | 1 + @@ -24,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../about_flags_cc/Enable-share-intent.inc | 12 ++ .../Enable-share-intent.inc | 3 + .../Enable-share-intent.inc | 1 + - 14 files changed, 332 insertions(+), 8 deletions(-) + 15 files changed, 332 insertions(+), 9 deletions(-) create mode 100644 chrome/android/java/res/layout/sharing_intent_content.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_intent/SharedIntentShareActivity.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Enable-share-intent.inc @@ -34,7 +35,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -614,6 +614,7 @@ chrome_java_resources = [ +@@ -589,6 +589,7 @@ chrome_java_resources = [ "java/res/layout/shopping_accessory_view_layout.xml", "java/res/layout/status_indicator_container.xml", "java/res/layout/suggestions_tile_view_condensed.xml", @@ -45,7 +46,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -1035,6 +1035,7 @@ chrome_java_sources = [ +@@ -1047,6 +1047,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java", "java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java", "java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java", @@ -56,7 +57,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -271,12 +271,6 @@ by a child template that "extends" this file. +@@ -274,12 +274,6 @@ by a child template that "extends" this file. @@ -69,7 +70,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -355,6 +349,10 @@ by a child template that "extends" this file. +@@ -365,6 +359,10 @@ by a child template that "extends" this file. @@ -80,7 +81,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -391,6 +389,24 @@ by a child template that "extends" this file. +@@ -401,6 +399,24 @@ by a child template that "extends" this file. @@ -201,7 +202,7 @@ new file mode 100644 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 -@@ -197,6 +197,9 @@ public class IntentHandler { +@@ -200,6 +200,9 @@ public class IntentHandler { private static final String EXTRA_TAB_LAUNCH_TYPE = "org.chromium.chrome.browser.tab_launch_type"; @@ -211,7 +212,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j /** A hash code for the URL to verify intent data hasn't been modified. */ public static final String EXTRA_DATA_HASH_CODE = "org.chromium.chrome.browser.data_hash"; -@@ -1536,6 +1539,17 @@ public class IntentHandler { +@@ -1539,6 +1542,17 @@ public class IntentHandler { return IntentUtils.safeGetIntExtra(intent, EXTRA_DEST_TAB_ID, Tab.INVALID_TAB_ID); } @@ -229,7 +230,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j /** * Creates an Intent that will launch a ChromeTabbedActivity on the new tab page. The Intent * will be trusted and therefore able to launch Incognito tabs. -@@ -1744,7 +1758,7 @@ public class IntentHandler { +@@ -1749,7 +1763,7 @@ public class IntentHandler { String headers = getExtraHeadersFromIntent(intent); headers = maybeAddAdditionalContentHeaders(intent, url, headers); @@ -241,38 +242,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -51,6 +51,7 @@ import org.chromium.chrome.browser.notifications.NotificationPlatformBridge; - import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; - import org.chromium.chrome.browser.profiles.Profile; - import org.chromium.chrome.browser.profiles.ProfileManager; -+import org.chromium.chrome.browser.sharing.shared_intent.SharedIntentShareActivity; - import org.chromium.chrome.browser.searchwidget.SearchActivity; - import org.chromium.chrome.browser.tab.Tab; - import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityClient; -@@ -222,11 +223,22 @@ public class LaunchIntentDispatcher { - - String query = null; - final String action = intent.getAction(); -+ boolean isWebSearch = Intent.ACTION_WEB_SEARCH.equals(action); - if (Intent.ACTION_SEARCH.equals(action) -+ || isWebSearch - || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)) { - query = IntentUtils.safeGetStringExtra(intent, SearchManager.QUERY); - } - if (TextUtils.isEmpty(query)) return false; -+ if (isWebSearch) { -+ Intent i = new Intent(Intent.ACTION_SEND); -+ i.putExtra(Intent.EXTRA_TEXT, query); -+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -+ i.setClass(ContextUtils.getApplicationContext(), -+ SharedIntentShareActivity.class); -+ ContextUtils.getApplicationContext().startActivity(i); -+ return true; -+ } - - // Only the ChromeLauncherActivity can handle search intents. Drop the intent and abort the - // launch. -@@ -504,8 +516,8 @@ public class LaunchIntentDispatcher { +@@ -351,8 +351,8 @@ public class LaunchIntentDispatcher { /*incognito*/true); newIntent.setData(mIntent.getData()); newIntent.setPackage(applicationContext.getPackageName()); @@ -282,6 +252,41 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis } if (!chromeTabbedTaskExists(mActivity)) { newIntent.putExtra(IntentHandler.EXTRA_STARTED_TABBED_CHROME_TASK, true); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java +@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; + import org.chromium.chrome.browser.notifications.NotificationPlatformBridge; + import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; + import org.chromium.chrome.browser.searchwidget.SearchActivity; ++import org.chromium.chrome.browser.sharing.shared_intent.SharedIntentShareActivity; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.tabwindow.TabWindowInfo; + import org.chromium.chrome.browser.webapps.WebappLauncherActivity; +@@ -158,12 +159,22 @@ public class ChromeLauncherActivity extends Activity { + + String query = null; + final String action = intent.getAction(); ++ boolean isWebSearch = Intent.ACTION_WEB_SEARCH.equals(action); + if (Intent.ACTION_SEARCH.equals(action) ++ || isWebSearch + || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)) { + query = IntentUtils.safeGetStringExtra(intent, SearchManager.QUERY); + } + if (TextUtils.isEmpty(query)) return false; +- ++ if (isWebSearch) { ++ Intent i = new Intent(Intent.ACTION_SEND); ++ i.putExtra(Intent.EXTRA_TEXT, query); ++ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ++ i.setClass(ContextUtils.getApplicationContext(), ++ SharedIntentShareActivity.class); ++ ContextUtils.getApplicationContext().startActivity(i); ++ return true; ++ } + Intent searchIntent = new Intent(Intent.ACTION_WEB_SEARCH); + searchIntent.putExtra(SearchManager.QUERY, query); + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java @@ -468,7 +473,7 @@ 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 -@@ -410,6 +410,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -406,6 +406,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kRelatedSearchesAllLanguage, &kRelatedSearchesSwitch, &kReloadTabUiResourcesIfChanged, @@ -479,7 +484,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 -@@ -584,6 +584,7 @@ public abstract class ChromeFeatureList { +@@ -575,6 +575,7 @@ public abstract class ChromeFeatureList { public static final String RECENTLY_CLOSED_TABS_AND_WINDOWS = "RecentlyClosedTabsAndWindows"; public static final String RECORD_INCOGNITO_NTP_TIME_TO_FIRST_NAVIGATION_METRIC = "RecordIncognitoNtpTimeToFirstNavigationMetric"; @@ -490,7 +495,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f 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 -@@ -6410,6 +6410,19 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6447,6 +6447,19 @@ To change this setting, BEGIN_LINKdelete the Chrome d Make sure a phone app is enabled on this device diff --git a/build/patches/Experimental-support-for-extensions-on-Android.patch b/build/patches/Experimental-support-for-extensions-on-Android.patch index 9af71ed9..8eaaffbe 100644 --- a/build/patches/Experimental-support-for-extensions-on-Android.patch +++ b/build/patches/Experimental-support-for-extensions-on-Android.patch @@ -13,125 +13,115 @@ folder in case of a crash on startup. License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- android_webview/BUILD.gn | 2 +- - base/android/device_info.cc | 8 +- + base/android/device_info.cc | 8 ++- base/android/device_info.h | 3 +- .../src/org/chromium/base/DeviceInfo.java | 6 +- build/BUILD.gn | 2 +- build/config/android/rules.gni | 4 +- - build/config/chrome_build.gni | 7 +- + build/config/chrome_build.gni | 7 ++- build/config/compiler/BUILD.gn | 2 +- build/config/compiler/pgo/BUILD.gn | 2 +- - chrome/android/BUILD.gn | 6 +- + chrome/android/BUILD.gn | 4 +- chrome/android/chrome_public_apk_tmpl.gni | 2 +- - .../java/res/layout/manage_space_activity.xml | 14 +++- + .../java/res/layout/manage_space_activity.xml | 14 ++++- .../java/res/xml/developer_preferences.xml | 6 ++ .../browser/ChromeBaseAppCompatActivity.java | 2 +- .../AppMenuPropertiesDelegateImpl.java | 2 +- .../settings/AppearanceSettingsFragment.java | 2 +- .../overlays/strip/StripLayoutUtils.java | 2 +- .../DesktopSiteSettingsIphController.java | 2 +- - .../browser/init/AsyncInitTaskRunner.java | 2 +- - .../MediaCaptureNotificationServiceImpl.java | 8 +- + .../MediaCaptureNotificationServiceImpl.java | 8 +-- .../browser/multiwindow/MultiWindowUtils.java | 2 +- .../ChromeSiteSettingsDelegate.java | 2 +- - .../site_settings/ManageSpaceActivity.java | 20 +++++ + .../site_settings/ManageSpaceActivity.java | 20 +++++++ ...InterceptNavigationDelegateClientImpl.java | 2 +- .../browser/tab/RequestDesktopUtils.java | 2 +- - .../TabbedAppMenuPropertiesDelegate.java | 2 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 2 +- - .../chrome/browser/ui/RootUiCoordinator.java | 2 +- - chrome/app/extensions_strings.grdp | 7 ++ + chrome/app/extensions_strings.grdp | 7 +++ chrome/app/theme/theme_resources.grd | 4 +- - chrome/browser/BUILD.gn | 8 +- - chrome/browser/about_flags.cc | 4 + + chrome/browser/BUILD.gn | 6 +- + chrome/browser/about_flags.cc | 4 ++ ...chrome_selection_dropdown_menu_delegate.cc | 4 +- .../bookmarks/bar/BookmarkBarUtils.java | 6 +- .../bar/BookmarkBarVisibilityProvider.java | 2 +- chrome/browser/browser_process_impl.cc | 2 +- - chrome/browser/chrome_browser_field_trials.cc | 84 +++++++++---------- + chrome/browser/chrome_browser_field_trials.cc | 60 +++++++++---------- .../chrome_browser_interface_binders_webui.cc | 4 +- .../browser/chrome_content_browser_client.cc | 4 +- chrome/browser/devtools/BUILD.gn | 2 +- .../chrome_download_manager_delegate.cc | 2 +- .../download_offline_content_provider.cc | 4 +- - chrome/browser/extensions/BUILD.gn | 12 ++- + chrome/browser/extensions/BUILD.gn | 12 +++- .../chrome_extensions_api_client_android.cc | 2 +- - .../extensions/extension_management.cc | 8 +- + .../extensions/extension_management.cc | 8 ++- .../browser/extensions/extension_management.h | 2 +- - chrome/browser/extensions/extension_util.cc | 11 +++ + chrome/browser/extensions/extension_util.cc | 11 ++++ .../feedback/DeviceInfoFeedbackSource.java | 2 +- chrome/browser/media/router/BUILD.gn | 4 +- .../browser/media/router/discovery/BUILD.gn | 2 +- - .../media/router/media_router_feature.cc | 10 +-- + .../media/router/media_router_feature.cc | 10 ++-- .../media/router/media_router_feature.h | 2 +- .../media/webrtc/webrtc_event_log_manager.cc | 4 +- .../policy_value_and_status_aggregator.cc | 2 +- ...hrome_browser_main_extra_parts_profiles.cc | 2 +- - .../profiles/off_the_record_profile_impl.cc | 9 +- + .../profiles/off_the_record_profile_impl.cc | 9 ++- chrome/browser/profiles/profile_destroyer.cc | 2 +- chrome/browser/resources/BUILD.gn | 2 +- chrome/browser/resources/discards/BUILD.gn | 2 +- .../resources/extensions/detail_view.css | 6 ++ - .../resources/extensions/extensions.html | 8 +- - .../resources/extensions/item_list.css | 11 +++ - .../resources/extensions/toolbar.html.ts | 7 -- + .../resources/extensions/extensions.html | 8 ++- + .../resources/extensions/item_list.css | 11 ++++ + .../resources/extensions/toolbar.html.ts | 7 --- ...omeProvidedSharingOptionsProviderBase.java | 4 +- chrome/browser/startup_data.cc | 6 +- chrome/browser/startup_data.h | 6 +- .../common/task_manager_features.cc | 2 +- - chrome/browser/ui/BUILD.gn | 6 +- - .../browser/ui/android/context_menu_helper.cc | 12 ++- + chrome/browser/ui/BUILD.gn | 4 +- + .../browser/ui/android/context_menu_helper.cc | 12 +++- .../browser/ui/android/context_menu_helper.h | 4 +- .../desktop_site/DesktopSiteUtils.java | 4 +- chrome/browser/ui/android/extensions/BUILD.gn | 4 +- - .../extensions/extension_actions_bridge.cc | 23 +++++ + .../extensions/extension_actions_bridge.cc | 23 +++++++ .../extensions/extension_actions_bridge.h | 1 + .../java/res/layout/extensions_menu.xml | 1 + .../res/layout/extensions_menu_footer.xml | 4 +- .../extensions/java/res/values/dimens.xml | 1 + .../ui/extensions/ExtensionActionsBridge.java | 6 ++ .../extensions/windowing/internal/BUILD.gn | 2 +- - .../Enable-extensions-Android.grdp | 15 ++++ - .../Extensions-Android.grdp | 9 ++ - chrome/browser/ui/android/tab_model/BUILD.gn | 4 +- - .../browser/ui/android/tab_model/tab_model.cc | 6 +- + .../Enable-extensions-Android.grdp | 15 +++++ + .../Extensions-Android.grdp | 9 +++ + .../browser/ui/android/tab_model/tab_model.cc | 4 +- .../browser/ui/android/tab_model/tab_model.h | 2 +- - .../android/tab_model/tab_model_jni_bridge.cc | 12 +-- + .../android/tab_model/tab_model_jni_bridge.cc | 12 ++-- .../android/tab_model/tab_model_test_helper.h | 2 +- .../toolbar/java/res/layout/toolbar_phone.xml | 6 ++ - .../ExtensionActionListContainer.java | 8 +- - .../ExtensionToolbarCoordinatorImpl.java | 10 ++- - .../extensions/ExtensionsMenuCoordinator.java | 44 +++++----- + .../ExtensionActionListContainer.java | 8 ++- + .../ExtensionToolbarCoordinatorImpl.java | 10 +++- + .../extensions/ExtensionsMenuCoordinator.java | 44 +++++++------- .../ExtensionsMenuItemProperties.java | 5 +- .../ExtensionsMenuItemViewBinder.java | 2 + - .../extensions/ExtensionsMenuMediator.java | 9 +- - chrome/browser/ui/browser_navigator_params.cc | 4 +- - chrome/browser/ui/browser_navigator_params.h | 4 +- - chrome/browser/ui/browser_window/BUILD.gn | 2 +- - .../ui/browser_window/internal/BUILD.gn | 2 +- + .../extensions/ExtensionsMenuMediator.java | 10 +++- chrome/browser/ui/prefs/BUILD.gn | 4 +- - chrome/browser/ui/prefs/prefs_tab_helper.cc | 8 +- - chrome/browser/ui/tabs/tab_list_interface.h | 4 +- - chrome/browser/ui/webid/BUILD.gn | 2 +- + chrome/browser/ui/prefs/prefs_tab_helper.cc | 8 +-- .../browser/ui/webui/chrome_web_ui_configs.cc | 4 +- .../browser/ui/webui/current_channel_logo.cc | 2 +- - .../browser/ui/webui/discards/discards_ui.cc | 8 +- + .../browser/ui/webui/discards/discards_ui.cc | 8 +-- chrome/chrome_paks.gni | 2 +- chrome/common/chrome_switches.cc | 2 +- chrome/common/chrome_switches.h | 2 +- - chrome/common/extensions/api/api_sources.gni | 7 ++ + chrome/common/extensions/api/api_sources.gni | 7 +++ chrome/common/webui_url_constants.cc | 2 +- chrome/common/webui_url_constants.h | 2 +- .../sandbox_status_extension_android.cc | 3 +- .../sandbox_status_extension_android.h | 1 + - chrome/test/BUILD.gn | 16 ++-- + chrome/test/BUILD.gn | 14 ++--- chrome/version.gni | 4 +- .../core/browser/host_content_settings_map.cc | 6 ++ .../embedder_support/view/ContentView.java | 2 +- .../browser/android/media_router_android.cc | 2 +- .../browser/android/media_router_android.h | 2 +- .../media_router/browser/media_router.h | 4 +- - .../policy/CombinedPolicyProvider.java | 8 +- + .../policy/CombinedPolicyProvider.java | 8 +-- .../components/policy/PolicyCacheUpdater.java | 2 +- .../android/policy_cache_updater_android.cc | 4 +- .../cloud/user_policy_signin_service_base.cc | 2 +- @@ -139,7 +129,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../common/cloud/cloud_policy_constants.cc | 2 +- components/policy/core/common/features.cc | 2 +- .../policy/core/common/policy_merger.cc | 4 +- - .../service/variations_service_client.cc | 2 +- .../installable/installable_icon_fetcher.cc | 6 +- .../installable/installable_icon_fetcher.h | 2 +- .../version/resources/about_version.html | 2 +- @@ -147,22 +136,22 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../media/video_capture_manager.cc | 4 +- .../media/video_capture_manager.h | 6 +- .../render_widget_host_view_android.cc | 2 +- - .../browser/ContentUiEventHandler.java | 7 +- + .../browser/ContentUiEventHandler.java | 7 ++- content/public/common/content_features.cc | 2 +- .../render_frame_media_playback_options.cc | 2 +- - .../about_flags_cc/Extensions-Android.inc | 12 +++ - .../about_flags_cc/Webstore-protection.inc | 8 +- + .../about_flags_cc/Extensions-Android.inc | 12 ++++ + .../about_flags_cc/Webstore-protection.inc | 8 +-- extensions/browser/BUILD.gn | 4 +- ...browser_context_keyed_service_factories.cc | 2 +- extensions/browser/api/system_cpu/BUILD.gn | 2 +- .../api/web_request/permission_helper.cc | 2 +- - extensions/browser/extension_frame_host.cc | 8 ++ - extensions/browser/extension_host.cc | 24 +++++- + extensions/browser/extension_frame_host.cc | 8 +++ + extensions/browser/extension_host.cc | 24 +++++++- extensions/buildflags/BUILD.gn | 3 +- extensions/buildflags/buildflags.gni | 4 +- extensions/common/api/schema.gni | 2 +- extensions/common/command.cc | 2 +- - extensions/common/extension_features.cc | 10 ++- + extensions/common/extension_features.cc | 10 +++- extensions/common/extension_features.h | 6 +- extensions/common/extension_l10n_util.cc | 6 ++ extensions/common/features/feature.cc | 2 +- @@ -175,8 +164,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../renderer/modules/modules_initializer.cc | 4 +- tools/grit/grit_args.gni | 3 +- .../cpp_bundle_generator.py | 2 +- - .../ui/widget/PopupSpecCalculator.java | 9 +- - .../ui/test/util/UiDisableIfSkipCheck.java | 8 +- + .../ui/widget/PopupSpecCalculator.java | 9 ++- + .../ui/test/util/UiDisableIfSkipCheck.java | 8 +-- .../chromium/ui/test/util/UiRestriction.java | 2 +- ui/base/accelerators/command.cc | 2 +- ui/base/device_form_factor_android.cc | 2 +- @@ -186,7 +175,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/cr_elements/BUILD.gn | 2 +- .../cr_elements/cr_toolbar/cr_toolbar.css | 6 ++ ui/webui/resources/css/BUILD.gn | 2 +- - 174 files changed, 597 insertions(+), 316 deletions(-) + 163 files changed, 565 insertions(+), 285 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-extensions-Android.grdp create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Extensions-Android.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Extensions-Android.inc @@ -194,7 +183,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn -@@ -1301,7 +1301,7 @@ declare_args() { +@@ -1303,7 +1303,7 @@ declare_args() { # logic more easily on an emulator, so the decision to use the arm64 # orderfile for x64 (instead of arm32) is somewhat arbitrary. We just # needed to use some real orderfile. @@ -206,7 +195,7 @@ diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn diff --git a/base/android/device_info.cc b/base/android/device_info.cc --- a/base/android/device_info.cc +++ b/base/android/device_info.cc -@@ -104,10 +104,14 @@ bool is_foldable() { +@@ -103,10 +103,14 @@ bool is_foldable() { return get_device_info().isFoldable; } @@ -222,7 +211,7 @@ diff --git a/base/android/device_info.cc b/base/android/device_info.cc // Available only on Android T+. int32_t vulkan_deqp_level() { return get_device_info().vulkanDeqpLevel; -@@ -123,7 +127,7 @@ bool is_xr() { +@@ -122,7 +126,7 @@ bool is_xr() { // check) as a first choice, but fall back to this if not feasible. bool is_tablet() { return was_launched_on_large_display() && !is_tv() && !is_automotive() && @@ -278,7 +267,7 @@ diff --git a/build/BUILD.gn b/build/BUILD.gn 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 -@@ -2027,8 +2027,8 @@ if (!is_robolectric && enable_java_templates) { +@@ -2031,8 +2031,8 @@ if (!is_robolectric && enable_java_templates) { } else { defines += [ "_LOGTAG_PREFIX=cr_" ] } @@ -344,37 +333,28 @@ diff --git a/build/config/compiler/pgo/BUILD.gn b/build/config/compiler/pgo/BUIL diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -958,7 +958,7 @@ if (_is_default_toolchain) { +@@ -966,7 +966,7 @@ if (_is_default_toolchain) { "//chrome/browser/password_entry_edit/android/internal:java", ] - if (is_desktop_android) { + if (is_desktop_android_cromite) { - deps += [ - "//chrome/browser/ui/android/extensions/windowing/internal:java", - "//chrome/browser/ui/browser_window/internal:java", -@@ -1225,7 +1225,7 @@ if (_is_default_toolchain) { - deps += [ "//chrome/browser/ui/android/extensions:junit" ] - } - -- if (is_desktop_android) { -+ if (is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window/internal:junit" ] - } - } -@@ -2416,7 +2416,7 @@ if (_is_default_toolchain) { - "//components/ip_protection/android/android_auth_client_lib/javatests:ip_protection_auth_javatests", + deps += + [ "//chrome/browser/ui/android/extensions/windowing/internal:java" ] + } else { +@@ -2310,7 +2310,7 @@ if (_is_default_toolchain) { + "//components/embedder_support/android:virtual_structure_javatests", ] - if (is_desktop_android) { + if (is_desktop_android_cromite) { deps += [ "//chrome/browser/ui/android/extensions/windowing/internal:javatests", - "//chrome/browser/ui/browser_window/internal:javatests", + diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -43,7 +43,7 @@ default_chrome_public_jinja_variables = [ +@@ -39,7 +39,7 @@ default_chrome_public_jinja_variables = [ "enable_vr=$enable_vr", "enable_openxr=$enable_openxr", "enable_arcore=$enable_arcore", @@ -423,7 +403,7 @@ diff --git a/chrome/android/java/res/xml/developer_preferences.xml b/chrome/andr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java -@@ -578,7 +578,7 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -620,7 +620,7 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity applySingleThemeOverlay(R.style.ThemeOverlay_BrowserUI_OptOutEdgeToEdge); } @@ -435,7 +415,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -1173,7 +1173,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties +@@ -1180,7 +1180,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !shouldShowReaderModePrefs(currentTab) && currentTab != null && currentTab.getWebContents() != null @@ -447,7 +427,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java --- a/chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java -@@ -58,7 +58,7 @@ public class AppearanceSettingsFragment extends ChromeBaseSettingsFragment +@@ -62,7 +62,7 @@ public class AppearanceSettingsFragment extends ChromeBaseSettingsFragment // This fragment may be used on Desktop or tablets. For Desktop we use the current Profile's // UserPrefs. For tablets, we use the local device preference. @@ -459,7 +439,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appearance/sett diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java -@@ -420,7 +420,7 @@ public class StripLayoutUtils { +@@ -415,7 +415,7 @@ public class StripLayoutUtils { public static boolean shouldApplyMoreDensity() { return ChromeFeatureList.sTabStripDensityChangeAndroid.isEnabled() @@ -480,18 +460,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/desktop_site/De return new DesktopSiteSettingsIphController( windowAndroid, activityTabProvider, -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java -@@ -76,7 +76,7 @@ public abstract class AsyncInitTaskRunner { - } - // TODO(crbug.com/389565104): Remove this if block when ready to move desktop to stable - // builds. -- if (VersionInfo.isStableBuild() && DeviceInfo.isDesktop()) { -+ if (VersionInfo.isStableBuild() && DeviceInfo.isDesktopFalse()) { - return "dev"; - } - if (VersionInfo.isBetaBuild()) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java @@ -534,7 +502,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapt diff --git a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java -@@ -217,7 +217,7 @@ public class MultiWindowUtils implements ActivityStateListener { +@@ -200,7 +200,7 @@ public class MultiWindowUtils implements ActivityStateListener { return TabWindowManager.MAX_SELECTORS_S; } @@ -553,8 +521,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C - return !DeviceInfo.isDesktop(); + return !DeviceInfo.isDesktopFalse(); case SiteSettingsCategory.Type.LOCAL_NETWORK_ACCESS: - return ChromeFeatureList.isEnabled(ChromeFeatureList.LOCAL_NETWORK_ACCESS); - case SiteSettingsCategory.Type.WINDOW_MANAGEMENT: + // Use LOCAL_NETWORK_ACCESS if LNA is enabled, but LNA Split permissions is not + // enabled. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java @@ -609,7 +577,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/M diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateClientImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateClientImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateClientImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateClientImpl.java -@@ -205,7 +205,7 @@ public class InterceptNavigationDelegateClientImpl implements InterceptNavigatio +@@ -208,7 +208,7 @@ public class InterceptNavigationDelegateClientImpl implements InterceptNavigatio // TODO(crbug.com/417047079): Replace the following desktop windowing checks with a better // approach. // return MultiWindowUtils.getInstance().isInMultiWindowMode(getActivity()); @@ -630,22 +598,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesk return false; } -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java -@@ -826,7 +826,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm - // PDF. - NativePage nativePage = currentTab.getNativePage(); - boolean isPdfPage = nativePage != null && nativePage.isPdf(); -- boolean isEligibleForPrint = DeviceInfo.isDesktop() || isPdfPage; -+ boolean isEligibleForPrint = DeviceInfo.isDesktopCromite() || isPdfPage; - - return canShareTab && isPrintingEnabled && isEligibleForPrint; - } 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 -@@ -2014,7 +2014,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -2036,7 +2036,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { } else if (id == R.id.toggle_bookmark_bar) { // isActivityStateBookmarkBarCompatible already checks the flag sAndroidBookmarkBar. if (BookmarkBarUtils.isActivityStateBookmarkBarCompatible(mActivity)) { @@ -654,18 +610,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab // Desktop uses the synced UserPref. BookmarkBarUtils.toggleUserPrefsShowBookmarksBar( mProfileSupplier.get(), /* fromKeyboardShortcut= */ true); -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -714,7 +714,7 @@ public class RootUiCoordinator - mXrSpaceModeObservableSupplier = xrSpaceModeObservableSupplier; - - if (BrowserControlsUtils.doSyncMinHeightWithTotalHeightV2()) { -- if (DeviceInfo.isDesktop() -+ if (DeviceInfo.isDesktopFalse() - || BrowserControlsUtils.doSyncMinHeightWithTotalHeight(mActivity)) { - mTopControlsStacker.setScrollingDisabled(true); - } else if (mDesktopWindowStateManager != null) { diff --git a/chrome/app/extensions_strings.grdp b/chrome/app/extensions_strings.grdp --- a/chrome/app/extensions_strings.grdp +++ b/chrome/app/extensions_strings.grdp @@ -689,7 +633,7 @@ diff --git a/chrome/app/extensions_strings.grdp b/chrome/app/extensions_strings. diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd --- a/chrome/app/theme/theme_resources.grd +++ b/chrome/app/theme/theme_resources.grd -@@ -372,7 +372,7 @@ +@@ -373,7 +373,7 @@ @@ -698,7 +642,7 @@ diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resou -@@ -381,7 +381,7 @@ +@@ -382,7 +382,7 @@ @@ -710,16 +654,7 @@ diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resou diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -4916,7 +4916,7 @@ static_library("browser") { - } - } - -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window" ] - } - -@@ -7644,7 +7644,7 @@ static_library("browser") { +@@ -7625,7 +7625,7 @@ static_library("browser") { deps += [ "//media/mojo/mojom:remoting" ] } @@ -728,7 +663,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn sources += [ "download/download_crx_util_android.cc" ] } -@@ -7958,7 +7958,7 @@ static_library("browser") { +@@ -7943,7 +7943,7 @@ static_library("browser") { # TODO(https://crbug.com/356905053): Add more dependencies here and merge this # block with the `enable_extensions` block above. @@ -737,7 +672,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn sources += [ # TODO(https://crbug.com/356905053): These files are temporary workarounds # allow for a lightweight extensions runtime in desktop-android builds. -@@ -8738,7 +8738,7 @@ static_library("browser_generated_files") { +@@ -8724,7 +8724,7 @@ static_library("browser_generated_files") { [ "//chrome/browser/ui/webui/new_tab_page/foo:mojo_bindings" ] } } @@ -749,7 +684,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn 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 -@@ -369,6 +369,10 @@ +@@ -370,6 +370,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -824,7 +759,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -357,7 +357,7 @@ void BrowserProcessImpl::Init() { +@@ -381,7 +381,7 @@ void BrowserProcessImpl::Init() { // TODO(devlin): Move this block out of BrowserProcessImpl to somewhere like // //chrome/browser/initialize_extensions_browser_client, analogous to // `EnsureExtensionsClientInitialized()` above? @@ -836,24 +771,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc --- a/chrome/browser/chrome_browser_field_trials.cc +++ b/chrome/browser/chrome_browser_field_trials.cc -@@ -124,7 +124,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( - feature_overrides.DisableFeature(features::kEyeDropper); - } - #elif BUILDFLAG(IS_ANDROID) // BUILDFLAG(IS_LINUX) --#if BUILDFLAG(IS_DESKTOP_ANDROID) -+#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - // Nota bene: Anything here is expected to be short-lived, unless deemed too - // risky to launch to non-desktop platforms. New features being added here - // should be the exception, and not the norm. Instead, you should place the -@@ -133,17 +133,17 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( - - // If enabled, then use desktop page webprefs for Android devices that have - // large displays, specifically tablets and desktops. -- feature_overrides.EnableFeature( -- blink::features::kAndroidDesktopWebPrefsLargeDisplays); -+ // feature_overrides.EnableFeature( -+ // blink::features::kAndroidDesktopWebPrefsLargeDisplays); - +@@ -134,11 +134,11 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Enables the caret browsing a11y feature - can use arrow keys to navigate // through web pages. // TODO(crbug.com/369139090): Remove when rollout is complete @@ -867,20 +785,9 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // If enabled, render processes associated only with tabs in unfocused windows // will be downgraded to "vis" priority, rather than remaining at "fg". This -@@ -153,8 +153,8 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( - - // Enables media capture (tab+window+screen sharing). - // TODO(crbug.com/352187279): Remove when tablet rollout is complete. -- feature_overrides.EnableFeature(kAndroidMediaPicker); -- feature_overrides.EnableFeature(features::kUserMediaScreenCapturing); -+ // feature_overrides.EnableFeature(kAndroidMediaPicker); -+ // feature_overrides.EnableFeature(features::kUserMediaScreenCapturing); - - // Enable desktop tab management features. - // TODO(crbug.com/422902625): Remove when rollout is complete to all form -@@ -163,10 +163,10 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( - feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid); - feature_overrides.EnableFeature(features::kSubframeImportance); +@@ -155,10 +155,10 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + // TODO(crbug.com/465596248): Remove when experiment is complete. + feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab); // TODO(crbug.com/422903297): Remove when tablet rollout is complete. - feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); + // feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); @@ -891,7 +798,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // TODO(b/432367402): Use a new Android API to replace this hack with a proper // solution. feature_overrides.EnableFeature(features::kAndroidCaptureKeyEvents); -@@ -175,12 +175,12 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -167,12 +167,12 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( feature_overrides.EnableFeature(features::kAndroidDevToolsFrontend); // TODO(crbug.com/430304112): Remove when rollout is complete to all form // factors. @@ -908,7 +815,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // TODO(crbug.com/445446479): Remove when rollout is complete to all form // factors. feature_overrides.EnableFeature( -@@ -188,13 +188,13 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -180,13 +180,13 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Bypass the WebAudio output buffer, to reduce audio latency. // TODO(crbug.com/436988695): Remove when the long term solution is // implemented. @@ -927,7 +834,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enables automatic picture-in-picture. // TODO(crbug.com/421608904): Remove when rollout is complete to all form // factors. -@@ -205,58 +205,58 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -197,43 +197,43 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( feature_overrides.EnableFeature(media::kContextMenuPictureInPictureAndroid); // Disables the enhanced pip transition and uses the default animation. // TODO(crbug.com/440384447): Remove when enhanced pip transition is fixed. @@ -935,23 +842,12 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro + // feature_overrides.DisableFeature(media::kAllowEnhancedPipTransition); // Enable by default for desktop platforms, pending a phone / foldable / // tablet rollout using the same flag. - // TODO(crbug.com/413776899): Remove when rollout on other form factors is - // complete. -- feature_overrides.EnableFeature(chrome::android::kInstanceSwitcherV2); -+ // feature_overrides.EnableFeature(chrome::android::kInstanceSwitcherV2); // TODO(crbug.com/442327273): Remove when rollout is complete to all form // factors. - feature_overrides.EnableFeature( - autofill::features::kAutofillAndroidDesktopKeyboardAccessoryRevamp); + // feature_overrides.EnableFeature( + // autofill::features::kAutofillAndroidDesktopKeyboardAccessoryRevamp); - // TODO(crbug.com/444486763): Remove when rollout is complete to all form - // factors. -- feature_overrides.EnableFeature(chrome::android::kAndroidTabHighlighting); -+ // feature_overrides.EnableFeature(chrome::android::kAndroidTabHighlighting); - // TODO(b/441672693): Remove when the feature is stable on other form factors. -- feature_overrides.EnableFeature(features::kAndroidAudioDeviceListener); -+ // feature_overrides.EnableFeature(features::kAndroidAudioDeviceListener); // Enable by default for desktop platforms, pending a tablet rollout using the // same flag. // TODO(crbug.com/445475304): Remove when tablet rollout is complete. @@ -965,17 +861,6 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro + // feature_overrides.EnableFeature( + // chrome::android::kAndroidPinnedTabsTabletTabStrip); - // Three flags are required for the bookmarks bar feature. - // TODO(crbug.com/430059235): Remove once feature is launched to 100% on all -- // form factors. -- feature_overrides.EnableFeature(chrome::android::kAndroidBookmarkBar); -- feature_overrides.EnableFeature(chrome::android::kAndroidAppearanceSettings); -- feature_overrides.EnableFeature(chrome::android::kTopControlsRefactor); -+ // // form factors. -+ // feature_overrides.EnableFeature(chrome::android::kAndroidBookmarkBar); -+ // feature_overrides.EnableFeature(chrome::android::kAndroidAppearanceSettings); -+ // feature_overrides.EnableFeature(chrome::android::kTopControlsRefactor); - // Enable ANGLE/Vulkan features. // TODO (crbug.com//376280554): Enable these features with runtime checks // instead. @@ -1009,7 +894,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enable the ability for extensions to override chrome pages. // TODO(crbug.com/404069963): Remove flag when the feature is verified to be -@@ -275,7 +275,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -250,7 +250,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Enables the ability to specify a platform-specific zoom scaling that will // apply transparently to all pages. // TODO(crbug.com/450281745): Remove once feature is enabled by default. @@ -1042,7 +927,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -4270,7 +4270,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate( +@@ -4263,7 +4263,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate( // TODO(wenz): This should instead proceed with the selected certificate // when there are matching certificates in the OS. #if BUILDFLAG(ENABLE_EXTENSIONS) && \ @@ -1051,7 +936,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch if (matching_certificates.empty() && nonmatching_certificates.empty()) { extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); -@@ -4499,7 +4499,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( +@@ -4492,7 +4492,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // Fill font preferences. These are not registered on Android unless we're built // with extensions (the chrome.fontSettings API can change these). // - http://crbug.com/308033, http://crbug.com/696364. @@ -1063,7 +948,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn --- a/chrome/browser/devtools/BUILD.gn +++ b/chrome/browser/devtools/BUILD.gn -@@ -345,7 +345,7 @@ static_library("devtools") { +@@ -347,7 +347,7 @@ static_library("devtools") { } } @@ -1075,7 +960,7 @@ diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc --- a/chrome/browser/download/chrome_download_manager_delegate.cc +++ b/chrome/browser/download/chrome_download_manager_delegate.cc -@@ -742,7 +742,7 @@ bool ChromeDownloadManagerDelegate::DetermineDownloadTarget( +@@ -743,7 +743,7 @@ bool ChromeDownloadManagerDelegate::DetermineDownloadTarget( DownloadPathReservationTracker::FilenameConflictAction action = kDefaultPlatformConflictAction; #if BUILDFLAG(IS_ANDROID) @@ -1096,7 +981,7 @@ diff --git a/chrome/browser/download/download_offline_content_provider.cc b/chro #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/download/download_core_service_factory.h" #endif -@@ -490,7 +490,7 @@ void DownloadOfflineContentProvider::OnDownloadUpdated(DownloadItem* item) { +@@ -489,7 +489,7 @@ void DownloadOfflineContentProvider::OnDownloadUpdated(DownloadItem* item) { return; } @@ -1108,7 +993,7 @@ diff --git a/chrome/browser/download/download_offline_content_provider.cc b/chro diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn -@@ -1735,7 +1735,7 @@ source_set("chrome_extensions_browser_client") { +@@ -1727,7 +1727,7 @@ source_set("chrome_extensions_browser_client") { "//extensions/browser/updater:keepalive", ] @@ -1117,7 +1002,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL sources += [ "chrome_extensions_browser_client_android.cc" ] deps += [ -@@ -1750,6 +1750,16 @@ source_set("chrome_extensions_browser_client") { +@@ -1742,6 +1742,16 @@ source_set("chrome_extensions_browser_client") { "//extensions/browser", "//extensions/browser/kiosk", ] @@ -1149,7 +1034,7 @@ diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client_android. diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc --- a/chrome/browser/extensions/extension_management.cc +++ b/chrome/browser/extensions/extension_management.cc -@@ -178,8 +178,12 @@ ManagedInstallationMode ExtensionManagement::GetInstallationMode( +@@ -176,8 +176,12 @@ ManagedInstallationMode ExtensionManagement::GetInstallationMode( update_url ? *update_url : std::string()); } @@ -1163,7 +1048,7 @@ diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/ // If Finch has enabled extensions for corp, allow them. if (base::FeatureList::IsEnabled( extensions_features::kEnableExtensionsForCorpDesktopAndroid)) { -@@ -202,7 +206,7 @@ bool ExtensionManagement::ExtensionsEnabledForDesktopAndroid() const { +@@ -200,7 +204,7 @@ bool ExtensionManagement::ExtensionsEnabledForDesktopAndroid() const { ManagedInstallationMode ExtensionManagement::GetInstallationMode( const ExtensionId& extension_id, const std::string& update_url) { @@ -1175,9 +1060,9 @@ diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/ diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h --- a/chrome/browser/extensions/extension_management.h +++ b/chrome/browser/extensions/extension_management.h -@@ -107,7 +107,7 @@ class ExtensionManagement : public KeyedService, - // from the command line, or when loaded as an unpacked extension). - bool BlocklistedByDefault() const; +@@ -103,7 +103,7 @@ class ExtensionManagement : public KeyedService, + const std::vector>& GetProviders() + const; -#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) +#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) @@ -1278,7 +1163,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse BASE_FEATURE(kMediaRouter, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kCastAllowAllIPsFeature, "CastAllowAllIPs", -@@ -87,7 +87,7 @@ base::flat_map& GetStoredPrefValues() { +@@ -82,7 +82,7 @@ base::flat_map& GetStoredPrefValues() { return *stored_pref_values; } @@ -1287,7 +1172,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse // TODO(mfoltz): Add full implementation for validating playout delay value. bool IsValidMirroringPlayoutDelayMs(int delay_ms) { return delay_ms <= 1000 && delay_ms >= 1; -@@ -102,7 +102,7 @@ void ClearMediaRouterStoredPrefsForTesting() { +@@ -97,7 +97,7 @@ void ClearMediaRouterStoredPrefsForTesting() { bool MediaRouterEnabled(content::BrowserContext* context) { if ((true)) return false; @@ -1296,7 +1181,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse if (!base::FeatureList::IsEnabled(kMediaRouter)) { return false; } -@@ -137,7 +137,7 @@ bool MediaRouterEnabled(content::BrowserContext* context) { +@@ -132,7 +132,7 @@ bool MediaRouterEnabled(content::BrowserContext* context) { return true; } @@ -1329,7 +1214,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager.cc b/chrome/br bool enabled = false; #else bool enabled = true; -@@ -463,7 +463,7 @@ WebRtcEventLogManager::CreateRemoteLogFileWriterFactory() { +@@ -465,7 +465,7 @@ WebRtcEventLogManager::CreateRemoteLogFileWriterFactory() { if (remote_log_file_writer_factory_for_testing_) { return std::move(remote_log_file_writer_factory_for_testing_); } else { @@ -1353,7 +1238,7 @@ diff --git a/chrome/browser/policy/policy_value_and_status_aggregator.cc b/chrom 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 -@@ -659,7 +659,7 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -649,7 +649,7 @@ void ChromeBrowserMainExtraPartsProfiles:: chromeos_extensions::EnsureBrowserContextKeyedServiceFactoriesBuilt(); #endif extensions::EnsureBrowserContextKeyedServiceFactoriesBuilt(); @@ -1398,7 +1283,7 @@ diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/bro diff --git a/chrome/browser/profiles/profile_destroyer.cc b/chrome/browser/profiles/profile_destroyer.cc --- a/chrome/browser/profiles/profile_destroyer.cc +++ b/chrome/browser/profiles/profile_destroyer.cc -@@ -28,7 +28,7 @@ namespace { +@@ -29,7 +29,7 @@ namespace { #if BUILDFLAG(IS_ANDROID) // Set the render host waiting time to 5s on Android, that's the same // as an "Application Not Responding" timeout. @@ -1410,7 +1295,7 @@ diff --git a/chrome/browser/profiles/profile_destroyer.cc b/chrome/browser/profi 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 -@@ -126,7 +126,7 @@ group("resources") { +@@ -127,7 +127,7 @@ group("resources") { ] } @@ -1543,7 +1428,7 @@ diff --git a/chrome/browser/startup_data.cc b/chrome/browser/startup_data.cc #include "chrome/browser/extensions/chrome_extensions_browser_client.h" #include "extensions/browser/extensions_browser_client.h" #endif -@@ -163,7 +163,7 @@ StartupData::TakeProtoDatabaseProvider() { +@@ -167,7 +167,7 @@ StartupData::TakeProtoDatabaseProvider() { void StartupData::PreProfilePrefServiceInit() { pref_registry_ = base::MakeRefCounted(); @@ -1552,7 +1437,7 @@ diff --git a/chrome/browser/startup_data.cc b/chrome/browser/startup_data.cc // On desktop Android the ExtensionsBrowserClient is created here because it // must be initialized before BrowserContextKeyedServiceFactories are built. // Some factories use ExtensionsBrowserClient::Get() in their DependsOn(). -@@ -243,7 +243,7 @@ void StartupData::CreateServicesInternal() { +@@ -248,7 +248,7 @@ void StartupData::CreateServicesInternal() { } #endif @@ -1606,25 +1491,16 @@ diff --git a/chrome/browser/task_manager/common/task_manager_features.cc b/chrom 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 -@@ -672,7 +672,7 @@ static_library("ui") { - "//v8:v8_version", - ] +@@ -681,7 +681,7 @@ static_library("ui") { + } -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - sources += [ - "browser_navigator.h", - "incognito_allowed_url.cc", -@@ -687,7 +687,7 @@ static_library("ui") { - ] - - # Desktop-Android-only dependencies. -- if (is_desktop_android) { -+ if (is_desktop_android_cromite) { - sources += [ "//chrome/browser/ui/android/browser_navigator_android.cc" ] - deps += [ - "//chrome/browser/ui/android/extensions/windowing/internal", -@@ -2912,7 +2912,7 @@ static_library("ui") { + # Desktop-Android-only dependencies. +- if (is_desktop_android) { ++ if (is_desktop_android_cromite) { + deps += [ "//chrome/browser/ui/android/extensions/windowing/internal" ] + } + if (is_android) { +@@ -2921,7 +2921,7 @@ static_library("ui") { allow_circular_includes_from += [ "//chrome/browser/ui/wallet" ] } @@ -1645,7 +1521,7 @@ diff --git a/chrome/browser/ui/android/context_menu_helper.cc b/chrome/browser/u #include "chrome/browser/extensions/extension_menu_model_android.h" #include "ui/menus/simple_menu_model.h" #endif // BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) -@@ -45,7 +45,7 @@ ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents) +@@ -44,7 +44,7 @@ ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents) } ContextMenuHelper::~ContextMenuHelper() { @@ -1654,7 +1530,7 @@ diff --git a/chrome/browser/ui/android/context_menu_helper.cc b/chrome/browser/u extension_menu_model_.reset(); #endif // BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) JNIEnv* env = base::android::AttachCurrentThread(); -@@ -59,7 +59,7 @@ void ContextMenuHelper::ShowContextMenu( +@@ -58,7 +58,7 @@ void ContextMenuHelper::ShowContextMenu( context_menu_params_ = params; gfx::NativeView view = GetWebContents().GetNativeView(); @@ -1663,7 +1539,7 @@ diff --git a/chrome/browser/ui/android/context_menu_helper.cc b/chrome/browser/u // Reset any previous menu model, in case a new menu is shown // before the old one was gracefully closed. extension_menu_model_.reset(); -@@ -82,11 +82,17 @@ void ContextMenuHelper::ShowContextMenu( +@@ -81,11 +81,17 @@ void ContextMenuHelper::ShowContextMenu( } void ContextMenuHelper::DismissContextMenu() { @@ -1726,7 +1602,7 @@ diff --git a/chrome/browser/ui/android/desktop_site/java/src/org/chromium/chrome diff --git a/chrome/browser/ui/android/extensions/BUILD.gn b/chrome/browser/ui/android/extensions/BUILD.gn --- a/chrome/browser/ui/android/extensions/BUILD.gn +++ b/chrome/browser/ui/android/extensions/BUILD.gn -@@ -78,8 +78,8 @@ if (enable_extensions_core) { +@@ -82,8 +82,8 @@ if (enable_extensions_core) { # BuildConfig. java_cpp_template("generate_buildflags") { sources = [ "java/templates/ExtensionsBuildflags.template" ] @@ -1748,14 +1624,14 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ +#include "base/task/thread_pool.h" #include "chrome/browser/extensions/extension_action_runner.h" #include "chrome/browser/profiles/profile.h" - #include "chrome/browser/ui/android/extensions/extension_actions_bridge_factory.h" + #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/extensions/icon_with_badge_image_source.h" #include "content/public/browser/web_contents.h" +#include "extensions/common/constants.h" #include "extensions/browser/extension_action.h" #include "extensions/browser/extension_action_manager.h" #include "extensions/browser/extension_registry.h" -@@ -203,6 +206,26 @@ ExtensionAction::ShowAction ExtensionActionsBridge::RunAction( +@@ -198,6 +201,26 @@ ExtensionAction::ShowAction ExtensionActionsBridge::RunAction( return runner->RunAction(extension, /*grant_tab_permissions=*/true); } @@ -1785,7 +1661,7 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/chrome/browser/ui/android/extensions/extension_actions_bridge.h --- a/chrome/browser/ui/android/extensions/extension_actions_bridge.h +++ b/chrome/browser/ui/android/extensions/extension_actions_bridge.h -@@ -53,6 +53,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer, +@@ -52,6 +52,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer { const ToolbarActionsModel::ActionId& action_id, int tab_id, content::WebContents* web_contents); @@ -1842,7 +1718,7 @@ diff --git a/chrome/browser/ui/android/extensions/java/res/values/dimens.xml b/c diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java --- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java +++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java -@@ -240,6 +240,10 @@ public class ExtensionActionsBridge { +@@ -241,6 +241,10 @@ public class ExtensionActionsBridge implements Destroyable { void onActionIconUpdated(String actionId); } @@ -1853,7 +1729,7 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b @NativeMethods public interface Natives { boolean extensionsEnabled(@JniType("Profile*") Profile profile); -@@ -272,6 +276,8 @@ public class ExtensionActionsBridge { +@@ -275,6 +279,8 @@ public class ExtensionActionsBridge implements Destroyable { int tabId, @JniType("content::WebContents*") WebContents webContents); @@ -1908,52 +1784,22 @@ new file mode 100644 + Enable experimental support for extensions in Android + + -diff --git a/chrome/browser/ui/android/tab_model/BUILD.gn b/chrome/browser/ui/android/tab_model/BUILD.gn ---- a/chrome/browser/ui/android/tab_model/BUILD.gn -+++ b/chrome/browser/ui/android/tab_model/BUILD.gn -@@ -67,7 +67,7 @@ source_set("impl") { - "//ui/base:types", - ] - -- if (is_desktop_android) { -+ if (is_desktop_android_cromite) { - deps += [ - "//chrome/browser/ui/browser_window", - "//chrome/browser/ui/browser_window/internal", -@@ -97,7 +97,7 @@ source_set("test_support") { - "//chrome/browser/ui/android/tab_model", - ] - -- if (is_desktop_android) { -+ if (is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window" ] - } - } diff --git a/chrome/browser/ui/android/tab_model/tab_model.cc b/chrome/browser/ui/android/tab_model/tab_model.cc --- a/chrome/browser/ui/android/tab_model/tab_model.cc +++ b/chrome/browser/ui/android/tab_model/tab_model.cc -@@ -20,7 +20,7 @@ - #include "components/sync_sessions/session_sync_service.h" - #include "ui/base/unowned_user_data/scoped_unowned_user_data.h" - --#if BUILDFLAG(IS_DESKTOP_ANDROID) -+#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" // nogncheck - #endif - -@@ -53,7 +53,7 @@ sync_sessions::OpenTabsUIDelegate* GetOpenTabsUIDelegate(Profile* profile) { +@@ -46,7 +46,7 @@ sync_sessions::OpenTabsUIDelegate* GetOpenTabsUIDelegate(Profile* profile) { // TODO(http://crbug.com/444518651): remove the if-def when - // |BrowserWindowInterface| is compiled into all Android builds. + // |BrowserWindowInterface| is compiled and running on all Android builds. SessionID GetInitialSessionId() { -#if BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) return SessionID::InvalidValue(); #else return SessionID::NewUnique(); -@@ -162,7 +162,7 @@ void TabModel::RecordActualSyncedTabsHistogram() { +@@ -155,7 +155,7 @@ void TabModel::RecordActualSyncedTabsHistogram() { // TODO(http://crbug.com/444518651): remove the if-def when - // |BrowserWindowInterface| is compiled into all Android builds. + // |BrowserWindowInterface| is compiled and running on all Android builds. -#if BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) void TabModel::SetSessionId(SessionID session_id) { @@ -1962,7 +1808,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model.cc b/chrome/browser/u diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h --- a/chrome/browser/ui/android/tab_model/tab_model.h +++ b/chrome/browser/ui/android/tab_model/tab_model.h -@@ -292,7 +292,7 @@ class TabModel : public TabListInterface { +@@ -301,7 +301,7 @@ class TabModel : public TabListInterface { LocationBarModel* GetLocationBarModel(); @@ -1974,7 +1820,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc --- a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc +++ b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc -@@ -45,7 +45,7 @@ +@@ -49,7 +49,7 @@ // "chrome/browser/ui/browser_window" is available on desktop Android, but not // other Android builds. @@ -1983,7 +1829,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom #include "chrome/browser/ui/browser_window/internal/android/android_browser_window.h" // nogncheck #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" // nogncheck #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" // nogncheck -@@ -78,7 +78,7 @@ std::vector GetAllTabsFromHandles( +@@ -86,7 +86,7 @@ std::vector GetAllTabsFromHandles(const Container& handles) { return tabs; } @@ -1992,7 +1838,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom AndroidBrowserWindow* GetAndroidBrowserWindow(SessionID session_id) { for (BrowserWindowInterface* window : GetAllBrowserWindowInterfaces()) { if (window->GetSessionID() == session_id) { -@@ -117,7 +117,7 @@ void TabModelJniBridge::AssociateWithBrowserWindow( +@@ -125,7 +125,7 @@ void TabModelJniBridge::AssociateWithBrowserWindow( long native_android_browser_window) { // BrowserWindowInterface is available on desktop Android, but not other Android // builds. For non-desktop Android, this function should be a no-op. @@ -2001,7 +1847,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom BrowserWindowInterface* android_browser_window = reinterpret_cast(native_android_browser_window); CHECK(android_browser_window != nullptr); -@@ -153,7 +153,7 @@ void TabModelJniBridge::MoveTabToWindowForTesting( +@@ -161,7 +161,7 @@ void TabModelJniBridge::MoveTabToWindowForTesting( TabAndroid* tab, long android_browser_window_ptr, int new_index) { @@ -2010,7 +1856,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom SessionID destination_window_id = reinterpret_cast(android_browser_window_ptr) ->GetSessionID(); -@@ -168,7 +168,7 @@ void TabModelJniBridge::MoveTabGroupToWindowForTesting( +@@ -176,7 +176,7 @@ void TabModelJniBridge::MoveTabGroupToWindowForTesting( const base::Token& group_id, long android_browser_window_ptr, int new_index) { @@ -2019,7 +1865,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom SessionID destination_window_id = reinterpret_cast(android_browser_window_ptr) ->GetSessionID(); -@@ -633,7 +633,7 @@ void TabModelJniBridge::MoveTabGroupToWindow(tab_groups::TabGroupId group_id, +@@ -766,7 +766,7 @@ void TabModelJniBridge::MoveTabGroupToWindow(tab_groups::TabGroupId group_id, ScopedJavaLocalRef TabModelJniBridge::GetActivityForWindow( SessionID window_id) { ScopedJavaLocalRef jactivity; @@ -2031,7 +1877,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom diff --git a/chrome/browser/ui/android/tab_model/tab_model_test_helper.h b/chrome/browser/ui/android/tab_model/tab_model_test_helper.h --- a/chrome/browser/ui/android/tab_model/tab_model_test_helper.h +++ b/chrome/browser/ui/android/tab_model/tab_model_test_helper.h -@@ -105,7 +105,7 @@ class TestTabModel : public TabModel { +@@ -120,7 +120,7 @@ class TestTabModel : public TabModel { // BrowserWindowInterface is available on desktop Android, but not other Android // builds. @@ -2092,7 +1938,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import android.view.ViewStub; import android.widget.LinearLayout; -@@ -22,6 +23,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; +@@ -19,6 +20,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; @@ -2100,7 +1946,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.ui.base.WindowAndroid; -@@ -54,6 +56,11 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina +@@ -45,6 +47,11 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina extensionToolbarStub.setLayoutResource(R.layout.extension_toolbar_container); LinearLayout container = (LinearLayout) extensionToolbarStub.inflate(); @@ -2112,9 +1958,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mExtensionActionListCoordinator = new ExtensionActionListCoordinator( context, -@@ -71,7 +78,8 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina - taskSupplier, - profileSupplier, +@@ -59,7 +66,8 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + themeColorProvider, + task, currentTabSupplier, - tabCreator); + tabCreator, @@ -2125,7 +1971,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/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java -@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; +@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.toolbar.MenuBuilderHelper; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; @@ -2133,17 +1979,17 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.chrome.browser.ui.theme.BrandedColorScheme; import org.chromium.components.embedder_support.util.UrlConstants; -@@ -86,7 +87,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { - OneshotSupplier taskSupplier, - ObservableSupplier<@Nullable Profile> profileSupplier, - ObservableSupplier<@Nullable Tab> currentTabSupplier, +@@ -76,7 +77,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { + ThemeColorProvider themeColorProvider, + ChromeAndroidTask task, + NullableObservableSupplier currentTabSupplier, - TabCreator tabCreator) { + TabCreator tabCreator, + ExtensionActionListCoordinator extensionActionListCoordinator) { mContext = context; mCurrentTabSupplier = currentTabSupplier; mTabCreator = tabCreator; -@@ -129,6 +131,21 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -117,6 +119,21 @@ public class ExtensionsMenuCoordinator implements Destroyable { } }; @@ -2165,7 +2011,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mMediator = new ExtensionsMenuMediator( mContext, -@@ -137,35 +154,14 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -124,30 +141,9 @@ public class ExtensionsMenuCoordinator implements Destroyable { mCurrentTabSupplier, mExtensionModels, () -> { @@ -2192,11 +2038,6 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow - mShouldShowMenuOnInit = false; - } }, - (extensionsSupported) -> { - int visibility = extensionsSupported ? View.VISIBLE : View.GONE; - mExtensionsMenuButton.setVisibility(visibility); - mExtensionsMenuTabSwitcherDivider.setVisibility(visibility); - }, - mExtensionsMenuButton.getRootView()); + mExtensionsMenuButton.getRootView(), + extensionActionListCoordinator); @@ -2234,35 +2075,36 @@ 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/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java -@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.extensions.ContextMenuSource; - import org.chromium.chrome.browser.profiles.Profile; +@@ -15,6 +15,7 @@ import org.chromium.build.annotations.NullMarked; + import org.chromium.chrome.browser.extensions.ContextMenuSource; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; +import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator; import org.chromium.chrome.browser.ui.extensions.ExtensionAction; import org.chromium.chrome.browser.ui.extensions.ExtensionActionContextMenuBridge; import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; -@@ -44,6 +45,7 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -37,6 +38,7 @@ class ExtensionsMenuMediator implements Destroyable { + private final Runnable mOnUpdateFinishedRunnable; private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; - private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated; private final View mRootView; + private final ExtensionActionListCoordinator mExtensionActionListCoordinator; public ExtensionsMenuMediator( Context context, -@@ -53,8 +55,10 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -44,9 +46,10 @@ class ExtensionsMenuMediator implements Destroyable { + NullableObservableSupplier currentTabSupplier, ModelList extensionModels, Runnable onUpdateFinishedRunnable, - Callback onExtensionsAvailableCallback, - View rootView) { + View rootView, + ExtensionActionListCoordinator extensionActionListCoordinator) { - mTaskSupplier = taskSupplier; + mTask = task; +- + mExtensionActionListCoordinator = extensionActionListCoordinator; - mProfileSupplier = profileSupplier; - mProfileSupplier.addObserver(mProfileUpdatedCallback); - -@@ -164,6 +168,9 @@ class ExtensionsMenuMediator implements Destroyable { + mOnUpdateFinishedRunnable = onUpdateFinishedRunnable; + mContext = context; + mRootView = rootView; +@@ -136,6 +139,9 @@ class ExtensionsMenuMediator implements Destroyable { new PropertyModel.Builder(ExtensionsMenuItemProperties.ALL_KEYS) .with(ExtensionsMenuItemProperties.TITLE, action.getTitle()) .with(ExtensionsMenuItemProperties.ICON, icon) @@ -2272,76 +2114,10 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow .with( ExtensionsMenuItemProperties.CLICK_LISTENER, (view) -> onPrimaryClick((ListMenuButton) view, actionId)) -diff --git a/chrome/browser/ui/browser_navigator_params.cc b/chrome/browser/ui/browser_navigator_params.cc ---- a/chrome/browser/ui/browser_navigator_params.cc -+++ b/chrome/browser/ui/browser_navigator_params.cc -@@ -17,7 +17,7 @@ - #include "chrome/browser/ui/browser.h" - #endif - --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" // nogncheck - #endif - -@@ -30,7 +30,7 @@ NavigateParams::NavigateParams(std::unique_ptr contents_to_insert) - : contents_to_insert(std::move(contents_to_insert)) {} - #endif - --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - NavigateParams::NavigateParams(BrowserWindowInterface* a_browser, - const GURL& a_url, - ui::PageTransition a_transition) -diff --git a/chrome/browser/ui/browser_navigator_params.h b/chrome/browser/ui/browser_navigator_params.h ---- a/chrome/browser/ui/browser_navigator_params.h -+++ b/chrome/browser/ui/browser_navigator_params.h -@@ -76,7 +76,7 @@ struct NavigateParams { - std::unique_ptr contents_to_insert); - #endif - --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - NavigateParams(BrowserWindowInterface* a_browser, - const GURL& a_url, - ui::PageTransition a_transition); -@@ -263,7 +263,7 @@ struct NavigateParams { - }; - PathBehavior path_behavior = RESPECT; - --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - // [in] Specifies a BrowserWindowInterface object where the navigation - // could occur or the tab could be added. Navigate() is not obliged to - // use this BrowserWindowInterface if it is not compatible with the -diff --git a/chrome/browser/ui/browser_window/BUILD.gn b/chrome/browser/ui/browser_window/BUILD.gn ---- a/chrome/browser/ui/browser_window/BUILD.gn -+++ b/chrome/browser/ui/browser_window/BUILD.gn -@@ -4,7 +4,7 @@ - - import("//chrome/common/features.gni") - --assert(is_win || is_mac || is_linux || is_chromeos || is_desktop_android) -+assert(is_win || is_mac || is_linux || is_chromeos || is_desktop_android_cromite) - - # This is the public interface for a browser window. Most features in - # //chrome/browser depend on this interface, and thus to prevent circular -diff --git a/chrome/browser/ui/browser_window/internal/BUILD.gn b/chrome/browser/ui/browser_window/internal/BUILD.gn ---- a/chrome/browser/ui/browser_window/internal/BUILD.gn -+++ b/chrome/browser/ui/browser_window/internal/BUILD.gn -@@ -4,7 +4,7 @@ - - import("//chrome/common/features.gni") - --assert(is_win || is_mac || is_linux || is_chromeos || is_desktop_android) -+assert(is_win || is_mac || is_linux || is_chromeos || is_desktop_android_cromite) - - source_set("internal") { - sources = [ "create_browser_window.cc" ] diff --git a/chrome/browser/ui/prefs/BUILD.gn b/chrome/browser/ui/prefs/BUILD.gn --- a/chrome/browser/ui/prefs/BUILD.gn +++ b/chrome/browser/ui/prefs/BUILD.gn -@@ -67,7 +67,7 @@ source_set("impl") { +@@ -65,7 +65,7 @@ source_set("impl") { } } @@ -2350,7 +2126,7 @@ diff --git a/chrome/browser/ui/prefs/BUILD.gn b/chrome/browser/ui/prefs/BUILD.gn source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] -@@ -85,7 +85,7 @@ if (!is_android || enable_desktop_android_extensions) { +@@ -83,7 +83,7 @@ if (!is_android || enable_desktop_android_extensions) { "//third_party/blink/public/common:headers", ] @@ -2398,43 +2174,10 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre RegisterFontFamilyPrefs(registry, fonts_with_defaults); registry->RegisterIntegerPref(prefs::kWebKitDefaultFontSize, 16); -diff --git a/chrome/browser/ui/tabs/tab_list_interface.h b/chrome/browser/ui/tabs/tab_list_interface.h ---- a/chrome/browser/ui/tabs/tab_list_interface.h -+++ b/chrome/browser/ui/tabs/tab_list_interface.h -@@ -18,7 +18,7 @@ - - // BrowserWindowInterface is available on desktop Android, but not other Android - // builds. --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - class BrowserWindowInterface; - #endif - -@@ -35,7 +35,7 @@ class TabListInterface { - TabListInterface(const TabListInterface& other) = delete; - void operator=(const TabListInterface& other) = delete; - --#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID) -+#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) - // Returns the TabListInterface associated with the given `browser`. - static TabListInterface* From(BrowserWindowInterface* browser); - #endif -diff --git a/chrome/browser/ui/webid/BUILD.gn b/chrome/browser/ui/webid/BUILD.gn ---- a/chrome/browser/ui/webid/BUILD.gn -+++ b/chrome/browser/ui/webid/BUILD.gn -@@ -37,7 +37,7 @@ source_set("webid") { - "//ui/base", - ] - -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window" ] - } - } 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 -@@ -181,7 +181,7 @@ +@@ -182,7 +182,7 @@ // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2443,7 +2186,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #include "chrome/browser/ui/webui/discards/discards_ui.h" #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID) -@@ -414,7 +414,7 @@ void RegisterChromeWebUIConfigs() { +@@ -415,7 +415,7 @@ void RegisterChromeWebUIConfigs() { // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2506,7 +2249,7 @@ diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni -@@ -513,7 +513,7 @@ template("chrome_extra_paks") { +@@ -512,7 +512,7 @@ template("chrome_extra_paks") { deps += [ "//chrome/browser/resources/app_settings:resources" ] } @@ -2542,7 +2285,7 @@ diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extensions/api/api_sources.gni --- a/chrome/common/extensions/api/api_sources.gni +++ b/chrome/common/extensions/api/api_sources.gni -@@ -66,6 +66,13 @@ uncompiled_sources_ = [ +@@ -68,6 +68,13 @@ uncompiled_sources_ = [ "top_sites.json", ] @@ -2553,7 +2296,7 @@ diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extens + ] +} + - # Some APIs (e.g. cookies) rely on types and headers from other APIs. + # Some APIs rely on types and headers from other APIs. types_only_schema_sources_ = [] diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc @@ -2571,7 +2314,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h -@@ -566,7 +566,7 @@ inline constexpr char kChromeUIOsUrlAppURL[] = "chrome://internal/"; +@@ -562,7 +562,7 @@ inline constexpr char kChromeUIOsUrlAppURL[] = "chrome://internal/"; #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2614,7 +2357,7 @@ diff --git a/chrome/renderer/sandbox_status_extension_android.h b/chrome/rendere diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -364,7 +364,7 @@ static_library("test_support") { +@@ -366,7 +366,7 @@ static_library("test_support") { ] } @@ -2623,7 +2366,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn public_deps += [ "//extensions/browser:test_support", "//extensions/common:test_support", -@@ -477,7 +477,7 @@ static_library("test_support") { +@@ -479,7 +479,7 @@ static_library("test_support") { # TODO(https://crbug.com/356905053): Continue pulling more common test # support pieces into here and eventually merge this with the # `enable_extensions` block above. @@ -2632,7 +2375,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn deps += [ "//chrome/renderer/extensions" ] public_deps += [ -@@ -1535,7 +1535,7 @@ source_set("platform_browser_tests") { +@@ -1555,7 +1555,7 @@ source_set("platform_browser_tests") { sources += [ "../browser/enterprise/remote_commands/user_remote_commands_service_browsertest.cc" ] } @@ -2641,7 +2384,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn deps += [ "//chrome/browser/ui/prefs:browser_tests" ] } -@@ -1788,7 +1788,7 @@ source_set("platform_browser_tests") { +@@ -1827,7 +1827,7 @@ source_set("platform_browser_tests") { "//chrome/browser/ui/browser_window", ] } @@ -2650,16 +2393,16 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn sources += [ "../browser/devtools/global_confirm_info_bar_browsertest.cc" ] } -@@ -2074,7 +2074,7 @@ if (is_android) { - +@@ -2120,7 +2120,7 @@ if (is_android) { extra_args = [] + # TODO(crbug.com/473636857): Include once all Android builds correctly use BrowserWindowInterface. - if (is_desktop_android) { + if (is_desktop_android_cromite) { sources += [ "../browser/ui/android/browser_navigator_android_browsertest.cc" ] - deps += [ -@@ -2175,7 +2175,7 @@ if (is_android) { + deps += +@@ -2214,7 +2214,7 @@ if (is_android) { ] } @@ -2668,15 +2411,10 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn sources += [ # These API tests can't be part of platform_browser_tests because they # run in interactive_ui_tests on Win/Mac/Linux. -@@ -8060,11 +8060,11 @@ test("unit_tests") { +@@ -8109,7 +8109,7 @@ test("unit_tests") { deps += [ "//chrome/browser/android/extensions:android" ] } -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window/internal:unit_tests" ] - } - - if (is_desktop_android) { + if (is_desktop_android_cromite) { deps += [ @@ -2693,8 +2431,8 @@ diff --git a/chrome/version.gni b/chrome/version.gni + if (is_desktop_android_false) { _version_dictionary_template += "chrome_desktop_version_code = \"@CHROME_DESKTOP_VERSION_CODE@\" " - _version_dictionary_template += -@@ -383,7 +383,7 @@ if (is_android) { + _version_dictionary_template += "chrome_desktop_beta_version_code = \"@CHROME_DESKTOP_BETA_VERSION_CODE@\" " +@@ -384,7 +384,7 @@ if (is_android) { } else { true_true_true_true = trichrome_64_32_version_code } @@ -2706,7 +2444,7 @@ diff --git a/chrome/version.gni b/chrome/version.gni diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc --- a/components/content_settings/core/browser/host_content_settings_map.cc +++ b/components/content_settings/core/browser/host_content_settings_map.cc -@@ -329,6 +329,12 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -328,6 +328,12 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, RecordExceptionMetrics(); } @@ -2888,18 +2626,6 @@ diff --git a/components/policy/core/common/policy_merger.cc b/components/policy/ : policies_to_merge_(std::move(policies_to_merge)){} #else : policies_to_merge_(std::move(policies_to_merge)), -diff --git a/components/variations/service/variations_service_client.cc b/components/variations/service/variations_service_client.cc ---- a/components/variations/service/variations_service_client.cc -+++ b/components/variations/service/variations_service_client.cc -@@ -48,7 +48,7 @@ version_info::Channel VariationsServiceClient::GetChannelForVariations() { - // TODO(crbug.com/389565104): Remove this if block when ready to move desktop - // to stable builds. - if (channel == version_info::Channel::STABLE && -- base::android::device_info::is_desktop()) { -+ base::android::device_info::is_desktop_false()) { - return version_info::Channel::DEV; - } - #endif diff --git a/components/webapps/browser/installable/installable_icon_fetcher.cc b/components/webapps/browser/installable/installable_icon_fetcher.cc --- a/components/webapps/browser/installable/installable_icon_fetcher.cc +++ b/components/webapps/browser/installable/installable_icon_fetcher.cc @@ -2978,7 +2704,7 @@ diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/cont application_state_has_running_activities_ = true; app_status_listener_ = base::android::ApplicationStatusListener::New(base::BindRepeating( -@@ -951,7 +951,7 @@ VideoCaptureManager::GetOrCreateController( +@@ -953,7 +953,7 @@ VideoCaptureManager::GetOrCreateController( return new_controller; } @@ -2999,7 +2725,7 @@ diff --git a/content/browser/renderer_host/media/video_capture_manager.h b/conte #include "base/android/application_status_listener.h" #endif -@@ -208,7 +208,7 @@ class CONTENT_EXPORT VideoCaptureManager +@@ -211,7 +211,7 @@ class CONTENT_EXPORT VideoCaptureManager void TakePhoto(const base::UnguessableToken& session_id, VideoCaptureDevice::TakePhotoCallback callback); @@ -3008,7 +2734,7 @@ diff --git a/content/browser/renderer_host/media/video_capture_manager.h b/conte // Some devices had troubles when stopped and restarted quickly, so the device // is only stopped when Chrome is sent to background and not when, e.g., a tab // is hidden, see http://crbug.com/582295. -@@ -324,7 +324,7 @@ class CONTENT_EXPORT VideoCaptureManager +@@ -327,7 +327,7 @@ class CONTENT_EXPORT VideoCaptureManager void ReleaseDevices(); void ResumeDevices(); @@ -3049,7 +2775,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Conten diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -622,7 +622,7 @@ BASE_FEATURE(kLoadingPredictorLimitPreconnectSocketCount, +@@ -577,7 +577,7 @@ BASE_FEATURE(kLoadingPredictorLimitPreconnectSocketCount, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kLogJsConsoleMessages, @@ -3124,7 +2850,7 @@ diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn import("//build/config/android/rules.gni") } -@@ -1161,7 +1161,7 @@ source_set("unit_tests") { +@@ -1168,7 +1168,7 @@ source_set("unit_tests") { configs += [ "//build/config/compiler:no_exit_time_destructors" ] } @@ -3277,12 +3003,12 @@ diff --git a/extensions/common/api/schema.gni b/extensions/common/api/schema.gni -if (enable_desktop_android_extensions) { +if (enable_desktop_android_extensions_cromite) { extensions_types_only_schema_files_ += [ - "clipboard.idl", + "clipboard.webidl", "scripts_internal.idl", diff --git a/extensions/common/command.cc b/extensions/common/command.cc --- a/extensions/common/command.cc +++ b/extensions/common/command.cc -@@ -118,7 +118,7 @@ std::string Command::CommandPlatform() { +@@ -119,7 +119,7 @@ std::string Command::CommandPlatform() { return ui::kKeybindingPlatformChromeOs; #elif BUILDFLAG(IS_LINUX) return ui::kKeybindingPlatformLinux; @@ -3303,7 +3029,7 @@ diff --git a/extensions/common/extension_features.cc b/extensions/common/extensi // Disabled by default because on first-run we don't have a Finch seed yet, so // we want to default to the safe behavior of no extensions. BASE_FEATURE(kEnableExtensionsForCorpDesktopAndroid, -@@ -151,7 +151,7 @@ BASE_FEATURE(kDisableExtensionsOnChromeUrlsSwitch, +@@ -148,7 +148,7 @@ BASE_FEATURE(kDisableExtensionsOnChromeUrlsSwitch, // TODO (crbug.com/426554244): Determine if this switch should be // removed for desktop-android builds as well. #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && !BUILDFLAG(IS_CHROMEOS) && \ @@ -3312,7 +3038,7 @@ diff --git a/extensions/common/extension_features.cc b/extensions/common/extensi base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT -@@ -190,4 +190,10 @@ CROMITE_FEATURE(kEnableExtensionAutoupdate, +@@ -193,4 +193,10 @@ CROMITE_FEATURE(kEnableExtensionAutoupdate, CROMITE_FEATURE(kEnableExtensionManagementToChromeStore, "EnableExtensionToChromeStore", base::FEATURE_DISABLED_BY_DEFAULT); @@ -3335,7 +3061,7 @@ diff --git a/extensions/common/extension_features.h b/extensions/common/extensio // If enabled, extensions will be enabled for @google.com and @managedchrome.com // users on desktop Android. Otherwise they will be blocked. BASE_DECLARE_FEATURE(kEnableExtensionsForCorpDesktopAndroid); -@@ -317,6 +317,10 @@ BASE_DECLARE_FEATURE(kEnableExtensionAutoupdate); +@@ -320,6 +320,10 @@ BASE_DECLARE_FEATURE(kEnableExtensionAutoupdate); // Allows the installation of new extensions. // If active, exposes all features to the chrome web store like chromium. BASE_DECLARE_FEATURE(kEnableExtensionManagementToChromeStore); @@ -3349,7 +3075,7 @@ diff --git a/extensions/common/extension_features.h b/extensions/common/extensio diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extension_l10n_util.cc --- a/extensions/common/extension_l10n_util.cc +++ b/extensions/common/extension_l10n_util.cc -@@ -471,8 +471,10 @@ bool GetValidLocales(const base::FilePath& locale_path, +@@ -470,8 +470,10 @@ bool GetValidLocales(const base::FilePath& locale_path, } if (valid_locales->empty()) { @@ -3360,7 +3086,7 @@ diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extens } return true; -@@ -567,7 +569,11 @@ bool ShouldSkipValidation(const base::FilePath& locales_path, +@@ -566,7 +568,11 @@ bool ShouldSkipValidation(const base::FilePath& locales_path, // '.svn' directories. base::FilePath relative_path; if (!locales_path.AppendRelativePath(locale_path, &relative_path)) { @@ -3400,7 +3126,7 @@ diff --git a/extensions/common/manifest_handlers/default_locale_handler.cc b/ext diff --git a/extensions/renderer/bindings/api_binding_util.cc b/extensions/renderer/bindings/api_binding_util.cc --- a/extensions/renderer/bindings/api_binding_util.cc +++ b/extensions/renderer/bindings/api_binding_util.cc -@@ -134,7 +134,7 @@ std::string GetPlatformString() { +@@ -148,7 +148,7 @@ std::string GetPlatformString() { return "mac"; #elif BUILDFLAG(IS_WIN) return "win"; @@ -3412,7 +3138,7 @@ diff --git a/extensions/renderer/bindings/api_binding_util.cc b/extensions/rende diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc --- a/gpu/config/gpu_finch_features.cc +++ b/gpu/config/gpu_finch_features.cc -@@ -587,7 +587,7 @@ bool IsSkiaGraphiteSupportedByDevice(const base::CommandLine* command_line) { +@@ -586,7 +586,7 @@ bool IsSkiaGraphiteSupportedByDevice(const base::CommandLine* command_line) { // Desktop Android isn't ready to pick up the fieldtrial_testing_config.json // change that enables graphite. However, it's the same platform as regular // Android and does. Skip enabling the feature there for now. @@ -3421,7 +3147,7 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc return false; } -@@ -700,7 +700,7 @@ bool ShouldEnableDrDc() { +@@ -699,7 +699,7 @@ bool ShouldEnableDrDc() { // Chrome on Android desktop aims to be Vulkan-only, which can result // in crashes when enabled together with DrDc. Re-enable DrDc after // crbug.com/380295059 is fixed if it is shown beneficial on desktop. @@ -3459,7 +3185,7 @@ diff --git a/skia/features.gni b/skia/features.gni diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -2340,7 +2340,7 @@ BASE_FEATURE(kStopInBackground, +@@ -2336,7 +2336,7 @@ BASE_FEATURE(kStopInBackground, // b/248036988 - Disable this for Chromecast on Android builds to prevent apps // that play audio in the background from stopping. #if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CAST_ANDROID) && \ @@ -3471,24 +3197,24 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc --- a/third_party/blink/renderer/modules/modules_initializer.cc +++ b/third_party/blink/renderer/modules/modules_initializer.cc -@@ -119,7 +119,7 @@ - +@@ -120,7 +120,7 @@ namespace blink { + namespace { -#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) class SuspendCaptureObserver : public GarbageCollected, - public PageVisibilityObserver { -@@ -365,7 +365,7 @@ void ModulesInitializer::ProvideModulesToPage( + public Supplement, +@@ -374,7 +374,7 @@ void ModulesInitializer::ProvideModulesToPage( const SessionStorageNamespaceId& namespace_id) const { StorageNamespace::ProvideSessionStorageNamespaceTo(page, namespace_id); AudioGraphTracer::ProvideAudioGraphTracerTo(page); -#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) - page.SetSuspendCaptureObserver( - MakeGarbageCollected(page)); + page.ProvideSupplement(MakeGarbageCollected(page)); #endif // BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) + } diff --git a/tools/grit/grit_args.gni b/tools/grit/grit_args.gni --- a/tools/grit/grit_args.gni +++ b/tools/grit/grit_args.gni @@ -3642,8 +3368,8 @@ diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn --- a/ui/webui/resources/cr_elements/BUILD.gn +++ b/ui/webui/resources/cr_elements/BUILD.gn -@@ -36,7 +36,7 @@ build_webui("build") { - "cr_tabs/cr_tabs.css", +@@ -49,7 +49,7 @@ build_webui("build") { + "cr_icon_button/cr_icon_button.css", ] - if ((!is_ios) || is_desktop_android) { diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index 95532923..c6556e20 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/BUILD.gn | 8 +- .../android/java/res/xml/main_preferences.xml | 5 + - .../browser/download/DownloadUtils.java | 6 + + .../browser/download/DownloadUtils.java | 7 + .../init/ProcessInitializationHandler.java | 4 + chrome/android/java_sources.gni | 3 + chrome/browser/BUILD.gn | 7 + @@ -136,7 +136,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../strings/userscripts_strings.grdp | 54 ++ .../Experimental-user-scripts-support.inc | 13 + tools/gritsettings/resource_ids.spec | 6 + - 109 files changed, 10493 insertions(+), 3 deletions(-) + 109 files changed, 10494 insertions(+), 3 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -242,7 +242,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn ":chrome_base_module_resources", ":ui_locale_string_resources", "//chrome/android/webapk/libs/common:splash_resources", -@@ -695,6 +699,7 @@ if (_is_default_toolchain) { +@@ -699,6 +703,7 @@ if (_is_default_toolchain) { "//components/ukm/android:java", "//components/url_formatter/android:url_formatter_java", "//components/user_prefs/android:java", @@ -261,7 +261,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -145,6 +145,11 @@ found in the LICENSE file. +@@ -141,6 +141,11 @@ found in the LICENSE file. android:key="useragent_settings" android:order="20" android:title="@string/prefs_useragent_settings"/> @@ -276,26 +276,27 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -80,6 +80,7 @@ import org.chromium.ui.base.DeviceFormFactor; +@@ -81,6 +81,7 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.MimeTypeUtils; import org.chromium.ui.widget.Toast; import org.chromium.url.GURL; +import org.chromium.chrome.browser.user_scripts.UserScriptsUtils; import java.io.File; - -@@ -430,6 +431,11 @@ public class DownloadUtils { - @Nullable String referrer, - @DownloadOpenSource int source, - Context context) { -+ if (UserScriptsUtils.getInstance().openFile(filePath, mimeType, downloadGuid, -+ originalUrl, referrer, -+ getUriForItem(filePath))) { + import java.util.Locale; +@@ -466,6 +467,12 @@ public class DownloadUtils { + * @param req The {@link DownloadOpenRequest} with all open-file parameters. + */ + private static boolean doOpenFile(DownloadOpenRequest req) { ++ if (UserScriptsUtils.getInstance().openFile( ++ req.mFilePath, req.mMimeType, req.mDownloadGuid, ++ req.mOriginalUrl, req.mReferrer, ++ getUriForItem(req.mFilePath))) { + return true; + } - DownloadMetrics.recordDownloadOpen(source, mimeType); DownloadManagerService service = DownloadManagerService.getDownloadManagerService(); + // Check if Chrome should open the file itself. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java @@ -337,7 +338,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3720,6 +3720,13 @@ static_library("browser") { +@@ -3689,6 +3689,13 @@ static_library("browser") { ] deps += [ "//chrome/android/modules/dev_ui/provider:native" ] } @@ -354,7 +355,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn 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 -@@ -194,6 +194,7 @@ +@@ -190,6 +190,7 @@ #include "components/ui_devtools/switches.h" #include "components/variations/variations_switches.h" #include "components/version_info/channel.h" @@ -365,15 +366,15 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc 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 -@@ -284,6 +284,7 @@ +@@ -258,6 +258,7 @@ #include "components/ntp_tiles/popular_sites_impl.h" #include "components/permissions/contexts/geolocation_permission_context_android.h" #include "components/webapps/browser/android/install_prompt_prefs.h" +#include "components/user_scripts/browser/user_script_prefs.h" #else // BUILDFLAG(IS_ANDROID) + #include "chrome/browser/actor/ui/actor_ui_state_manager_prefs.h" #include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h" - #include "chrome/browser/gcm/gcm_product_util.h" -@@ -1717,6 +1718,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1755,6 +1756,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, omnibox::RegisterProfilePrefs(registry); ZeroSuggestProvider::RegisterProfilePrefs(registry); NtpCustomBackgroundService::RegisterProfilePrefs(registry); @@ -399,7 +400,7 @@ diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn 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 -@@ -598,6 +598,11 @@ +@@ -588,6 +588,11 @@ #include "chrome/browser/net/nss_service_factory.h" #endif @@ -411,7 +412,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { main_parts->AddParts(std::make_unique()); } -@@ -1452,6 +1457,10 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1443,6 +1448,10 @@ void ChromeBrowserMainExtraPartsProfiles:: #endif WebDataServiceFactory::GetInstance(); webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance(); @@ -425,7 +426,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -122,6 +122,10 @@ +@@ -124,6 +124,10 @@ #include "extensions/common/manifest.h" #endif @@ -436,7 +437,7 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile #if BUILDFLAG(ENABLE_SESSION_SERVICE) #include "chrome/browser/sessions/app_session_service_factory.h" #include "chrome/browser/sessions/session_service_factory.h" -@@ -1562,6 +1566,13 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, +@@ -1569,6 +1573,13 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, // initializing the supervised flag if necessary). ChildAccountServiceFactory::GetForProfile(profile)->Init(); ListFamilyMembersServiceFactory::GetForProfile(profile)->Init(); @@ -524,7 +525,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #if BUILDFLAG(ENABLE_WEBUI_CERTIFICATE_VIEWER) #include "chrome/browser/ui/webui/certificate_viewer/certificate_viewer_ui.h" -@@ -446,7 +449,9 @@ void RegisterChromeWebUIConfigs() { +@@ -447,7 +450,9 @@ void RegisterChromeWebUIConfigs() { map.AddWebUIConfig( std::make_unique()); #endif @@ -568,7 +569,7 @@ diff --git a/chrome/common/renderer_configuration.mojom b/chrome/common/renderer diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -239,6 +239,12 @@ static_library("renderer") { +@@ -240,6 +240,12 @@ static_library("renderer") { deps += [ "//components/webapps/isolated_web_apps:scheme" ] } @@ -627,7 +628,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer #if BUILDFLAG(ENABLE_PAINT_PREVIEW) new paint_preview::PaintPreviewRecorderImpl(render_frame); #endif -@@ -1408,6 +1430,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( +@@ -1405,6 +1427,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( render_frame); // |render_frame| might be dead by now. #endif @@ -645,7 +646,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer } void ChromeContentRendererClient::RunScriptsAtDocumentEnd( -@@ -1417,6 +1450,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( +@@ -1414,6 +1447,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( render_frame); // |render_frame| might be dead by now. #endif @@ -663,7 +664,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer } void ChromeContentRendererClient::RunScriptsAtDocumentIdle( -@@ -1426,6 +1470,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( +@@ -1423,6 +1467,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( render_frame); // |render_frame| might be dead by now. #endif @@ -11493,14 +11494,14 @@ diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec @@ -1254,6 +1254,12 @@ - "META": {"sizes": {"includes": [5]}}, - "includes": [7490], + "META": {"sizes": {"includes": [10]}}, + "includes": [7495], }, + "components/user_scripts/renderer/resources/user_scripts_renderer_resources.grd": { -+ "includes": [7500], ++ "includes": [7505], + }, + "components/user_scripts/browser/resources/browser_resources.grd": { -+ "includes": [7620], ++ "includes": [7625], + }, # END components/ section. diff --git a/build/patches/Guard-for-user-agent-reduction.patch b/build/patches/Guard-for-user-agent-reduction.patch index e0eb4d2c..d3fc6f46 100644 --- a/build/patches/Guard-for-user-agent-reduction.patch +++ b/build/patches/Guard-for-user-agent-reduction.patch @@ -4,27 +4,14 @@ Subject: Guard for user-agent reduction License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/chrome_content_browser_client.cc | 2 +- - components/embedder_support/user_agent_utils.cc | 5 +++++ - .../platform/runtime_enabled_features.json5 | 16 ++++++++-------- - 3 files changed, 14 insertions(+), 9 deletions(-) + components/embedder_support/user_agent_utils.cc | 5 +++++ + .../platform/runtime_enabled_features.json5 | 14 +++++++------- + 2 files changed, 12 insertions(+), 7 deletions(-) -diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc ---- a/chrome/browser/chrome_content_browser_client.cc -+++ b/chrome/browser/chrome_content_browser_client.cc -@@ -1472,7 +1472,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( - registry->RegisterIntegerPref( - prefs::kUserAgentReduction, - static_cast( -- embedder_support::UserAgentReductionEnterprisePolicyState::kDefault)); -+ embedder_support::UserAgentReductionEnterprisePolicyState::kForceEnabled)); - registry->RegisterBooleanPref(prefs::kOriginAgentClusterDefaultEnabled, true); - - registry->RegisterBooleanPref( diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc --- a/components/embedder_support/user_agent_utils.cc +++ b/components/embedder_support/user_agent_utils.cc -@@ -899,6 +899,7 @@ std::string BuildUserAgentFromProduct(const std::string& product) { +@@ -854,6 +854,7 @@ std::string BuildUserAgentFromProduct(const std::string& product) { } std::string BuildModelInfo() { @@ -32,7 +19,7 @@ diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedd #if BUILDFLAG(IS_ANDROID) // Model information is not exposed on Android desktop. if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_DESKTOP) { -@@ -941,6 +942,10 @@ std::string GetAndroidOSInfo( +@@ -896,6 +897,10 @@ std::string GetAndroidOSInfo( IncludeAndroidModel include_android_model) { std::string android_info_str; @@ -46,7 +33,7 @@ diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedd 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 -@@ -4155,9 +4155,9 @@ +@@ -4244,22 +4244,22 @@ // If enabled, the deviceModel will be reduced to "K" and the // androidVersion will be reduced to a static "10" string in android // User-Agent string. @@ -59,7 +46,13 @@ diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 }, // If enabled, the platform version in User-Agent Data will be removed. // This feature is limited to Linux only. -@@ -4169,15 +4169,15 @@ + { +- name: "ReduceUserAgentDataLinuxPlatformVersion", +- status: {"Linux": "stable"}, ++ name: "ReduceUserAgentDataLinuxPlatformVersion", // keep enabled ++ status: {"Linux": "stable"}, // in bromite + }, + // If enabled, the minor version of the User-Agent string will be reduced. // This User-Agent Reduction feature has been enabled starting from M101, // but we still keep this flag for future phase tests. { @@ -67,16 +60,6 @@ diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 - status: "stable", + name: "ReduceUserAgentMinorVersion", // keep enabled + status: "stable", // in bromite - }, - { - // If enabled, the platform and oscpu of the User-Agent string will be - // reduced. -- name: "ReduceUserAgentPlatformOsCpu", -- depends_on: ["ReduceUserAgentMinorVersion"], -- status: {"Android": "", "default": "stable"}, -+ name: "ReduceUserAgentPlatformOsCpu", // keep -+ depends_on: ["ReduceUserAgentMinorVersion"], // enabled -+ status: {"Android": "", "default": "stable"}, // in bromite }, { public: true, diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index 496d84ec..ca7d08c3 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/feed/FeedSurfaceCoordinator.java | 4 + .../java/res/layout/search_activity.xml | 1 - .../android/java/res/xml/main_preferences.xml | 3 +- - .../chrome/browser/ChromeTabbedActivity.java | 3 +- + .../chrome/browser/ChromeTabbedActivity.java | 1 + .../ChromeAccessibilitySettingsDelegate.java | 70 +++++++++ .../HeadlessBrowserControlsStateProvider.java | 5 + .../compositor/CompositorViewHolder.java | 7 + @@ -100,11 +100,11 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../res/xml/accessibility_preferences.xml | 8 + .../accessibility/AccessibilitySettings.java | 27 ++++ .../AccessibilitySettingsDelegate.java | 9 ++ - components/viz/common/features.cc | 2 + + components/viz/common/features.cc | 1 + .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ .../renderer/core/frame/viewport_data.cc | 1 + - 91 files changed, 1063 insertions(+), 88 deletions(-) + 91 files changed, 1061 insertions(+), 87 deletions(-) create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc @@ -141,7 +141,7 @@ diff --git a/cc/base/features.h b/cc/base/features.h diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_controls_offset_manager.cc --- a/cc/input/browser_controls_offset_manager.cc +++ b/cc/input/browser_controls_offset_manager.cc -@@ -21,6 +21,7 @@ +@@ -25,6 +25,7 @@ #include "ui/gfx/animation/tween.h" #include "ui/gfx/geometry/transform.h" #include "ui/gfx/geometry/vector2d_f.h" @@ -149,7 +149,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont namespace cc { namespace { -@@ -549,6 +550,11 @@ gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( +@@ -623,6 +624,11 @@ gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( // content. If the top controls have no height, the content should scroll // immediately. gfx::Vector2dF applied_delta(0.f, old_top_offset - ContentTopOffset()); @@ -164,7 +164,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 -@@ -5292,6 +5292,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -5464,6 +5464,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -177,7 +177,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 -@@ -57,6 +57,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; +@@ -61,6 +61,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; @@ -185,7 +185,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.util.List; import java.util.function.Supplier; -@@ -196,7 +197,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -198,7 +199,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T @Initializer public void initializeWithNative( BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, @@ -195,7 +195,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser ObservableSupplierImpl tabStripTokenSupplier = new ObservableSupplierImpl<>(); var currentTabGroupModelFilterSupplier = -@@ -293,7 +295,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -294,7 +296,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T sharedImageTilesConfigBuilder, mThemeColorProvider, onSnapshotTokenChange, @@ -208,7 +208,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/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -@@ -77,6 +77,12 @@ import java.util.List; +@@ -79,6 +79,12 @@ import java.util.List; import java.util.Objects; import java.util.function.Supplier; @@ -221,7 +221,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** A mediator for the TabGroupUi. Responsible for managing the internal state of the component. */ @NullMarked public class TabGroupUiMediator implements BackPressHandler { -@@ -152,6 +158,11 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -154,6 +160,11 @@ public class TabGroupUiMediator implements BackPressHandler { private final Callback mOnSnapshotTokenChange; private final ObservableSupplier mChildTokenSupplier; @@ -233,7 +233,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser // These should only be used when regular (non-incognito) tabs are set in the model. private final @Nullable SharedImageTilesCoordinator mSharedImageTilesCoordinator; private final SharedImageTilesConfig.@Nullable Builder mSharedImageTilesConfigBuilder; -@@ -183,7 +194,9 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -184,7 +195,9 @@ public class TabGroupUiMediator implements BackPressHandler { SharedImageTilesConfig.@Nullable Builder sharedImageTilesConfigBuilder, ThemeColorProvider themeColorProvider, Callback onSnapshotTokenChange, @@ -244,7 +244,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mResetHandler = resetHandler; mModel = model; mTabModelSelector = tabModelSelector; -@@ -237,11 +250,30 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -238,11 +251,30 @@ public class TabGroupUiMediator implements BackPressHandler { mIsShowingHub = true; } @@ -275,7 +275,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser resetTabStrip(); } -@@ -263,6 +295,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -264,6 +296,8 @@ public class TabGroupUiMediator implements BackPressHandler { @Override public void restoreCompleted() { resetTabStrip(); @@ -312,14 +312,14 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser private void setupToolbarButtons() { View.OnClickListener showGroupDialogOnClickListener = view -> { -@@ -585,6 +633,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -584,6 +632,7 @@ public class TabGroupUiMediator implements BackPressHandler { @SuppressWarnings("NullAway") public void destroy() { + mTabObserver.destroy(); if (mTabModelSelector != null) { - var filterProvider = mTabModelSelector.getTabGroupModelFilterProvider(); - + mTabModelSelector.removeTabGroupModelFilterObserver(mTabModelObserver); + mTabModelSelector.getCurrentTabModelSupplier().removeObserver(mCurrentTabModelObserver); 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 @@ -432,7 +432,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import android.graphics.Rect; import android.util.Size; import android.view.InputDevice; -@@ -75,6 +81,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; +@@ -76,6 +82,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.recyclerview.widget.ItemTouchHelper2; import org.chromium.ui.widget.ViewLookupCachingFrameLayout; @@ -441,7 +441,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.ArrayList; -@@ -163,6 +171,124 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -164,6 +172,124 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO private int mAwaitingTabId = Tab.INVALID_TAB_ID; private @TabActionState int mTabActionState; @@ -566,7 +566,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. * -@@ -423,6 +549,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -424,6 +550,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO checkAwaitingLayout(); } }; @@ -579,7 +579,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -442,6 +574,17 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -443,6 +575,17 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO } }; mRecyclerView.setLayoutManager(layoutManager); @@ -597,16 +597,16 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -461,7 +604,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO - if (emptyViewParent != null) { - mTabListEmptyCoordinator = - new TabListEmptyCoordinator( -- emptyViewParent, mModelList, this::runOnItemAnimatorFinished); -+ emptyViewParent, mModelList, this::runOnItemAnimatorFinished, mBrowserControlsStateProvider); +@@ -465,7 +608,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO + mRecyclerView, + emptyViewParent, + mModelList, +- this::runOnItemAnimatorFinished); ++ this::runOnItemAnimatorFinished, mBrowserControlsStateProvider); } mTabListHighlighter = new TabListHighlighter(mModelList); mTabListMergeAnimationManager = new TabListMergeAnimationManager(mRecyclerView); -@@ -798,6 +941,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -802,6 +945,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); @@ -619,7 +619,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 -@@ -11,7 +11,9 @@ import android.view.View; +@@ -13,7 +13,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -627,9 +627,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.Px; import androidx.annotation.StringRes; - -@@ -24,6 +26,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; +@@ -27,6 +29,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; @@ -637,19 +637,23 @@ 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 -@@ -47,15 +50,18 @@ class TabListEmptyCoordinator { +@@ -51,12 +54,14 @@ class TabListEmptyCoordinator { private boolean mIsTabSwitcherShowing; private boolean mIsListObserverAttached; private @Nullable TabListEmptyIllustrationAnimationManager mIllustrationAnimationManager; + private BrowserControlsStateProvider mBrowserControlsStateProvider; public TabListEmptyCoordinator( -- ViewGroup rootView, TabListModel model, Callback runOnItemAnimatorFinished) { -+ ViewGroup rootView, TabListModel model, Callback runOnItemAnimatorFinished, + TabListRecyclerView recyclerView, + ViewGroup rootView, + TabListModel model, +- Callback runOnItemAnimatorFinished) { ++ Callback runOnItemAnimatorFinished, + BrowserControlsStateProvider browserControlsStateProvider) { + mRecyclerView = recyclerView; mRootView = rootView; mContext = rootView.getContext(); - mRunOnItemAnimatorFinished = runOnItemAnimatorFinished; +@@ -64,6 +69,7 @@ class TabListEmptyCoordinator { // Observe TabListModel to determine when to add / remove empty state view. mModel = model; @@ -657,7 +661,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mListObserver = new ListObserver<>() { @Override -@@ -188,6 +194,15 @@ class TabListEmptyCoordinator { +@@ -214,6 +220,15 @@ class TabListEmptyCoordinator { public void attachEmptyView() { if (mEmptyView != null && mEmptyView.getParent() == null) { mRootView.addView(mEmptyView); @@ -676,15 +680,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/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 +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java -@@ -44,6 +44,7 @@ import org.chromium.build.BuildConfig; +@@ -45,6 +45,7 @@ import org.chromium.build.BuildConfig; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.compositor.CompositorViewHolder; +import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.browser.hub.DisplayButtonData; import org.chromium.chrome.browser.hub.FadeHubLayoutAnimationFactory; import org.chromium.chrome.browser.hub.FullButtonData; -@@ -174,6 +175,7 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc + import org.chromium.chrome.browser.hub.HubContainerView; +@@ -146,6 +147,7 @@ public abstract class TabSwitcherPaneBase extends PaneBase private @Nullable PaneHubController mPaneHubController; private @Nullable Long mWaitForTabStateInitializedStartTimeMs; private final @Nullable ObservableSupplier mXrSpaceModeObservableSupplier; @@ -692,7 +696,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * @param context The activity context. -@@ -490,6 +492,13 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc +@@ -454,6 +456,13 @@ public abstract class TabSwitcherPaneBase extends PaneBase Log.d(TAG, "Geometry not ready using fallback animation."); useFallbackAnimation = true; } @@ -717,7 +721,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -@@ -763,6 +764,9 @@ public class FeedSurfaceCoordinator +@@ -774,6 +775,9 @@ public class FeedSurfaceCoordinator ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMarginStart(margin); layoutParams.setMarginEnd(margin); @@ -741,7 +745,7 @@ diff --git a/chrome/android/java/res/layout/search_activity.xml b/chrome/android diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -44,7 +44,8 @@ found in the LICENSE file. +@@ -45,7 +45,8 @@ found in the LICENSE file. android:fragment="org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment" android:key="address_bar" android:order="7" @@ -754,16 +758,14 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j 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 -@@ -1074,7 +1074,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt - mRootUiCoordinator.getDataSharingTabManager(), +@@ -1067,6 +1067,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mRootUiCoordinator.getBottomSheetController(), mRootUiCoordinator.getShareDelegateSupplier(), -- mXrSceneCoreSessionManagerSupplier.get()); -+ mXrSceneCoreSessionManagerSupplier.get(), -+ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager()); + mXrSceneCoreSessionManagerSupplier.get(), ++ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager(), + mBackPressManager); mLayoutStateProviderSupplier.set(mLayoutManager); } - } 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 @@ -876,7 +878,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 -@@ -271,6 +271,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -273,6 +273,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -887,9 +889,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp if (forwarder != null) forwarder.setCurrentTouchOffsetY(top); } -@@ -965,6 +969,9 @@ public class CompositorViewHolder extends FrameLayout - ? assumeNonNull(mApplicationBottomInsetSupplier.get()) - .webContentsHeightInset +@@ -992,6 +996,9 @@ public class CompositorViewHolder extends FrameLayout + mApplicationBottomInsetSupplier != null + ? mApplicationBottomInsetSupplier.getInsets().webContentsHeightInset : 0; + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + keyboardInset = 0; @@ -945,7 +947,7 @@ 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 -@@ -40,6 +40,7 @@ import org.chromium.ui.base.WindowAndroid; +@@ -43,6 +43,7 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.dragdrop.DragAndDropDelegate; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; import org.chromium.ui.xr.scenecore.XrSceneCoreSessionManager; @@ -953,22 +955,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.function.Supplier; -@@ -111,7 +112,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { - DataSharingTabManager dataSharingTabManager, +@@ -115,7 +116,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { BottomSheetController bottomSheetController, Supplier shareDelegateSupplier, -- @Nullable XrSceneCoreSessionManager xrSceneCoreSessionManager) { -+ @Nullable XrSceneCoreSessionManager xrSceneCoreSessionManager, + @Nullable XrSceneCoreSessionManager xrSceneCoreSessionManager, +- BackPressManager backPressManager) { ++ BackPressManager backPressManager, + Supplier browserControlsManagerSupplier) { super( host, contentContainer, -@@ -149,7 +151,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { - dataSharingTabManager, +@@ -154,7 +156,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { bottomSheetController, shareDelegateSupplier, -- xrSpaceModeObservableSupplier); -+ xrSpaceModeObservableSupplier, + xrSpaceModeObservableSupplier, +- backPressManager); ++ backPressManager, + browserControlsManagerSupplier); addSceneOverlay(mTabStripLayoutHelperManager); addObserver(mTabStripLayoutHelperManager.getTabSwitcherObserver()); @@ -976,7 +978,7 @@ 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/ToolbarSwipeLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java -@@ -54,6 +54,8 @@ import org.chromium.ui.base.LocalizationUtils; +@@ -55,6 +55,8 @@ import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; @@ -985,7 +987,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.ArrayList; import java.util.List; -@@ -527,7 +529,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -528,7 +530,11 @@ public class ToolbarSwipeLayout extends Layout { mLeftToolbarOverlay.setXOffset(leftX * dpToPx); } mLeftTab.setX(leftX); @@ -998,7 +1000,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo needUpdate = updateSnap(dt, mLeftTab) || needUpdate; } else if (mLeftToolbarOverlay != null) { mLeftToolbarOverlay.setManualVisibility(false); -@@ -540,7 +546,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -541,7 +547,11 @@ public class ToolbarSwipeLayout extends Layout { mRightToolbarOverlay.setXOffset(rightX * dpToPx); } mRightTab.setX(rightX); @@ -1014,7 +1016,7 @@ 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/overlays/strip/ScrollDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java -@@ -361,7 +361,7 @@ public class ScrollDelegate { +@@ -352,7 +352,7 @@ public class ScrollDelegate { boolean useUnadjustedScrollOffset = isRtl != isLeft; float scrollOffset = mScrollOffset; @@ -1026,7 +1028,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 -@@ -116,6 +116,8 @@ import org.chromium.ui.interpolators.Interpolators; +@@ -118,6 +118,8 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; @@ -1035,7 +1037,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.util.ArrayList; import java.util.List; -@@ -276,12 +278,17 @@ public class StripLayoutHelperManager +@@ -282,12 +284,17 @@ public class StripLayoutHelperManager // Drag-Drop private @Nullable TabStripDragHandler mTabStripDragHandler; @@ -1053,7 +1055,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null && mModelSelectorButton.onDown(x, y, buttons)) { return; } -@@ -306,6 +313,7 @@ public class StripLayoutHelperManager +@@ -312,6 +319,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1061,7 +1063,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null) { mModelSelectorButton.drag(x, y); } -@@ -317,6 +325,7 @@ public class StripLayoutHelperManager +@@ -323,6 +331,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1069,7 +1071,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over long time = time(); if (mModelSelectorButton != null && mModelSelectorButton.click(x, y, buttons)) { mModelSelectorButton.handleClick(time, buttons, modifiers); -@@ -330,6 +339,7 @@ public class StripLayoutHelperManager +@@ -336,6 +345,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1077,7 +1079,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().fling(time(), velocityX); } -@@ -338,6 +348,7 @@ public class StripLayoutHelperManager +@@ -344,6 +354,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1085,17 +1087,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(x, y); } -@@ -477,7 +488,8 @@ public class StripLayoutHelperManager - DataSharingTabManager dataSharingTabManager, +@@ -484,7 +495,8 @@ public class StripLayoutHelperManager BottomSheetController bottomSheetController, Supplier shareDelegateSupplier, -- @Nullable ObservableSupplier xrSpaceModeObservableSupplier) { -+ @Nullable ObservableSupplier xrSpaceModeObservableSupplier, + @Nullable ObservableSupplier xrSpaceModeObservableSupplier, +- BackPressManager backPressManager) { ++ BackPressManager backPressManager, + Supplier browserControlsManagerSupplier) { mContext = context; Resources res = context.getResources(); mManagerHost = managerHost; -@@ -597,6 +609,8 @@ public class StripLayoutHelperManager +@@ -608,6 +620,8 @@ public class StripLayoutHelperManager multiInstanceManager, shareDelegateSupplier, TabGroupListBottomSheetCoordinator::new); @@ -1104,7 +1106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over tabHoverCardViewStub.setOnInflateListener( (viewStub, view) -> { -@@ -818,6 +832,7 @@ public class StripLayoutHelperManager +@@ -827,6 +841,7 @@ public class StripLayoutHelperManager RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { assert mTabStripTreeProvider != null; mResourceManager = resourceManager; @@ -1112,7 +1114,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over // When refactor is enabled, the mSceneLayerYOffset / mSceneLayerVisibleHeight wil be // calculated externally, so we can skip the adjustment here. -@@ -861,6 +876,10 @@ public class StripLayoutHelperManager +@@ -870,6 +885,10 @@ public class StripLayoutHelperManager getStripTransitionScrimColor(), mStripTransitionScrimOpacity); } @@ -1123,7 +1125,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mTabStripTreeProvider.pushAndUpdateStrip( this, mLayerTitleCacheSupplier.get(), -@@ -874,7 +893,9 @@ public class StripLayoutHelperManager +@@ -883,7 +902,9 @@ public class StripLayoutHelperManager mStripTransitionScrimOpacity, getActiveStripLayoutHelper().getLeftPaddingToDraw(), getActiveStripLayoutHelper().getRightPaddingToDraw(), @@ -1134,7 +1136,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over } private float getVisibleHeightDp(float topControlOffsetDp) { -@@ -976,11 +997,21 @@ public class StripLayoutHelperManager +@@ -985,11 +1006,21 @@ public class StripLayoutHelperManager mRightPadding, mTopPadding); @@ -1363,15 +1365,15 @@ 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 -@@ -132,6 +132,7 @@ import org.chromium.content_public.browser.NavigationController; - import org.chromium.ui.base.DeviceFormFactor; +@@ -136,6 +136,7 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; + import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import androidx.annotation.NonNull; import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; -@@ -916,11 +917,16 @@ public class NewTabPage +@@ -931,11 +932,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1390,7 +1392,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -936,9 +942,7 @@ public class NewTabPage +@@ -951,9 +957,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1414,7 +1416,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; -@@ -214,7 +217,12 @@ public class NewTabPageLayout extends LinearLayout +@@ -230,7 +233,12 @@ public class NewTabPageLayout extends LinearLayout Log.i(TAG, "NewTabPageLayout.onFinishInflate before insertSiteSectionView"); initializeSiteSectionView(); @@ -1431,7 +1433,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java -@@ -33,6 +33,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -34,6 +34,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.edge_to_edge.EdgeToEdgePadAdjuster; @@ -1439,7 +1441,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP /** * The native recent tabs page. Lists recently closed tabs, open windows and tabs from the user's -@@ -117,7 +118,8 @@ public class RecentTabsPage +@@ -118,7 +119,8 @@ public class RecentTabsPage mView.addOnAttachStateChangeListener(this); @@ -1449,7 +1451,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP mBrowserControlsStateProvider = browserControlsStateProvider; mBrowserControlsStateProvider.addObserver(this); onBottomControlsHeightChanged( -@@ -129,14 +131,23 @@ public class RecentTabsPage +@@ -130,14 +132,23 @@ public class RecentTabsPage mTabStripHeightSupplier = tabStripHeightSupplier; mView.setPadding(0, mTabStripHeightSupplier.get(), 0, 0); @@ -1475,7 +1477,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP mEdgeToEdgeSupplier = edgeToEdgeSupplier; mPadAdjuster = EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( -@@ -362,7 +373,7 @@ public class RecentTabsPage +@@ -363,7 +374,7 @@ public class RecentTabsPage if (mBrowserControlsStateProvider == null) return; final View recentTabsRoot = mView.findViewById(R.id.recent_tabs_root); @@ -1484,7 +1486,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP final int contentOffset = mBrowserControlsStateProvider.getContentOffset(); ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) recentTabsRoot.getLayoutParams(); -@@ -378,9 +389,17 @@ public class RecentTabsPage +@@ -379,9 +390,17 @@ public class RecentTabsPage // If the content offset is different from the margin, we use translationY to position the // view in line with the content offset. @@ -1536,9 +1538,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se +import androidx.coordinatorlayout.widget.CoordinatorLayout; + import java.lang.ref.WeakReference; + import java.util.function.Supplier; - /** Queries the user's default search engine and shows autocomplete suggestions. */ -@@ -305,6 +310,15 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -306,6 +311,15 @@ public class SearchActivity extends AsyncInitializationActivity // Build the search box. mSearchBox = contentView.findViewById(R.id.search_location_bar); mAnchorView = contentView.findViewById(R.id.toolbar); @@ -1557,7 +1559,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -189,6 +189,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -201,6 +201,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } @@ -1621,7 +1623,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 -@@ -235,6 +235,9 @@ import org.chromium.url.GURL; +@@ -242,6 +242,9 @@ import org.chromium.url.GURL; import java.util.List; import java.util.function.Supplier; @@ -1631,7 +1633,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. -@@ -904,6 +907,17 @@ public class ToolbarManager +@@ -896,6 +899,17 @@ public class ToolbarManager /* matchTrustedCdnUrl= */ mIsCustomTab); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1649,7 +1651,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1623,6 +1637,7 @@ public class ToolbarManager +@@ -1602,6 +1616,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1657,7 +1659,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1636,6 +1651,7 @@ public class ToolbarManager +@@ -1615,6 +1630,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1665,7 +1667,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -2264,9 +2280,21 @@ public class ToolbarManager +@@ -2278,9 +2294,21 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarViewRectProvider(); } @@ -1688,7 +1690,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar assert mTabGroupUiOneshotSupplier == null; assert mUndoBarThrottle != null; assert mLayoutManager != null; -@@ -2284,7 +2312,7 @@ public class ToolbarManager +@@ -2297,7 +2325,7 @@ public class ToolbarManager mActivityTabProvider, mTabModelSelector, mActivity, @@ -1697,7 +1699,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsSizer, mScrimManager, mOmniboxFocusStateSupplier, -@@ -2311,7 +2339,7 @@ public class ToolbarManager +@@ -2324,7 +2352,7 @@ public class ToolbarManager mControlsVisibilityDelegate, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1706,7 +1708,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -2319,7 +2347,8 @@ public class ToolbarManager +@@ -2332,7 +2360,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1719,9 +1721,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java -@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; - import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; - import org.chromium.ui.base.ApplicationViewportInsetSupplier; +@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider + import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; + import org.chromium.ui.base.ApplicationViewportInsetTracker; import org.chromium.ui.base.ViewportInsets; +import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -1775,7 +1777,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu import org.chromium.chrome.browser.layouts.LayoutManager; import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; -@@ -586,6 +588,12 @@ public class StatusBarColorController +@@ -617,6 +619,12 @@ public class StatusBarColorController UiUtils.setStatusBarColor(window, color); } @@ -1799,7 +1801,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" -@@ -145,6 +146,10 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, +@@ -160,6 +161,10 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, y_offset = legacy_content_offset - layer_->bounds().height(); } @@ -1808,8 +1810,8 @@ diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/b + } + layer_->SetPosition(gfx::PointF(x_offset, y_offset)); - - if (features::IsAndroidAnimatedProgressBarInVizEnabled()) { + layer_->SetOffsetTag(offset_tag); + } diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc --- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc +++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc @@ -1821,7 +1823,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/TabStripSceneLayer_jni.h" -@@ -151,8 +152,10 @@ void TabStripSceneLayer::SetContentTree( +@@ -149,8 +150,10 @@ void TabStripSceneLayer::SetContentTree(JNIEnv* env, content_tree_ = content_tree; if (content_tree) { layer()->InsertChild(content_tree->layer(), 0); @@ -1834,7 +1836,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer } } } -@@ -208,7 +211,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, +@@ -205,7 +208,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, jfloat right_padding, jfloat top_padding) { gfx::RectF content(0, y_offset, width, height); @@ -1848,7 +1850,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer background_layer_->SetBounds(gfx::Size(width, height)); background_layer_->SetBackgroundColor(SkColor4f::FromColor(background_color)); -@@ -217,7 +225,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, +@@ -214,7 +222,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, tab_strip_layer_->SetPosition(gfx::PointF(0, top_padding)); // Content tree should not be affected by tab strip scene layer visibility. @@ -1860,7 +1862,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java -@@ -275,7 +275,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser +@@ -274,7 +274,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser /** * @return {@link BrowserControlsStateProvider} instance in the current Activity. */ @@ -1941,7 +1943,7 @@ 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" -@@ -377,6 +378,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -371,6 +372,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNewTabPageCustomizationToolbarButton, &kNewTabPageCustomizationV2, &kNotificationPermissionBottomSheet, @@ -1953,7 +1955,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 -@@ -513,6 +513,10 @@ public abstract class ChromeFeatureList { +@@ -502,6 +502,10 @@ public abstract class ChromeFeatureList { public static final String NAV_BAR_COLOR_ANIMATION = "NavBarColorAnimation"; public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT = "NewTabPageCustomizationForMvt"; @@ -1964,7 +1966,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = "NewTabPageCustomizationToolbarButton"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_V2 = "NewTabPageCustomizationV2"; -@@ -1023,6 +1027,10 @@ public abstract class ChromeFeatureList { +@@ -1008,6 +1012,10 @@ public abstract class ChromeFeatureList { public static final CachedFlag sNotificationTrampoline = newCachedFlag(NOTIFICATION_TRAMPOLINE, false); public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true); @@ -1973,17 +1975,17 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f + public static final CachedFlag sMoveTopToolbarToBottom = + newCachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false); public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); - public static final CachedFlag sPostGetMyMemoryStateToBackground = - newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true); -@@ -1260,6 +1268,8 @@ public abstract class ChromeFeatureList { + public static final CachedFlag sPersistAcrossReboots = + newCachedFlag(PERSIST_ACROSS_REBOOTS, false); +@@ -1241,6 +1249,8 @@ public abstract class ChromeFeatureList { sNewTabPageCustomizationV2, sNotificationTrampoline, sPCctMinimumHeight, + sMoveTopToolbarToBottom, + sDisableToolbarSwipeUp, sPaintPreviewDemo, + sPersistAcrossReboots, sPostGetMyMemoryStateToBackground, - sPowerSavingModeBroadcastReceiverInBackground, diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/BUILD.gn --- a/chrome/browser/hub/internal/BUILD.gn +++ b/chrome/browser/hub/internal/BUILD.gn @@ -1995,7 +1997,7 @@ diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/ "android/java/src/org/chromium/chrome/browser/hub/ApplyButtonData.java", "android/java/src/org/chromium/chrome/browser/hub/EmptyHubBottomToolbarDelegate.java", "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactory.java", -@@ -102,6 +103,10 @@ android_library("java") { +@@ -103,6 +104,10 @@ android_library("java") { "//ui/edge_to_edge:java", "//url:url_java", ] @@ -2009,7 +2011,7 @@ diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java --- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java +++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java -@@ -13,6 +13,7 @@ import android.view.LayoutInflater; +@@ -14,6 +14,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -2017,15 +2019,15 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.base.Callback; import org.chromium.base.DeviceInfo; -@@ -23,6 +24,7 @@ import org.chromium.base.supplier.OneshotSupplier; - import org.chromium.build.annotations.NullMarked; +@@ -29,6 +30,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; + import org.chromium.chrome.browser.hub.HubPaneHostView.OnPaneSwipeListener; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; -@@ -171,6 +173,13 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { +@@ -181,6 +183,13 @@ public class HubCoordinator implements PaneHubController, BackPressHandler, OnPa paneManager.getFocusedPaneSupplier(), hubColorMixer, defaultPaneId); @@ -2037,7 +2039,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br + mainContainer.setLayoutParams(params); + } - ObservableSupplier<@Nullable View> overlayViewSupplier = + NullableObservableSupplier overlayViewSupplier = mPaneManager diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java --- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java @@ -2050,7 +2052,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import android.widget.FrameLayout.LayoutParams; import androidx.annotation.ColorInt; -@@ -19,6 +20,7 @@ import org.chromium.base.supplier.OneshotSupplier; +@@ -20,6 +21,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.build.annotations.MonotonicNonNull; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; @@ -2058,7 +2060,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; -@@ -143,7 +145,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -144,7 +146,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mStatusIndicatorHeight = height; @@ -2070,7 +2072,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -153,7 +158,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -154,7 +159,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mAppHeaderHeight = height; @@ -2082,7 +2084,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -301,6 +309,8 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -302,6 +310,8 @@ public class HubManagerImpl implements HubManager, HubController { } mSnackbarOverrideToken = mSnackbarManager.pushParentViewToOverrideStack( @@ -2193,7 +2195,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 -@@ -2034,7 +2034,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2070,7 +2070,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2329,7 +2331,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/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 -@@ -687,6 +687,7 @@ public class EdgeToEdgeControllerImpl +@@ -688,6 +688,7 @@ public class EdgeToEdgeControllerImpl * the system insets due to the keyboard or the bottom controls being visible. */ private boolean shouldPadAdjusters() { @@ -2565,7 +2567,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/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java -@@ -74,6 +74,8 @@ import org.chromium.ui.modelutil.PropertyModel; +@@ -73,6 +73,8 @@ import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.mojom.WindowOpenDisposition; import org.chromium.url.GURL; @@ -2574,7 +2576,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.List; import java.util.function.Supplier; -@@ -1304,7 +1306,9 @@ class AutocompleteMediator +@@ -1303,7 +1305,9 @@ class AutocompleteMediator @Override public void onSuggestionDropdownScroll() { mSuggestionsListScrolled = true; @@ -2662,7 +2664,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 -@@ -1539,6 +1539,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1536,6 +1536,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2700,7 +2702,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow @@ -68,6 +69,10 @@ public class LocationBarFocusScrimHandler implements UrlFocusChangeListener { mContext = context; - int topMargin = tabStripHeightSupplier.get() == null ? 0 : tabStripHeightSupplier.get(); + int topMargin = tabStripHeightSupplier.get(); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // since the top bar is at the bottom, we need to cover the whole page + topMargin = 0; @@ -2711,7 +2713,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/ToolbarLongPressMenuHandler.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarLongPressMenuHandler.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarLongPressMenuHandler.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarLongPressMenuHandler.java -@@ -219,14 +219,6 @@ public class ToolbarLongPressMenuHandler implements ConfigurationChangedObserver +@@ -221,14 +221,6 @@ public class ToolbarLongPressMenuHandler implements ConfigurationChangedObserver @VisibleForTesting ModelList buildMenuItems(boolean onTop) { ModelList itemList = new ModelList(); @@ -2761,7 +2763,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/bottom/BottomControlsCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java -@@ -33,6 +33,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -35,6 +35,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.dynamics.ViewResourceAdapter; import org.chromium.ui.widget.Toast; @@ -2770,7 +2772,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import java.util.HashSet; import java.util.Set; -@@ -88,6 +90,8 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -92,6 +94,8 @@ public class BottomControlsCoordinator implements BackPressHandler { * @param constraintsSupplier Used to access current constraints of the browser controls. * @param readAloudRestoringSupplier Supplier that returns true if Read Aloud is currently * restoring its player, e.g. after theme change. @@ -2779,10 +2781,10 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow */ @SuppressLint("CutPasteId") // Not actually cut and paste since it's View vs ViewGroup. public BottomControlsCoordinator( -@@ -103,7 +107,9 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -107,7 +111,9 @@ public class BottomControlsCoordinator implements BackPressHandler { TabObscuringHandler tabObscuringHandler, ObservableSupplier overlayPanelVisibilitySupplier, - ObservableSupplier<@Nullable Integer> constraintsSupplier, + NullableObservableSupplier<@BrowserControlsState Integer> constraintsSupplier, - Supplier readAloudRestoringSupplier) { + Supplier readAloudRestoringSupplier, + TopUiThemeColorProvider topUiThemeColorProvider, @@ -2803,7 +2805,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/bottom/BottomControlsMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java -@@ -27,6 +27,7 @@ import org.chromium.ui.KeyboardVisibilityDelegate; +@@ -26,6 +26,7 @@ import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.edge_to_edge.EdgeToEdgeSupplier.ChangeObserver; import org.chromium.ui.modelutil.PropertyModel; @@ -2811,7 +2813,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import java.util.function.Supplier; -@@ -155,6 +156,12 @@ class BottomControlsMediator +@@ -154,6 +155,12 @@ class BottomControlsMediator void setBottomControlsVisible(boolean visible) { boolean visibilityChanged = mIsBottomControlsVisible != visible; @@ -2824,7 +2826,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mIsBottomControlsVisible = visible; updateCompositedViewVisibility(); updateAndroidViewVisibility(); -@@ -184,6 +191,19 @@ class BottomControlsMediator +@@ -183,6 +190,19 @@ class BottomControlsMediator mTabObscuringHandler.removeObserver(this); } @@ -2844,7 +2846,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow @Override public void onBottomControlsHeightChanged( int bottomControlsHeight, int bottomControlsMinHeight) { -@@ -273,11 +293,13 @@ class BottomControlsMediator +@@ -272,11 +292,13 @@ class BottomControlsMediator && !mIsInSwipeLayout && getBrowserControls().getBottomControlOffset() == 0; if (visible) { @@ -2900,7 +2902,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/bottom/ScrollingBottomViewSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java -@@ -20,6 +20,8 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; +@@ -18,6 +18,8 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; import org.chromium.components.browser_ui.widget.ViewResourceFrameLayout; import org.chromium.ui.resources.ResourceManager; @@ -2909,7 +2911,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * A composited view that sits at the bottom of the screen and listens to changes in the browser * controls. When visible, the view will mimic the behavior of the top browser controls when -@@ -40,6 +42,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -38,6 +40,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements /** The current Y offset of the bottom view in px. */ private int mCurrentYOffsetPx; @@ -2919,7 +2921,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The current X offset of the bottom view in px. */ private int mCurrentXOffsetPx; -@@ -97,6 +102,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -95,6 +100,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements mOffsetTag = offsetTag; } @@ -2933,10 +2935,10 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * @param visible Whether this {@link SceneLayer} is visible. */ -@@ -128,6 +140,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements - isShadowVisible = mBottomView.getVisibility() != View.VISIBLE; - } - +@@ -118,6 +130,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements + @Override + public SceneOverlayLayer getUpdatedSceneOverlayTree( + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { + float offsetPy = viewport.height() + mCurrentYOffsetPx; + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // fix the offset of the fake bottom controls, used only for animations @@ -2945,19 +2947,19 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow ScrollingBottomViewSceneLayerJni.get() .updateScrollingBottomViewLayer( mNativePtr, -@@ -135,7 +152,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -125,7 +142,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements mResourceId, mTopShadowHeightPx, mCurrentXOffsetPx, - viewport.height() + mCurrentYOffsetPx, + offsetPy, - isShadowVisible, + true, mOffsetTag); 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 -@@ -78,6 +78,10 @@ import java.lang.annotation.RetentionPolicy; +@@ -80,6 +80,10 @@ import java.lang.annotation.RetentionPolicy; import java.util.function.BooleanSupplier; import java.util.function.Supplier; @@ -2968,7 +2970,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 -@@ -191,6 +195,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -193,6 +197,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout if (view != null) ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; } @@ -2983,7 +2985,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/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 -@@ -23,11 +23,14 @@ import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +@@ -24,11 +24,14 @@ import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; import org.chromium.chrome.browser.toolbar.R; import org.chromium.chrome.browser.toolbar.ToolbarProgressBar; import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar; @@ -2998,7 +3000,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The public interface for the top toolbar texture component. */ @NullMarked public class TopToolbarOverlayCoordinator implements SceneOverlay { -@@ -76,6 +79,12 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { +@@ -77,6 +80,12 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { browserControlsStateProvider.getContentOffset()) .with(TopToolbarOverlayProperties.ANONYMIZE, false) .with(TopToolbarOverlayProperties.SHOW_SHADOW, showHairline) @@ -3011,7 +3013,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow .build(); mSceneLayer = new TopToolbarSceneLayer(resourceManagerSupplier); mChangeProcessor = -@@ -151,6 +160,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { +@@ -152,6 +161,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { @@ -3095,7 +3097,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 -@@ -55,6 +55,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -59,6 +59,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment private BooleanPreferenceDelegate mForceTabletUIDelegate; static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; @@ -3107,7 +3109,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -71,6 +76,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -76,6 +81,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate = delegate; } @@ -3118,7 +3120,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -@@ -136,6 +145,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -141,6 +150,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment forceTabletUiPref.setChecked(mForceTabletUIDelegate.getValue()); forceTabletUiPref.setOnPreferenceChangeListener(this); @@ -3137,7 +3139,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -238,6 +259,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -243,6 +264,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -3180,18 +3182,12 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c 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 -@@ -45,11 +45,13 @@ BASE_FEATURE(kAndroidAnimatedProgressBarInViz, +@@ -38,6 +38,7 @@ namespace features { // offsets provided by the embedded renderer, circumventing browser main // involvement. For now, this applies only to top controls. BASE_FEATURE(kAndroidBrowserControlsInViz, base::FEATURE_ENABLED_BY_DEFAULT); +SET_CROMITE_FEATURE_DISABLED(kAndroidBrowserControlsInViz); - // If this flag is enabled, AndroidBrowserControlsInViz and - // BottomControlsRefactor with the "Dispatch yOffset" variation must also be - // enabled. - BASE_FEATURE(kAndroidBcivBottomControls, base::FEATURE_ENABLED_BY_DEFAULT); -+SET_CROMITE_FEATURE_DISABLED(kAndroidBcivBottomControls); - // If this flag is enabled, a DumpWithoutCrashing() is captured when a bad // state is detected when moving the composited UI. For example, this could diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc diff --git a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch index b550246c..39c774b6 100644 --- a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch +++ b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch @@ -14,9 +14,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../net/profile_network_context_service.cc | 12 +++--- .../privacy_sandbox_settings_delegate.cc | 1 + ...storage_access_grant_permission_context.cc | 13 +++++++ - .../experiment/experiment_manager_impl.cc | 1 + .../strings/android/site_settings.grdp | 4 +- - .../core/browser/cookie_settings.cc | 4 +- + .../core/browser/cookie_settings.cc | 6 +-- .../core/common/cookie_settings_base.cc | 39 +------------------ ...ioning-all-cookies-by-top-frame-domain.inc | 4 ++ ...ioning-all-cookies-by-top-frame-domain.inc | 1 + @@ -41,7 +40,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../cookie_store_delete_options.idl | 2 +- ui/webui/webui_allowlist.cc | 1 + url/url_features.cc | 1 + - 32 files changed, 91 insertions(+), 66 deletions(-) + 31 files changed, 90 insertions(+), 68 deletions(-) create mode 100644 cromite_flags/components/content_settings/core/common/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc create mode 100644 cromite_flags/components/permissions/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc create mode 100644 cromite_flags/content/public/common/content_features_cc/Partitioning-all-cookies-by-top-frame-domain.inc @@ -51,7 +50,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3651,7 +3651,7 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( +@@ -3630,7 +3630,7 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile(profile); if (!cookie_settings) { @@ -77,7 +76,7 @@ diff --git a/chrome/browser/extensions/api/cookies/cookies_helpers.cc b/chrome/b diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -1133,16 +1133,16 @@ ProfileNetworkContextService::CreateCookieManagerParams( +@@ -1132,16 +1132,16 @@ ProfileNetworkContextService::CreateCookieManagerParams( // UI to interact with SameSite cookies on accounts.google.com, which is used // for displaying a list of available accounts on the NTP // (chrome://new-tab-page), etc. @@ -103,14 +102,14 @@ diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/brow diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc --- a/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc -@@ -354,6 +354,7 @@ bool PrivacySandboxSettingsDelegate::IsCookieDeprecationLabelAllowed() const { +@@ -144,6 +144,7 @@ bool PrivacySandboxSettingsDelegate::HasAppropriateTopicsConsent() const { - bool PrivacySandboxSettingsDelegate:: - AreThirdPartyCookiesBlockedByCookieDeprecationExperiment() const { + bool PrivacySandboxSettingsDelegate::PrivacySandboxRestrictedNoticeRequired() + const { + if ((true)) return false; - if (net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()) { - return false; - } + if ((true)) return true; + auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); + diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc --- a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc +++ b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc @@ -141,17 +140,6 @@ diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_c if (metadata.AreSitesInSameFirstPartySet()) { switch (metadata.top_frame_entry()->site_type()) { case net::SiteType::kPrimary: -diff --git a/chrome/browser/tpcd/experiment/experiment_manager_impl.cc b/chrome/browser/tpcd/experiment/experiment_manager_impl.cc ---- a/chrome/browser/tpcd/experiment/experiment_manager_impl.cc -+++ b/chrome/browser/tpcd/experiment/experiment_manager_impl.cc -@@ -177,6 +177,7 @@ void ExperimentManagerImpl::MaybeUpdateSyntheticTrialRegistration() { - } - - std::optional ExperimentManagerImpl::IsClientEligible() const { -+ if ((true)) return std::nullopt; - if (kForceEligibleForTesting.Get()) { - return true; - } diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp --- a/components/browser_ui/strings/android/site_settings.grdp +++ b/components/browser_ui/strings/android/site_settings.grdp @@ -164,7 +152,7 @@ diff --git a/components/browser_ui/strings/android/site_settings.grdp b/componen Third-party cookies are blocked -@@ -688,7 +688,7 @@ +@@ -691,7 +691,7 @@ A site you visit can embed content from other sites, for example, images, ads, and text. Cookies set by these other sites are called third-party cookies. @@ -176,7 +164,7 @@ diff --git a/components/browser_ui/strings/android/site_settings.grdp b/componen diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc --- a/components/content_settings/core/browser/cookie_settings.cc +++ b/components/content_settings/core/browser/cookie_settings.cc -@@ -126,6 +126,7 @@ void CookieSettings::SetTemporaryCookieGrantForHeuristic( +@@ -115,6 +115,7 @@ void CookieSettings::SetTemporaryCookieGrantForHeuristic( const GURL& first_party_url, base::TimeDelta ttl, bool use_schemeless_patterns) { @@ -184,11 +172,13 @@ diff --git a/components/content_settings/core/browser/cookie_settings.cc b/compo if (url.is_empty() || first_party_url.is_empty()) { return; } -@@ -390,8 +391,7 @@ bool CookieSettings::ShouldBlockThirdPartyCookiesInternal() const { +@@ -352,10 +353,7 @@ bool CookieSettings::ShouldBlockThirdPartyCookiesInternal() const { } bool CookieSettings::MitigationsEnabledFor3pcdInternal() const { -- return AreThirdPartyCookiesLimited() || +- return (base::FeatureList::IsEnabled( +- content_settings::features::kTrackingProtection3pcd) && +- !is_incognito_) || - net::cookie_util::IsForceThirdPartyCookieBlockingEnabled(); + return false; } @@ -197,7 +187,7 @@ diff --git a/components/content_settings/core/browser/cookie_settings.cc b/compo diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc -@@ -598,48 +598,11 @@ CookieSettingsBase::DecideAccess(const GURL& url, +@@ -597,48 +597,11 @@ CookieSettingsBase::DecideAccess(const GURL& url, ThirdPartyCookieAllowMechanism::kAllowByGlobalSetting}; } @@ -246,7 +236,7 @@ diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/c if (is_explicit_setting) { return AllowAllCookies{ -@@ -675,7 +638,7 @@ CookieSettingsBase::GetCookieSettingInternal( +@@ -674,7 +637,7 @@ CookieSettingsBase::GetCookieSettingInternal( } return CookieSettingWithMetadata{/*cookie_setting=*/CONTENT_SETTING_ALLOW, /*allow_partitioned_cookies=*/true, @@ -305,7 +295,7 @@ new file mode 100644 diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc -@@ -1089,11 +1089,6 @@ CanonicalCookie::IsCanonicalForFromStorage() const { +@@ -1094,11 +1094,6 @@ CanonicalCookie::IsCanonicalForFromStorage() const { return Fail(CanonicalizationFailure::kEmptyNameWithHiddenPrefix); } @@ -344,7 +334,7 @@ diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc -@@ -803,6 +803,7 @@ bool IsCookiePartitionedValid(const GURL& url, +@@ -802,6 +802,7 @@ bool IsCookiePartitionedValid(const GURL& url, bool secure, bool is_partitioned, bool partition_has_nonce) { @@ -399,7 +389,7 @@ diff --git a/net/cookies/parsed_cookie.h b/net/cookies/parsed_cookie.h diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sqlite/sqlite_persistent_cookie_store.cc --- a/net/extras/sqlite/sqlite_persistent_cookie_store.cc +++ b/net/extras/sqlite/sqlite_persistent_cookie_store.cc -@@ -816,6 +816,14 @@ bool SQLitePersistentCookieStore::Backend::DoInitializeDatabase() { +@@ -817,6 +817,14 @@ bool SQLitePersistentCookieStore::Backend::DoInitializeDatabase() { if (!restore_old_session_cookies_) DeleteSessionCookiesOnStartup(); @@ -430,7 +420,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc -@@ -1652,6 +1652,7 @@ bool URLRequestHttpJob::NeedsRetryWithStorageAccess() { +@@ -1627,6 +1627,7 @@ bool URLRequestHttpJob::NeedsRetryWithStorageAccess() { auto determine_storage_access_retry_outcome = [&]() -> cookie_util::ActivateStorageAccessRetryOutcome { using enum cookie_util::ActivateStorageAccessRetryOutcome; @@ -441,7 +431,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc --- a/services/network/cookie_settings.cc +++ b/services/network/cookie_settings.cc -@@ -46,8 +46,7 @@ namespace network { +@@ -45,8 +45,7 @@ namespace network { namespace { bool ShouldApply3pcdRelatedReasons(const net::CanonicalCookie& cookie) { @@ -451,7 +441,7 @@ diff --git a/services/network/cookie_settings.cc b/services/network/cookie_setti } bool IsValidType(ContentSettingsType type) { -@@ -125,8 +124,7 @@ bool IsOriginOpaqueHttpOrHttps( +@@ -124,8 +123,7 @@ bool IsOriginOpaqueHttpOrHttps( // static bool CookieSettings::IsCookieAllowed(const net::CanonicalCookie& cookie, const CookieSettingWithMetadata& setting) { @@ -475,7 +465,7 @@ diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/co diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc --- a/services/network/restricted_cookie_manager.cc +++ b/services/network/restricted_cookie_manager.cc -@@ -984,6 +984,12 @@ void RestrictedCookieManager::SetCookieFromString( +@@ -985,6 +985,12 @@ void RestrictedCookieManager::SetCookieFromString( shared_memory_region = GetAndPrepareSharedMemoryRegion(url); } @@ -491,7 +481,7 @@ diff --git a/services/network/restricted_cookie_manager.cc b/services/network/re diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc -@@ -2582,6 +2582,7 @@ bool URLLoader::ShouldSetLoadWithStorageAccess() const { +@@ -2588,6 +2588,7 @@ bool URLLoader::ShouldSetLoadWithStorageAccess() const { auto determine_storage_access_load_outcome = [&]() -> net::cookie_util::ActivateStorageAccessLoadOutcome { @@ -513,7 +503,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_init.idl b/t diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc --- a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc +++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc -@@ -393,6 +393,7 @@ ScriptPromise CookieStore::set(ScriptState* script_state, +@@ -413,6 +413,7 @@ ScriptPromise CookieStore::set(ScriptState* script_state, CookieInit* set_options = CookieInit::Create(); set_options->setName(name); set_options->setValue(value); @@ -521,7 +511,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/t return set(script_state, set_options, exception_state); } -@@ -416,6 +417,7 @@ ScriptPromise CookieStore::Delete( +@@ -436,6 +437,7 @@ ScriptPromise CookieStore::Delete( set_options->setName(name); set_options->setValue(name.empty() ? "deleted" : ""); set_options->setExpires(0); @@ -529,7 +519,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/t return DoWrite(script_state, set_options, exception_state); } -@@ -431,6 +433,7 @@ ScriptPromise CookieStore::Delete( +@@ -451,6 +453,7 @@ ScriptPromise CookieStore::Delete( set_options->setPath(options->path()); set_options->setSameSite(V8CookieSameSite::Enum::kStrict); set_options->setPartitioned(options->partitioned()); diff --git a/build/patches/Remove-binary-blob-integrations.patch b/build/patches/Remove-binary-blob-integrations.patch index 37cdabdc..5ec35eab 100644 --- a/build/patches/Remove-binary-blob-integrations.patch +++ b/build/patches/Remove-binary-blob-integrations.patch @@ -51,8 +51,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/webauthn/android/BUILD.gn | 1 - .../CableAuthenticatorModuleProvider.java | 35 +- chrome/browser/webid/BUILD.gn | 3 - - .../DigitalCredentialsCreationDelegate.java | 112 --- - ...igitalCredentialsPresentationDelegate.java | 88 +- + .../DigitalCredentialsCreationDelegate.java | 121 +-- + ...igitalCredentialsPresentationDelegate.java | 89 +- chrome/test/android/BUILD.gn | 2 - .../ExternalNavigationHandler.java | 8 - components/externalauth/android/BUILD.gn | 3 - @@ -88,14 +88,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/backend/common/BUILD.gn | 2 - .../backend/OneTimeTokensMetricsRecorder.java | 16 - .../android/backend/sms/BUILD.gn | 3 - - .../sms/AndroidSmsOtpFetchReceiverBridge.java | 8 +- + .../sms/AndroidSmsOtpFetchReceiverBridge.java | 11 +- components/signin/public/android/BUILD.gn | 3 - components/webauthn/android/BUILD.gn | 12 +- .../webauthn/ConditionalUiState.java | 15 + - .../webauthn/Fido2CredentialRequest.java | 107 +-- - .../webauthn/GmsCoreGetCredentialsHelper.java | 78 +- + .../webauthn/Fido2CredentialRequest.java | 113 +-- + .../webauthn/GmsCoreGetCredentialsHelper.java | 79 +- .../components/webauthn/GmsCoreUtils.java | 74 +- - .../webauthn/IdentityCredentialsHelper.java | 119 +-- + .../webauthn/IdentityCredentialsHelper.java | 143 +-- .../webauthn/WebauthnModeProvider.java | 15 - .../cred_man/CredManMetricsHelper.java | 17 +- .../push_messaging/push_messaging_manager.cc | 2 +- @@ -111,7 +111,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../gms/ChromiumPlayServicesAvailability.java | 17 +- third_party/androidx/customizations.gni | 14 +- third_party/cardboard/BUILD.gn | 4 - - 87 files changed, 138 insertions(+), 2684 deletions(-) + 87 files changed, 146 insertions(+), 2720 deletions(-) create mode 100644 components/webauthn/android/java/src/org/chromium/components/webauthn/ConditionalUiState.java diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected @@ -139,7 +139,7 @@ diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest. diff --git a/build/config/android/config.gni b/build/config/android/config.gni --- a/build/config/android/config.gni +++ b/build/config/android/config.gni -@@ -203,9 +203,7 @@ if (is_android) { +@@ -197,9 +197,7 @@ if (is_android) { # google_play_services_package contains the path where individual client # targets (e.g. google_play_services_base_java) are located. @@ -153,7 +153,7 @@ diff --git a/build/config/android/config.gni b/build/config/android/config.gni diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -287,14 +287,6 @@ if (_is_default_toolchain) { +@@ -288,14 +288,6 @@ if (_is_default_toolchain) { ":java_overlay_resources", ":system_ai_service_proto_java", ":usage_stats_proto_java", @@ -168,32 +168,33 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:content_uri_utils_java", "//base:flagged_apis_java", "//base:process_launcher_java", -@@ -737,12 +729,21 @@ if (_is_default_toolchain) { +@@ -741,13 +733,22 @@ if (_is_default_toolchain) { "//services/shape_detection:shape_detection_java", "//services/shape_detection/public/mojom:mojom_java", "//skia/public/mojom:mojom_java", -- "//third_party/android_deps:chromium_play_services_availability_java", + # added for Bromite in place of binary blobs -+ "//third_party/androidx:androidx_annotation_annotation_java", - "//third_party/android_deps:com_airbnb_android_lottie_java", ++ check if useful # "//third_party/androidx:androidx_annotation_annotation_java", ++ # "//third_party/android_deps:com_airbnb_android_lottie_java", ++ # "//third_party/androidx:androidx_lifecycle_lifecycle_common_java", ++ # "//third_party/androidx:androidx_appcompat_appcompat_java", ++ # "//third_party/androidx:androidx_fragment_fragment_java", ++ # "//third_party/androidx:androidx_core_core_java", ++ # "//third_party/androidx:androidx_media_media_java", ++ # "//third_party/androidx:androidx_recyclerview_recyclerview_java", ++ # "//third_party/androidx:androidx_vectordrawable_vectordrawable_java", ++ # "//base:base_java", ++ # "//third_party/jni_zero:jni_zero_java", + "//third_party/android_deps:chromium_play_services_availability_java", +- "//third_party/android_deps:com_airbnb_android_lottie_java", - "//third_party/android_deps:com_google_code_findbugs_jsr305_java", -+ "//third_party/androidx:androidx_lifecycle_lifecycle_common_java", -+ "//third_party/androidx:androidx_appcompat_appcompat_java", -+ "//third_party/androidx:androidx_fragment_fragment_java", -+ "//third_party/androidx:androidx_core_core_java", -+ "//third_party/androidx:androidx_media_media_java", -+ "//third_party/androidx:androidx_recyclerview_recyclerview_java", -+ "//third_party/androidx:androidx_vectordrawable_vectordrawable_java", -+ "//base:base_java", -+ "//third_party/jni_zero:jni_zero_java", -+ "//third_party/android_deps:chromium_play_services_availability_java", + "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java", "//third_party/android_deps:guava_android_java", "//third_party/android_deps:material_design_java", - "//third_party/android_deps:playcore_java", "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/android_media:android_media_java", "//third_party/android_swipe_refresh:android_swipe_refresh_java", -@@ -1979,7 +1980,6 @@ if (_is_default_toolchain) { +@@ -1903,7 +1904,6 @@ if (_is_default_toolchain) { ] deps = [ ":chrome_java", @@ -201,7 +202,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//build/android:build_java", -@@ -2111,7 +2111,6 @@ if (_is_default_toolchain) { +@@ -2009,7 +2009,6 @@ if (_is_default_toolchain) { "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java", "java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java", "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java", @@ -209,7 +210,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java", -@@ -2138,14 +2137,10 @@ if (_is_default_toolchain) { +@@ -2037,14 +2036,10 @@ if (_is_default_toolchain) { "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java", "java/src/org/chromium/chrome/browser/provider/PageContentProvider.java", @@ -224,10 +225,10 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//chrome/browser/autofill/android:third_party_provider_java", "//chrome/browser/download/android:file_provider_java", -@@ -2160,7 +2155,6 @@ if (_is_default_toolchain) { - "//components/embedder_support/android:application_java", - "//components/minidump_uploader:minidump_uploader_java", +@@ -2063,7 +2058,6 @@ if (_is_default_toolchain) { "//components/module_installer/android:module_installer_java", + "//components/policy/android:policy_java", + "//components/variations/android:variations_java", - "//third_party/android_deps:playcore_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_collection_collection_java", @@ -235,7 +236,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -989,10 +989,6 @@ chrome_java_sources = [ +@@ -997,10 +997,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/segmentation_platform/SignalAccumulator.java", "java/src/org/chromium/chrome/browser/segmentation_platform/TabGroupingActionProvider.java", "java/src/org/chromium/chrome/browser/selection/ChromeSelectionDropdownMenuDelegate.java", @@ -244,8 +245,8 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java - "java/src/org/chromium/chrome/browser/services/gcm/GCMNativeBackgroundTask.java", - "java/src/org/chromium/chrome/browser/services/gcm/GcmUma.java", "java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java", - "java/src/org/chromium/chrome/browser/settings/MainSettings.java", - "java/src/org/chromium/chrome/browser/settings/MultiColumnSettings.java", + + # LINT.IfChange(MainSettingsBuildRule) diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml @@ -269,7 +270,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -822,16 +817,6 @@ by a child template that "extends" this file. +@@ -835,16 +830,6 @@ by a child template that "extends" this file. @@ -286,7 +287,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro @@ -305,7 +306,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -1369,12 +1342,6 @@ by a child template that "extends" this file. +@@ -1380,12 +1353,6 @@ by a child template that "extends" this file. {% endif %} @@ -428,7 +429,7 @@ diff --git a/chrome/browser/language/android/BUILD.gn b/chrome/browser/language/ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java -@@ -594,12 +594,6 @@ public class AppLanguagePromoDialog { +@@ -593,12 +593,6 @@ public class AppLanguagePromoDialog { mLoadingModal.set(ModalDialogProperties.CUSTOM_VIEW, customView); @@ -441,7 +442,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse boolean isSelectedCurrentUi = AppLocaleUtils.isAppLanguagePref(selectedLanguage.getCode()); if (!isSelectedCurrentUi) { // Only record isTopLanguage if the app language has changed. -@@ -607,31 +601,6 @@ public class AppLanguagePromoDialog { +@@ -606,31 +600,6 @@ public class AppLanguagePromoDialog { } AndroidLanguageMetricsBridge.reportAppLanguagePromptLanguage( selectedLanguage.isSystemDefault() ? "" : selectedLanguage.getCode()); @@ -476,7 +477,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java -@@ -24,7 +24,6 @@ import org.chromium.build.annotations.Nullable; +@@ -25,7 +25,6 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.language.AppLocaleUtils; import org.chromium.chrome.browser.language.GlobalAppLocaleController; @@ -484,7 +485,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse import org.chromium.chrome.browser.language.R; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefServiceUtil; -@@ -144,11 +143,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -148,11 +147,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment * translate target language, and detailed translate preferences. */ private void createDetailedPreferences() { @@ -651,7 +652,7 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java -@@ -18,8 +18,6 @@ import androidx.annotation.IntDef; +@@ -16,8 +16,6 @@ import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.FragmentActivity; @@ -660,7 +661,7 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom import org.jni_zero.JniType; import org.jni_zero.NativeMethods; -@@ -502,13 +500,6 @@ public class PasswordManagerHelper { +@@ -489,13 +487,6 @@ public class PasswordManagerHelper { // If the exception is not a Chrome-defined one, it means that the call failed at the // API call level. It could have either failed with a known ApiException or because of a // different error (e.g. a different exception thrown by the implementation of the API). @@ -719,7 +720,7 @@ diff --git a/chrome/browser/push_messaging/push_messaging_service_factory.cc b/c diff --git a/chrome/browser/safe_browsing/notification_telemetry/notification_telemetry_service.cc b/chrome/browser/safe_browsing/notification_telemetry/notification_telemetry_service.cc --- a/chrome/browser/safe_browsing/notification_telemetry/notification_telemetry_service.cc +++ b/chrome/browser/safe_browsing/notification_telemetry/notification_telemetry_service.cc -@@ -130,6 +130,7 @@ NotificationTelemetryService::NotificationTelemetryService( +@@ -133,6 +133,7 @@ NotificationTelemetryService::NotificationTelemetryService( // Notification Telemetry Service is a keyed service and will outlive // any invocations of the callback being registered with the push messaging // service (also a keyed service). @@ -730,7 +731,7 @@ diff --git a/chrome/browser/safe_browsing/notification_telemetry/notification_te 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 -@@ -128,8 +128,6 @@ static_library("ui") { +@@ -131,8 +131,6 @@ static_library("ui") { "webui/flags/flags_ui.h", "webui/flags/flags_ui_handler.cc", "webui/flags/flags_ui_handler.h", @@ -739,7 +740,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn "webui/history_clusters/history_clusters_internals_ui_config.cc", "webui/history_clusters/history_clusters_internals_ui_config.h", "webui/interstitials/interstitial_ui.cc", -@@ -469,7 +467,6 @@ static_library("ui") { +@@ -473,7 +471,6 @@ static_library("ui") { "//components/feedback/content", "//components/feedback/redaction_tool", "//components/find_in_page", @@ -750,7 +751,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/android/omnibox/BUILD.gn --- a/chrome/browser/ui/android/omnibox/BUILD.gn +++ b/chrome/browser/ui/android/omnibox/BUILD.gn -@@ -174,8 +174,6 @@ android_library("java") { +@@ -175,8 +175,6 @@ android_library("java") { deps = [ ":java_resources", @@ -759,7 +760,7 @@ diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/andr "//base:base_java", "//base/version_info/android:version_constants_java", "//build/android:build_java", -@@ -536,8 +534,6 @@ robolectric_library("junit") { +@@ -520,8 +518,6 @@ robolectric_library("junit") { deps = [ ":java", ":java_resources", @@ -771,7 +772,7 @@ diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/andr diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java --- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fullscreen_signin/FullscreenSigninMediator.java -@@ -266,11 +266,9 @@ public class FullscreenSigninMediator +@@ -278,11 +278,9 @@ public class FullscreenSigninMediator AccountUtils.getAccountsIfFulfilledOrEmpty(mAccountManagerFacade.getAccounts()), this::onChildAccountStatusReady); @@ -787,7 +788,7 @@ diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/brows 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 -@@ -246,7 +246,6 @@ void RegisterChromeWebUIConfigs() { +@@ -247,7 +247,6 @@ void RegisterChromeWebUIConfigs() { map.AddWebUIConfig(std::make_unique()); map.AddWebUIConfig(std::make_unique()); map.AddWebUIConfig(std::make_unique()); @@ -868,8 +869,8 @@ diff --git a/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/webid/BUILD.gn b/chrome/browser/webid/BUILD.gn --- a/chrome/browser/webid/BUILD.gn +++ b/chrome/browser/webid/BUILD.gn -@@ -14,8 +14,6 @@ if (is_android) { - "android/java/src/org/chromium/chrome/browser/webid/IdentityCredentialsDelegate.java", +@@ -16,8 +16,6 @@ if (is_android) { + "android/java/src/org/chromium/chrome/browser/webid/TestIdP.java", ] deps = [ - "$google_play_services_package:google_play_services_identity_credentials_java", @@ -877,7 +878,7 @@ diff --git a/chrome/browser/webid/BUILD.gn b/chrome/browser/webid/BUILD.gn "//base:base_java", "//base:service_loader_java", "//content/public/android:content_java", -@@ -44,7 +42,6 @@ if (is_android) { +@@ -49,7 +47,6 @@ if (is_android) { deps = [ ":java", @@ -888,7 +889,7 @@ diff --git a/chrome/browser/webid/BUILD.gn b/chrome/browser/webid/BUILD.gn diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsCreationDelegate.java b/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsCreationDelegate.java --- a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsCreationDelegate.java +++ b/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsCreationDelegate.java -@@ -21,10 +21,6 @@ import androidx.credentials.exceptions.CreateCredentialException; +@@ -18,10 +18,6 @@ import androidx.credentials.exceptions.CreateCredentialException; import androidx.credentials.exceptions.CreateCredentialUnknownException; import androidx.credentials.provider.PendingIntentHandler; @@ -899,14 +900,23 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w import org.json.JSONException; import org.json.JSONObject; -@@ -49,115 +45,7 @@ public class DigitalCredentialsCreationDelegate { - +@@ -46,122 +42,7 @@ public class DigitalCredentialsCreationDelegate { @OptIn(markerClass = androidx.credentials.ExperimentalDigitalCredentialApi.class) - public Promise create(Activity window, String origin, String request) { -- final IdentityCredentialClient client = -- IdentityCredentialManager.Companion.getClient(window); + public Promise create( + WindowAndroid windowAndroid, String origin, String request) { +- Activity window = windowAndroid.getActivity().get(); +- if (window == null) return Promise.rejected(); - - final Promise result = new Promise<>(); +- final IdentityCredentialClient client; +- try { +- client = IdentityCredentialManager.Companion.getClient(window); +- } catch (Exception e) { +- // Thrown when running in phones without the most current GMS +- // version. +- return Promise.rejected(); +- } +- +- final Promise result = new Promise<>(); - - ResultReceiver resultReceiver = - new ResultReceiver(new Handler(Looper.getMainLooper())) { @@ -920,9 +930,7 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w - } - Log.d(TAG, "Received a response"); - Intent providerData = -- Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -- ? data.getParcelable(BUNDLE_KEY_PROVIDER_DATA, Intent.class) -- : data.getParcelable(BUNDLE_KEY_PROVIDER_DATA); +- IntentUtils.safeGetParcelable(data, BUNDLE_KEY_PROVIDER_DATA); - - if (providerData == null) { - Log.d(TAG, "Response doesn't contain providerData"); @@ -988,23 +996,22 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w - "Response doesn't contain pendingIntent")); - return; - } -- try { -- Log.d(TAG, "Sending an intent for sender"); -- Log.d(TAG, request); -- startIntentSenderForResult( -- /* activity= */ window, -- /* intent= */ response.getPendingIntent().getIntentSender(), -- /* requestCode= */ REQUEST_CODE_DIGITAL_CREDENTIALS_CREATION, -- /* fillInIntent= */ null, -- /* flagsMask= */ 0, -- /* flagsValues= */ 0, -- /* extraFlags= */ 0, -- /* options= */ null); -- } catch (SendIntentException e) { +- Log.d(TAG, "Sending an intent for sender"); +- Log.d(TAG, request); +- int requestCode = +- windowAndroid.showCancelableIntent( +- response.getPendingIntent(), +- (resultCode, intent) -> { +- if (resultCode != Activity.RESULT_OK +- && result.isPending()) { +- result.reject( +- new Exception("Cancelled or Crashed")); +- } +- }, +- null); +- if (requestCode == WindowAndroid.START_INTENT_FAILURE) { - Log.e(TAG, "Sending an intent for sender failed"); -- if (result.isPending()) { -- result.reject(e); -- } +- result.reject(new Exception("Failed to start intent")); - } - }) - .addOnFailureListener( @@ -1012,13 +1019,15 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w - result.reject(new CreateCredentialUnknownException("unknown error")); - }); - - return result; +- return result; ++ return Promise.rejected(); } + private static @Nullable DigitalCredential parseResponse(String responseJson) { diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegate.java b/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegate.java --- a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegate.java +++ b/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegate.java -@@ -21,13 +21,6 @@ import androidx.credentials.Credential; +@@ -18,13 +18,6 @@ import androidx.credentials.Credential; import androidx.credentials.GetDigitalCredentialOption; import androidx.credentials.provider.PendingIntentHandler; @@ -1032,10 +1041,10 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w import org.json.JSONException; import org.json.JSONObject; -@@ -58,78 +51,7 @@ public class DigitalCredentialsPresentationDelegate { +@@ -57,79 +50,7 @@ public class DigitalCredentialsPresentationDelegate { + Activity window = windowAndroid.getActivity().get(); + if (window == null) return Promise.rejected(); - @OptIn(markerClass = androidx.credentials.ExperimentalDigitalCredentialApi.class) - public Promise get(Activity window, String origin, String request) { - final IdentityCredentialClient client; - try { - client = IdentityCredentialManager.Companion.getClient(window); @@ -1089,21 +1098,22 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w - resultReceiver)) - .addOnSuccessListener( - response -> { -- try { -- Log.d(TAG, "Sending an intent for sender"); -- Log.d(TAG, request); -- startIntentSenderForResult( -- /* activity= */ window, -- /* intent= */ response.getPendingIntent().getIntentSender(), -- REQUEST_CODE_DIGITAL_CREDENTIALS, -- /* fillInIntent= */ null, -- /* flagsMask= */ 0, -- /* flagsValues= */ 0, -- /* extraFlags= */ 0, -- /* options= */ null); -- } catch (SendIntentException e) { +- Log.d(TAG, "Sending an intent for sender"); +- Log.d(TAG, request); +- int requestCode = +- windowAndroid.showCancelableIntent( +- response.getPendingIntent(), +- (resultCode, intent) -> { +- if (resultCode != Activity.RESULT_OK +- && result.isPending()) { +- result.reject( +- new Exception("Cancelled or Crashed")); +- } +- }, +- null); +- if (requestCode == WindowAndroid.START_INTENT_FAILURE) { - Log.e(TAG, "Sending an intent for sender failed"); -- result.reject(e); +- result.reject(new Exception("Failed to start intent")); - } - }); - @@ -1112,7 +1122,7 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w } /** -@@ -149,7 +71,7 @@ public class DigitalCredentialsPresentationDelegate { +@@ -149,7 +70,7 @@ public class DigitalCredentialsPresentationDelegate { @VisibleForTesting public static DigitalCredential extractDigitalCredentialFromResponseBundle( int code, Bundle bundle) @@ -1121,7 +1131,7 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w // Try to read the new format. var digitalCredential = extractDigitalCredentialFromModernResponse(bundle); if (digitalCredential != null) { -@@ -158,11 +80,7 @@ public class DigitalCredentialsPresentationDelegate { +@@ -158,11 +79,7 @@ public class DigitalCredentialsPresentationDelegate { // TODO(crbug.com/336329411) Handle the case when the intent doesn't contain the modern // response, but contains the modern exception. @@ -1137,7 +1147,7 @@ diff --git a/chrome/browser/webid/android/java/src/org/chromium/chrome/browser/w diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn -@@ -379,8 +379,6 @@ android_library("chrome_java_integration_test_support") { +@@ -382,8 +382,6 @@ android_library("chrome_java_integration_test_support") { deps = [ ":chrome_java_test_support_common", @@ -1149,7 +1159,7 @@ diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn 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 -@@ -2818,14 +2818,6 @@ public class ExternalNavigationHandler { +@@ -2853,14 +2853,6 @@ public class ExternalNavigationHandler { * @return Whether the given intent is going to open an Instant App. */ private static boolean isIntentToInstantApp(Intent intent) { @@ -3149,7 +3159,7 @@ diff --git a/components/one_time_tokens/android/backend/common/java/src/org/chro diff --git a/components/one_time_tokens/android/backend/sms/BUILD.gn b/components/one_time_tokens/android/backend/sms/BUILD.gn --- a/components/one_time_tokens/android/backend/sms/BUILD.gn +++ b/components/one_time_tokens/android/backend/sms/BUILD.gn -@@ -46,7 +46,6 @@ android_library("java") { +@@ -48,7 +48,6 @@ android_library("java") { ] deps = [ @@ -3157,7 +3167,7 @@ diff --git a/components/one_time_tokens/android/backend/sms/BUILD.gn b/component "//base:base_java", "//build/android:build_java", "//components/one_time_tokens/android/backend/common:java", -@@ -70,7 +69,6 @@ robolectric_binary("one_time_tokens_junit_tests") { +@@ -72,7 +71,6 @@ robolectric_binary("one_time_tokens_junit_tests") { deps = [ ":java", ":sms_otp_fetching_interface_java", @@ -3165,7 +3175,7 @@ diff --git a/components/one_time_tokens/android/backend/sms/BUILD.gn b/component "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", -@@ -81,7 +79,6 @@ robolectric_binary("one_time_tokens_junit_tests") { +@@ -83,7 +81,6 @@ robolectric_binary("one_time_tokens_junit_tests") { android_library("sms_otp_fetching_interface_java") { deps = [ @@ -3186,13 +3196,16 @@ diff --git a/components/one_time_tokens/android/backend/sms/java/src/org/chromiu import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.NativeClassQualifiedName; -@@ -41,10 +38,7 @@ class AndroidSmsOtpFetchReceiverBridge { +@@ -42,13 +39,7 @@ class AndroidSmsOtpFetchReceiverBridge { void onOtpValueRetrievalError(Exception exception) { if (mNativeReceiverBridge == 0) return; - int errorCode = CommonStatusCodes.ERROR; -- if (exception instanceof ApiException) { -- errorCode = ((ApiException) exception).getStatusCode(); +- if (exception instanceof OneTimeTokensBackendException backendException) { +- errorCode = backendException.getErrorCode(); +- } +- if (exception instanceof ApiException apiException) { +- errorCode = apiException.getStatusCode(); - } + int errorCode = /* CommonStatusCodes.ERROR */ 13; AndroidSmsOtpFetchReceiverBridgeJni.get() @@ -3210,7 +3223,7 @@ diff --git a/components/signin/public/android/BUILD.gn b/components/signin/publi "//base:base_java", "//base:service_loader_java", "//build/android:build_java", -@@ -205,7 +203,6 @@ robolectric_library("junit") { +@@ -200,7 +198,6 @@ robolectric_library("junit") { deps = [ ":java", ":signin_java_test_support", @@ -3221,7 +3234,7 @@ diff --git a/components/signin/public/android/BUILD.gn b/components/signin/publi diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/BUILD.gn --- a/components/webauthn/android/BUILD.gn +++ b/components/webauthn/android/BUILD.gn -@@ -42,8 +42,6 @@ android_library("java") { +@@ -41,8 +41,6 @@ android_library("java") { "java/src/org/chromium/components/webauthn/Barrier.java", "java/src/org/chromium/components/webauthn/CreateConfirmationUiDelegate.java", "java/src/org/chromium/components/webauthn/Fido2Api.java", @@ -3229,7 +3242,7 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ - "java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java", "java/src/org/chromium/components/webauthn/Fido2CredentialRequest.java", "java/src/org/chromium/components/webauthn/FidoIntentSender.java", - "java/src/org/chromium/components/webauthn/GetCredentialResponseCallback.java", + "java/src/org/chromium/components/webauthn/GetMatchingCredentialIdsDelegate.java", @@ -74,11 +72,11 @@ android_library("java") { "java/src/org/chromium/components/webauthn/cred_man/GpmCredManRequestDecorator.java", ] @@ -3246,7 +3259,7 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "//base:base_java", "//base:service_loader_java", "//base/version_info/android:version_constants_java", -@@ -223,8 +221,6 @@ robolectric_library("junit") { +@@ -232,8 +230,6 @@ robolectric_library("junit") { deps = [ ":java", ":test_support_java", @@ -3287,15 +3300,15 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; -@@ -50,7 +48,6 @@ import org.chromium.blink.mojom.ResidentKeyRequirement; - import org.chromium.blink_public.common.BlinkFeatures; +@@ -51,7 +49,6 @@ import org.chromium.blink_public.common.BlinkFeatures; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; + import org.chromium.components.password_manager.BrowserAssistedLoginType; -import org.chromium.components.webauthn.Fido2ApiCall.Fido2ApiCallParams; import org.chromium.components.webauthn.cred_man.CredManHelper; import org.chromium.components.webauthn.cred_man.CredManSupportProvider; import org.chromium.content_public.browser.ClientDataJson; -@@ -146,12 +143,7 @@ public class Fido2CredentialRequest +@@ -154,12 +151,7 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { */ public Fido2CredentialRequest(AuthenticationContextProvider authenticationContextProvider) { mAuthenticationContextProvider = authenticationContextProvider; @@ -3309,8 +3322,8 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut mPlayServicesAvailable = playServicesAvailable; mCredManHelper = new CredManHelper(mAuthenticationContextProvider, this, mPlayServicesAvailable); -@@ -348,22 +340,6 @@ public class Fido2CredentialRequest - returnErrorAndResetCallback(AuthenticatorStatus.UNKNOWN_ERROR); +@@ -356,29 +348,6 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { + /* credentialRequestResult= */ null); return; } - try { @@ -3321,19 +3334,26 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - Uri.parse(convertOriginToString(origin)), - clientDataHash, - maybeBrowserOptions, -- getMaybeResultReceiver(), -- this::onGotPendingIntent, -- this::onBinderCallException); +- getMaybeResultReceiver(Fido2ApiRequestType.MAKE_CREDENTIAL), +- (pendingIntent) -> +- onGotPendingIntent( +- pendingIntent, +- Fido2ApiRequestType.MAKE_CREDENTIAL), +- (e) -> +- onBinderCallException( +- e, Fido2ApiRequestType.MAKE_CREDENTIAL)); - } catch (NoSuchAlgorithmException e) { -- mMakeCredentialErrorOutcome = MakeCredentialOutcome.ALGORITHM_NOT_SUPPORTED; -- returnErrorAndResetCallback(AuthenticatorStatus.ALGORITHM_UNSUPPORTED); +- returnErrorAndResetCallback( +- AuthenticatorStatus.ALGORITHM_UNSUPPORTED, +- MakeCredentialOutcome.ALGORITHM_NOT_SUPPORTED, +- /* credentialRequestResult= */ null); - return; - } return; } int result = -@@ -411,23 +387,6 @@ public class Fido2CredentialRequest - returnErrorAndResetCallback(AuthenticatorStatus.UNKNOWN_ERROR); +@@ -435,27 +404,6 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { + /* credentialRequestResult= */ null); return; } - @@ -3345,18 +3365,22 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - Uri.parse(convertOriginToString(origin)), - clientDataHash, - maybeBrowserOptions, -- getMaybeResultReceiver(), -- this::onGotPendingIntent, -- this::onBinderCallException); +- getMaybeResultReceiver(Fido2ApiRequestType.MAKE_CREDENTIAL), +- (pendingIntent) -> +- onGotPendingIntent( +- pendingIntent, Fido2ApiRequestType.MAKE_CREDENTIAL), +- (e) -> onBinderCallException(e, Fido2ApiRequestType.MAKE_CREDENTIAL)); - } catch (NoSuchAlgorithmException e) { -- mMakeCredentialErrorOutcome = MakeCredentialOutcome.ALGORITHM_NOT_SUPPORTED; -- returnErrorAndResetCallback(AuthenticatorStatus.ALGORITHM_UNSUPPORTED); +- returnErrorAndResetCallback( +- AuthenticatorStatus.ALGORITHM_UNSUPPORTED, +- MakeCredentialOutcome.ALGORITHM_NOT_SUPPORTED, +- /* credentialRequestResult= */ null); - return; - } } - /** -@@ -796,32 +755,6 @@ public class Fido2CredentialRequest + @SuppressWarnings("NewApi") +@@ -909,32 +857,6 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { callback.onIsUserVerifyingPlatformAuthenticatorAvailableResponse(false); return; } @@ -3388,8 +3412,8 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - }); } - public void handleReportRequest( -@@ -1178,16 +1111,6 @@ public class Fido2CredentialRequest + public void handleReportRequest(PublicKeyCredentialReportOptions options, Origin origin) { +@@ -1271,16 +1193,6 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { if (options.mediation == Mediation.CONDITIONAL) { mCancellableUiState = CancellableUiState.REQUEST_SENT_TO_PLATFORM; } @@ -3400,60 +3424,55 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - publicKeyOptions, - Uri.parse(callerOriginString), - clientDataHash, -- getMaybeResultReceiver(), -- this::onGotPendingIntent, -- this::onBinderCallException); +- getMaybeResultReceiver(requestType), +- (pendingIntent) -> onGotPendingIntent(pendingIntent, requestType), +- (e) -> onBinderCallException(e, requestType)); } private void handleNonCredentialReturn(GetCredentialOptions options, Integer reason) { -@@ -1231,34 +1154,6 @@ public class Fido2CredentialRequest - return; - } - mCancellableUiState = CancellableUiState.REQUEST_SENT_TO_PLATFORM; +@@ -1325,29 +1237,6 @@ public class Fido2CredentialRequest implements WebauthnBrowserBridge.Provider { + assert mCancellableUiState == CancellableUiState.NONE + || mCancellableUiState == CancellableUiState.REQUEST_SENT_TO_PLATFORM + || mCancellableUiState == CancellableUiState.WAITING_FOR_SELECTION; - -- Fido2ApiCallParams params = -- WebauthnModeProvider.getInstance() -- .getFido2ApiCallParams(mAuthenticationContextProvider.getWebContents()); -- assertNonNull(mAuthenticationContextProvider.getContext()); -- assertNonNull(params); -- Fido2ApiCall call = new Fido2ApiCall(mAuthenticationContextProvider.getContext(), params); -- Parcel args = call.start(); -- String callbackDescriptor = params.mCallbackDescriptor; -- Fido2ApiCall.PendingIntentResult result = -- new Fido2ApiCall.PendingIntentResult(callbackDescriptor); -- args.writeStrongBinder(result); -- args.writeInt(1); // This indicates that the following options are present. -- Fido2Api.appendBrowserGetAssertionOptionsToParcel( -- options, -- Uri.parse(callerOriginString), -- clientDataHash, -- /* tunnelId= */ null, -- /* resultReceiver= */ null, -- args); -- Task task = -- call.run( -- Fido2ApiCall.METHOD_BROWSER_HYBRID_SIGN, -- Fido2ApiCall.TRANSACTION_HYBRID_SIGN, -- args, -- result); -- task.addOnSuccessListener(this::onGotPendingIntent); -- task.addOnFailureListener(this::onBinderCallException); +- if (mCancellableUiState == CancellableUiState.REQUEST_SENT_TO_PLATFORM) { +- logError( +- TAG, +- "Received a second credential selection while the first still in progress."); +- return; +- } +- if (isConditional) { +- mCancellableUiState = CancellableUiState.REQUEST_SENT_TO_PLATFORM; +- } else { +- mCancellableUiState = CancellableUiState.NONE; +- } +- +- Fido2ApiCallHelper.getInstance() +- .invokeFido2HybridGetAssertion( +- mAuthenticationContextProvider, +- options, +- Uri.parse(callerOriginString), +- clientDataHash, +- (pendingIntent) -> +- onGotPendingIntent( +- pendingIntent, Fido2ApiRequestType.GET_ASSERTION_HYBRID), +- (e) -> onBinderCallException(e, Fido2ApiRequestType.GET_ASSERTION_HYBRID)); } // Handles a PendingIntent from the GMSCore FIDO library. diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreGetCredentialsHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreGetCredentialsHelper.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreGetCredentialsHelper.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreGetCredentialsHelper.java -@@ -10,8 +10,6 @@ import android.os.SystemClock; +@@ -8,8 +8,6 @@ import static org.chromium.components.webauthn.WebauthnLogger.log; - import androidx.annotation.VisibleForTesting; + import android.os.SystemClock; -import com.google.android.gms.tasks.OnFailureListener; - import org.chromium.base.ResettersForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.build.annotations.NullMarked; -@@ -70,6 +68,9 @@ public class GmsCoreGetCredentialsHelper { +@@ -80,6 +78,9 @@ public class GmsCoreGetCredentialsHelper { public interface GetCredentialsCallback { void onCredentialsReceived(List credentials); } @@ -3463,7 +3482,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut public static GmsCoreGetCredentialsHelper getInstance() { if (sInstance == null) { -@@ -100,78 +101,7 @@ public class GmsCoreGetCredentialsHelper { +@@ -109,79 +110,7 @@ public class GmsCoreGetCredentialsHelper { GetCredentialsCallback successCallback, OnFailureListener failureCallback) { log(TAG, "getCredentials with reason: " + reason); @@ -3501,6 +3520,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - startTimeMs); - }); - } else { +- recordNoCacheReason(reason); - getCredentialsFromFido2Api( - authenticationContextProvider, - relyingPartyId, @@ -3672,7 +3692,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/IdentityCredentialsHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/IdentityCredentialsHelper.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/IdentityCredentialsHelper.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/IdentityCredentialsHelper.java -@@ -12,12 +12,6 @@ import android.os.Bundle; +@@ -13,12 +13,6 @@ import android.os.Bundle; import androidx.annotation.VisibleForTesting; @@ -3685,10 +3705,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut import org.jni_zero.JNINamespace; import org.chromium.blink.mojom.AuthenticatorStatus; -@@ -56,53 +50,8 @@ public class IdentityCredentialsHelper { - MakeCredentialResponseCallback responseCallback, - ErrorCallback errorCallback) { +@@ -57,70 +51,15 @@ public class IdentityCredentialsHelper { log(TAG, "handleConditionalCreateRequest"); + WebauthnRequestCallback callback = + assertNonNull(mAuthenticationContextProvider.getRequestCallback()); - try { - IdentityCredentialClient client = - IdentityCredentialManager.Companion.getClient( @@ -3698,19 +3718,20 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - GmsCoreUtils.wrapSuccessCallback( - (handle) -> - onConditionalCreateSuccess( -- clientDataJson, -- options, -- responseCallback, -- errorCallback, -- handle))) +- clientDataJson, options, handle))) - .addOnFailureListener( -- GmsCoreUtils.wrapFailureCallback( -- (exception) -> -- onConditionalCreateFailure(errorCallback, exception))); +- GmsCoreUtils.wrapFailureCallback(this::onConditionalCreateFailure)); - } catch (Exception e) { - logError(TAG, "CreateCredential failed ", e); -- errorCallback.onResult( -- AuthenticatorStatus.NOT_ALLOWED_ERROR, MakeCredentialOutcome.OTHER_FAILURE); +- callback.onComplete( +- WebauthnRequestResponse.forFailedMakeCredential( +- AuthenticatorStatus.NOT_ALLOWED_ERROR, +- new RequestMetrics.Builder() +- .setMakeCredentialOutcome(MakeCredentialOutcome.OTHER_FAILURE) +- .setMakeCredentialResult( +- CredentialRequestResult +- .ANDROID_IDENTITY_CREDENTIALS_ERROR) +- .build())); - return; - } - } @@ -3718,8 +3739,6 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - private void onConditionalCreateSuccess( - byte @Nullable [] clientDataJson, - PublicKeyCredentialCreationOptions options, -- MakeCredentialResponseCallback responseCallback, -- ErrorCallback errorCallback, - CreateCredentialHandle handle) { - log(TAG, "onConditionalCreateSuccess"); - Bundle data = assertNonNull(handle.getCreateCredentialResponse()).getData(); @@ -3727,21 +3746,46 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - CredManHelper.parseCreateCredentialResponseData(data); - if (response == null) { - log(TAG, "parseCreateCredentialResponseData() failed"); -- errorCallback.onResult( -- AuthenticatorStatus.NOT_ALLOWED_ERROR, MakeCredentialOutcome.OTHER_FAILURE); +- assumeNonNull(mAuthenticationContextProvider.getRequestCallback()) +- .onComplete( +- WebauthnRequestResponse.forFailedMakeCredential( +- AuthenticatorStatus.NOT_ALLOWED_ERROR, +- new RequestMetrics.Builder() +- .setMakeCredentialOutcome( +- MakeCredentialOutcome.OTHER_FAILURE) +- .setMakeCredentialResult( +- CredentialRequestResult +- .ANDROID_IDENTITY_CREDENTIALS_ERROR) +- .build())); - return; - } - if (clientDataJson != null) { - response.info.clientDataJson = clientDataJson; - } - response.echoCredProps = options.credProps; -- responseCallback.onRegisterResponse(AuthenticatorStatus.SUCCESS, response); -+ errorCallback.onResult( -+ AuthenticatorStatus.NOT_ALLOWED_ERROR, MakeCredentialOutcome.OTHER_FAILURE); +- assumeNonNull(mAuthenticationContextProvider.getRequestCallback()) +- .onComplete( +- WebauthnRequestResponse.forSuccessfulMakeCredential( +- response, +- new RequestMetrics.Builder() +- .setMakeCredentialOutcome(MakeCredentialOutcome.SUCCESS) +- .setMakeCredentialResult( +- CredentialRequestResult +- .ANDROID_IDENTITY_CREDENTIALS_SUCCESS) +- .build())); ++ callback.onComplete( ++ WebauthnRequestResponse.forFailedMakeCredential( ++ AuthenticatorStatus.NOT_ALLOWED_ERROR, ++ new RequestMetrics.Builder() ++ .setMakeCredentialOutcome(MakeCredentialOutcome.OTHER_FAILURE) ++ .setMakeCredentialResult( ++ CredentialRequestResult ++ .ANDROID_IDENTITY_CREDENTIALS_ERROR) ++ .build())); } - private void onConditionalCreateFailure(ErrorCallback errorCallback, Exception e) { -@@ -125,70 +74,6 @@ public class IdentityCredentialsHelper { + private void onConditionalCreateFailure(Exception e) { +@@ -153,70 +92,6 @@ public class IdentityCredentialsHelper { // Dispatches a Report request. public void handleReportRequest(PublicKeyCredentialReportOptions options, String origin) { @@ -3762,8 +3806,8 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - logError(TAG, "handleReportRequest failed ", e); - return; - } - } - +- } +- - @VisibleForTesting - public SignalCredentialStateRequest buildSignalCredentialStateRequest( - PublicKeyCredentialReportOptions options, String origin) { @@ -3783,8 +3827,8 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - requestDataBundle.putCharSequence(CRED_MAN_PREFIX + "signal_request_json_key", requestJson); - - return new SignalCredentialStateRequest(type, origin, requestDataBundle); -- } -- + } + - @VisibleForTesting - public CreateCredentialRequest buildConditionalCreateRequest( - PublicKeyCredentialCreationOptions options, @@ -3892,7 +3936,7 @@ diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn -@@ -169,10 +169,6 @@ android_library("content_full_java") { +@@ -165,10 +165,6 @@ android_library("content_full_java") { ":content_java_resources", ":content_main_dex_java", ":content_util_java", @@ -3906,7 +3950,7 @@ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn -@@ -3803,10 +3803,6 @@ if (is_android) { +@@ -3806,10 +3806,6 @@ if (is_android) { testonly = true sources = content_java_sources_needing_jni deps = [ @@ -4401,7 +4445,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. if (!defined(guava_android_target)) { java_prebuilt("com_google_guava_guava_java") { -@@ -965,190 +596,6 @@ template("define_autorolled_targets") { +@@ -974,190 +605,6 @@ template("define_autorolled_targets") { ] } @@ -4413,7 +4457,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4431,7 +4475,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4455,7 +4499,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4478,7 +4522,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4501,7 +4545,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4521,7 +4565,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4541,7 +4585,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4563,7 +4607,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4582,7 +4626,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4592,7 +4636,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_auto_value_auto_value_annotations_java") { jar_path = "autorolled/cipd/libs/com_google_auto_value_auto_value_annotations/auto-value-annotations.jar" -@@ -1165,242 +612,6 @@ template("define_autorolled_targets") { +@@ -1174,242 +621,6 @@ template("define_autorolled_targets") { testonly = true } @@ -4606,7 +4650,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4623,7 +4667,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4650,7 +4694,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4671,7 +4715,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4695,7 +4739,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4712,7 +4756,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4734,7 +4778,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4754,7 +4798,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4774,7 +4818,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4799,7 +4843,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4820,7 +4864,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4835,7 +4879,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_guava_failureaccess_java") { jar_path = "autorolled/cipd/libs/com_google_guava_failureaccess/failureaccess.jar" -@@ -1923,28 +1134,6 @@ template("define_autorolled_targets") { +@@ -1945,28 +1156,6 @@ template("define_autorolled_targets") { deps = [ "//third_party/android_deps:org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_java" ] } @@ -4849,7 +4893,7 @@ diff --git a/third_party/android_deps/autorolled/BUILD.gn b/third_party/android_ - enable_bytecode_checks = false - - # To remove visibility constraint, add this dependency to -- # //third_party/android_deps/autorolled/build.gradle. +- # //third_party/android_deps/autorolled/build.gradle.template - visibility = [ - ":*", - "//third_party/androidx:*", @@ -4917,7 +4961,7 @@ diff --git a/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServices diff --git a/third_party/androidx/customizations.gni b/third_party/androidx/customizations.gni --- a/third_party/androidx/customizations.gni +++ b/third_party/androidx/customizations.gni -@@ -160,7 +160,7 @@ template("androidx_java_prebuilt") { +@@ -163,7 +163,7 @@ template("androidx_java_prebuilt") { } } @@ -4926,7 +4970,7 @@ diff --git a/third_party/androidx/customizations.gni b/third_party/androidx/cust _androidx_prebuilt(target_name) { forward_variables_from(invoker, "*") target_type = "android_aar_prebuilt" -@@ -177,6 +177,18 @@ template("androidx_android_aar_prebuilt") { +@@ -180,6 +180,18 @@ template("androidx_android_aar_prebuilt") { } } diff --git a/build/patches/Restore-Simplified-NTP-launch.patch b/build/patches/Restore-Simplified-NTP-launch.patch index 07e0bec4..f5e608bd 100644 --- a/build/patches/Restore-Simplified-NTP-launch.patch +++ b/build/patches/Restore-Simplified-NTP-launch.patch @@ -68,7 +68,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -55,6 +55,11 @@ chrome_java_resources = [ +@@ -53,6 +53,11 @@ chrome_java_resources = [ "java/res/drawable-hdpi/ic_exit_to_app_white_24dp.png", "java/res/drawable-hdpi/ic_file_download_white_24dp.png", "java/res/drawable-hdpi/ic_link_grey600_36dp.png", @@ -80,7 +80,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/drawable-hdpi/ic_phone_googblue_36dp.png", "java/res/drawable-hdpi/ic_photo_camera.png", "java/res/drawable-hdpi/ic_place_googblue_36dp.png", -@@ -563,6 +568,7 @@ chrome_java_resources = [ +@@ -538,6 +543,7 @@ chrome_java_resources = [ "java/res/layout/manage_sync_settings_bottom_bar.xml", "java/res/layout/material_tooltip.xml", "java/res/layout/multiline_spinner_item.xml", @@ -88,7 +88,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/layout/mv_tiles_layout.xml", "java/res/layout/navigation_bubble.xml", "java/res/layout/navigation_sheet.xml", -@@ -572,8 +578,10 @@ chrome_java_resources = [ +@@ -547,8 +553,10 @@ chrome_java_resources = [ "java/res/layout/new_custom_tab_toolbar.xml", "java/res/layout/new_tab_page_incognito.xml", "java/res/layout/new_tab_page_layout.xml", @@ -102,7 +102,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -630,6 +630,7 @@ chrome_java_sources = [ +@@ -634,6 +634,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollector.java", "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java", "java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java", @@ -110,7 +110,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java", "java/src/org/chromium/chrome/browser/findinpage/FindToolbarManager.java", "java/src/org/chromium/chrome/browser/findinpage/FindToolbarObserver.java", -@@ -1059,6 +1060,7 @@ chrome_java_sources = [ +@@ -1071,6 +1072,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesMetadataUtils.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesLayout.java", @@ -576,12 +576,12 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res 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 -@@ -3475,7 +3475,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt - getStartupMetricsTracker(), +@@ -3472,7 +3472,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mRootUiCoordinator.getExclusiveAccessManager(), mBackPressManager, -- mMultiInstanceManager); -+ mMultiInstanceManager, + mMultiInstanceManager, +- mRecentlyClosedEntriesManager); ++ mRecentlyClosedEntriesManager, + mBookmarkManagerOpenerSupplier); } return mTabDelegateFactory; @@ -589,7 +589,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java -@@ -13,6 +13,7 @@ import org.chromium.build.annotations.Nullable; +@@ -14,6 +14,7 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid; import org.chromium.chrome.browser.back_press.BackPressManager; @@ -597,7 +597,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; -@@ -56,6 +57,8 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -58,6 +59,8 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import java.util.List; import java.util.function.Supplier; @@ -606,7 +606,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe /** * {@link TabDelegateFactory} class to be used in all {@link Tab} instances owned by a {@link * ChromeTabbedActivity}. -@@ -89,6 +92,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { +@@ -92,6 +95,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { private final ObservableSupplier mTopInsetCoordinatorSupplier; private final StartupMetricsTracker mStartupMetricsTracker; private final @Nullable ExclusiveAccessManager mExclusiveAccessManager; @@ -615,30 +615,30 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe private @Nullable NativePageFactory mNativePageFactory; private final BackPressManager mBackPressManager; private final MultiInstanceManager mMultiInstanceManager; -@@ -122,7 +127,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { - StartupMetricsTracker startupMetricsTracker, +@@ -128,7 +133,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { @Nullable ExclusiveAccessManager exclusiveAccessManager, BackPressManager backPressManager, -- MultiInstanceManager multiInstanceManager) { -+ MultiInstanceManager multiInstanceManager, + MultiInstanceManager multiInstanceManager, +- RecentlyClosedEntriesManager recentlyClosedEntriesManager) { ++ RecentlyClosedEntriesManager recentlyClosedEntriesManager, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate; mShareDelegateSupplier = shareDelegateSupplier; -@@ -152,6 +158,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { - mExclusiveAccessManager = exclusiveAccessManager; +@@ -160,6 +166,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { mBackPressManager = backPressManager; mMultiInstanceManager = multiInstanceManager; + mRecentlyClosedEntriesManager = recentlyClosedEntriesManager; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } @Override -@@ -224,7 +231,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { - mTopInsetCoordinatorSupplier, +@@ -235,7 +242,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { mStartupMetricsTracker, mBackPressManager, -- mMultiInstanceManager); -+ mMultiInstanceManager, + mMultiInstanceManager, +- mRecentlyClosedEntriesManager); ++ mRecentlyClosedEntriesManager, + mBookmarkManagerOpenerSupplier); } return mNativePageFactory.createNativePage(url, candidatePage, tab, pdfInfo); @@ -700,7 +700,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java -@@ -150,7 +150,10 @@ public class IdentityDiscController +@@ -151,7 +151,10 @@ public class IdentityDiscController mButtonData.setButtonSpec( buttonSpecWithDrawableAndDescription(mButtonData.getButtonSpec(), email)); @@ -723,7 +723,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.base.lifetime.Destroyable; import org.chromium.base.metrics.RecordUserAction; -@@ -31,6 +32,7 @@ import org.chromium.chrome.browser.app.ChromeActivity; +@@ -33,6 +34,7 @@ import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.bookmarks.BookmarkPage; @@ -731,7 +731,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginAdapter; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.flags.ChromeFeatureList; -@@ -98,6 +100,7 @@ public class NativePageFactory { +@@ -104,6 +106,7 @@ public class NativePageFactory { private final ObservableSupplier mEdgeToEdgeControllerSupplier; private final ObservableSupplier mTopInsetCoordinatorSupplier; private final StartupMetricsTracker mStartupMetricsTracker; @@ -739,38 +739,38 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private @Nullable NewTabPageCreationTracker mNewTabPageCreationTracker; private @Nullable NativePageBuilder mNativePageBuilder; -@@ -124,7 +127,8 @@ public class NativePageFactory { - ObservableSupplier topInsetCoordinatorSupplier, +@@ -134,7 +137,8 @@ public class NativePageFactory { StartupMetricsTracker startupMetricsTracker, BackPressManager backPressManager, -- MultiInstanceManager multiInstanceManager) { -+ MultiInstanceManager multiInstanceManager, + MultiInstanceManager multiInstanceManager, +- RecentlyClosedEntriesManager recentlyClosedEntriesManager) { ++ RecentlyClosedEntriesManager recentlyClosedEntriesManager, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mBottomSheetController = sheetController; mBrowserControlsManager = browserControlsManager; -@@ -144,6 +148,7 @@ public class NativePageFactory { - mStartupMetricsTracker = startupMetricsTracker; +@@ -157,6 +161,7 @@ public class NativePageFactory { mBackPressManager = backPressManager; mMultiInstanceManager = multiInstanceManager; + mRecentlyClosedEntriesManager = recentlyClosedEntriesManager; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } private NativePageBuilder getBuilder() { -@@ -169,7 +174,8 @@ public class NativePageFactory { - mTopInsetCoordinatorSupplier, +@@ -185,7 +190,8 @@ public class NativePageFactory { mStartupMetricsTracker, mBackPressManager, -- mMultiInstanceManager); -+ mMultiInstanceManager, + mMultiInstanceManager, +- mRecentlyClosedEntriesManager); ++ mRecentlyClosedEntriesManager, + mBookmarkManagerOpenerSupplier); } return mNativePageBuilder; } -@@ -204,9 +210,10 @@ public class NativePageFactory { - private final StartupMetricsTracker mStartupMetricsTracker; +@@ -223,9 +229,10 @@ public class NativePageFactory { private final BackPressManager mBackPressManager; private final MultiInstanceManager mMultiInstanceManager; + private final RecentlyClosedEntriesManager mRecentlyClosedEntriesManager; + private final ObservableSupplier mBookmarkManagerOpenerSupplier; public NativePageBuilder( @@ -779,25 +779,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat Supplier newTabPageCreationTracker, BottomSheetController sheetController, BrowserControlsManager browserControlsManager, -@@ -225,7 +232,8 @@ public class NativePageFactory { - ObservableSupplier topInsetCoordinatorSupplier, +@@ -247,7 +254,8 @@ public class NativePageFactory { StartupMetricsTracker startupMetricsTracker, BackPressManager backPressManager, -- MultiInstanceManager multiInstanceManager) { -+ MultiInstanceManager multiInstanceManager, + MultiInstanceManager multiInstanceManager, +- RecentlyClosedEntriesManager recentlyClosedEntriesManager) { ++ RecentlyClosedEntriesManager recentlyClosedEntriesManager, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mNewTabPageCreationTracker = newTabPageCreationTracker; mBottomSheetController = sheetController; -@@ -246,6 +254,7 @@ public class NativePageFactory { - mStartupMetricsTracker = startupMetricsTracker; +@@ -271,6 +279,7 @@ public class NativePageFactory { mBackPressManager = backPressManager; mMultiInstanceManager = multiInstanceManager; + mRecentlyClosedEntriesManager = recentlyClosedEntriesManager; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } protected NativePage buildNewTabPage(Tab tab, String url) { -@@ -288,7 +297,8 @@ public class NativePageFactory { +@@ -315,7 +324,8 @@ public class NativePageFactory { mEdgeToEdgeControllerSupplier, mTopInsetCoordinatorSupplier, mStartupMetricsTracker, @@ -822,8 +822,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat 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 -@@ -133,6 +133,9 @@ import org.chromium.ui.base.DeviceFormFactor; - import org.chromium.ui.base.WindowAndroid; +@@ -137,6 +137,9 @@ import org.chromium.ui.base.WindowAndroid; + import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; +import androidx.annotation.NonNull; @@ -832,7 +832,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import java.util.List; import java.util.function.Supplier; -@@ -534,7 +537,8 @@ public class NewTabPage +@@ -544,7 +547,8 @@ public class NewTabPage ObservableSupplier edgeToEdgeControllerSupplier, ObservableSupplier topInsetCoordinatorSupplier, StartupMetricsTracker startupMetricsTracker, @@ -842,7 +842,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. mConstructedTimeNs = System.nanoTime(); TraceEvent.begin(TAG); -@@ -563,7 +567,7 @@ public class NewTabPage +@@ -573,7 +577,7 @@ public class NewTabPage nativePageHost, tabModelSelector, mTab, @@ -870,15 +870,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL import org.chromium.chrome.browser.lens.LensMetrics; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.logo.LogoBridge.Logo; -@@ -60,6 +62,7 @@ import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCoordinator; +@@ -61,6 +63,7 @@ import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCoordinator; import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesLayout; import org.chromium.chrome.browser.suggestions.tile.TileGroup; import org.chromium.chrome.browser.suggestions.tile.TileGroup.Delegate; +import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesGridLayout; import org.chromium.chrome.browser.tab_ui.InvalidationAwareThumbnailProvider; + import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; - import org.chromium.chrome.browser.ui.signin.signin_promo.NtpSigninPromoCoordinator; -@@ -111,6 +114,8 @@ public class NewTabPageLayout extends LinearLayout +@@ -123,6 +126,8 @@ public class NewTabPageLayout extends LinearLayout private @Nullable DisplayStyleObserver mDisplayStyleObserver; private CallbackController mCallbackController = new CallbackController(); @@ -887,7 +887,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL /** * Whether the tiles shown in the layout have finished loading. * With {@link #mHasShownView}, it's one of the 2 flags used to track initialisation progress. -@@ -123,7 +128,7 @@ public class NewTabPageLayout extends LinearLayout +@@ -135,7 +140,7 @@ public class NewTabPageLayout extends LinearLayout */ private boolean mHasShownView; @@ -896,7 +896,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL private boolean mSearchProviderIsGoogle; private boolean mShowingNonStandardGoogleLogo; private boolean mIsOmniboxMobileParityUpdateV2Enabled; -@@ -131,7 +136,7 @@ public class NewTabPageLayout extends LinearLayout +@@ -143,7 +148,7 @@ public class NewTabPageLayout extends LinearLayout private boolean mInitialized; private float mUrlFocusChangePercent; @@ -905,7 +905,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL private boolean mIsViewMoving; /** Flag used to request some layout changes after the next layout pass is completed. */ -@@ -308,6 +313,7 @@ public class NewTabPageLayout extends LinearLayout +@@ -336,6 +341,7 @@ public class NewTabPageLayout extends LinearLayout initializeMostVisitedTilesCoordinator( mProfile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate); initializeDseIconView(shouldShowDseIcon()); @@ -913,7 +913,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLensButton(); -@@ -742,8 +748,8 @@ public class NewTabPageLayout extends LinearLayout +@@ -784,8 +790,8 @@ public class NewTabPageLayout extends LinearLayout private void calculateTabletMvtWidth(int totalWidth) { if (mMvTilesContainerLayout.getVisibility() == GONE) return; @@ -924,7 +924,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL updateMvtOnTablet(); } -@@ -793,7 +799,7 @@ public class NewTabPageLayout extends LinearLayout +@@ -835,7 +841,7 @@ public class NewTabPageLayout extends LinearLayout && mInitialized) { return; } @@ -933,7 +933,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL mSearchProviderIsGoogle = isGoogle; if (!mSearchProviderIsGoogle) { -@@ -842,6 +848,7 @@ public class NewTabPageLayout extends LinearLayout +@@ -879,6 +885,7 @@ public class NewTabPageLayout extends LinearLayout * @param disable Whether to disable the animations. */ void setUrlFocusAnimationsDisabled(boolean disable) { @@ -941,7 +941,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL if (disable == mDisableUrlFocusChangeAnimations) return; mDisableUrlFocusChangeAnimations = disable; if (!disable) onUrlFocusAnimationChanged(); -@@ -1246,6 +1253,22 @@ public class NewTabPageLayout extends LinearLayout +@@ -1280,6 +1287,22 @@ public class NewTabPageLayout extends LinearLayout return mMostVisitedTilesCoordinator; } @@ -1357,7 +1357,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til TileRenderer renderer, PropertyModel propertyModel, boolean isTablet, -@@ -214,12 +214,10 @@ public class MostVisitedTilesMediator implements TileGroup.Observer { +@@ -215,12 +215,10 @@ public class MostVisitedTilesMediator implements TileGroup.Observer { @Override public void onCustomTileCreation(Tile tile) { @@ -1370,7 +1370,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til } public void onConfigurationChanged() { -@@ -329,7 +327,5 @@ public class MostVisitedTilesMediator implements TileGroup.Observer { +@@ -330,7 +328,5 @@ public class MostVisitedTilesMediator implements TileGroup.Observer { double firstTileScore = mTileGroup.getSuggestionScore(firstTile.getUrl()); if (firstTileScore < MVT_CUSTOMIZATION_IPH_TILE_SCORE_THRESHOULD) return; @@ -1445,7 +1445,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java -@@ -174,7 +174,7 @@ public class TileRenderer { +@@ -172,7 +172,7 @@ public class TileRenderer { */ public void renderTileSection( List sectionTiles, @@ -1454,7 +1454,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til TileGroup.TileSetupDelegate setupDelegate) { try (TraceEvent e = TraceEvent.scoped("TileRenderer.renderTileSection")) { // Map the old tile views by url so they can be reused later. -@@ -212,7 +212,7 @@ public class TileRenderer { +@@ -210,7 +210,7 @@ public class TileRenderer { if (prevTile != null && (prevTile.getData().source == TileSource.CUSTOM_LINKS) != (tile.getData().source == TileSource.CUSTOM_LINKS)) { @@ -1463,7 +1463,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til } parent.addTile(tileView); if (focusedUrl != null && focusedUrl.equals(tile.getUrl().getSpec())) { -@@ -228,7 +228,7 @@ public class TileRenderer { +@@ -226,7 +226,7 @@ public class TileRenderer { if (shouldShowAddNewButton(sectionTiles)) { TileView addCustomLinksButton = buildAddCustomLinksButton(parent, setupDelegate); @@ -1472,7 +1472,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til } } } -@@ -263,7 +263,7 @@ public class TileRenderer { +@@ -261,7 +261,7 @@ public class TileRenderer { */ @VisibleForTesting SuggestionsTileView buildTileView( @@ -1481,7 +1481,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til SuggestionsTileView tileView = (SuggestionsTileView) LayoutInflater.from(parent.getContext()) -@@ -330,7 +330,7 @@ public class TileRenderer { +@@ -324,7 +324,7 @@ public class TileRenderer { return tileView; } @@ -1490,7 +1490,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til return (SuggestionsTileVerticalDivider) LayoutInflater.from(parent.getContext()) .inflate(R.layout.suggestions_tile_vertical_divider, parent, false); -@@ -351,7 +351,7 @@ public class TileRenderer { +@@ -345,7 +345,7 @@ public class TileRenderer { } TileView buildAddCustomLinksButton( @@ -1514,7 +1514,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/til diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc --- a/chrome/browser/engagement/important_sites_util.cc +++ b/chrome/browser/engagement/important_sites_util.cc -@@ -60,7 +60,7 @@ static const int kTimesIgnoredForSuppression = 3; +@@ -59,7 +59,7 @@ static const int kTimesIgnoredForSuppression = 3; // These are the maximum # of bookmarks we can use as signals. If the user has // <= kMaxBookmarks, then we just use those bookmarks. Otherwise we filter all // bookmarks on site engagement > 0, sort, and trim to kMaxBookmarks. @@ -1526,9 +1526,9 @@ diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/ 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 -@@ -354,6 +354,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { - &kInstanceSwitcherV2, +@@ -348,6 +348,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kKeyboardEscBackNavigation, + &kLaunchCauseScreenOffFix, &kLensOnQuickActionSearchWidget, + &kSimplifiedNTP, &kLinkHoverStatusBar, @@ -1537,18 +1537,18 @@ 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 -@@ -502,6 +502,7 @@ public abstract class ChromeFeatureList { +@@ -489,6 +489,7 @@ public abstract class ChromeFeatureList { + "MayLaunchUrlUsesSeparateStoragePartition"; public static final String MEDIA_INDICATORS_ANDROID = "MediaIndicatorsAndroid"; - public static final String MINI_ORIGIN_BAR = "MiniOriginBar"; public static final String MOST_VISITED_TILES_CUSTOMIZATION = "MostVisitedTilesCustomization"; + public static final String SIMPLIFIED_NTP = "SimplifiedNTP"; public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox"; public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect"; - public static final String MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP = -@@ -980,7 +981,7 @@ public abstract class ChromeFeatureList { - newCachedFlag(LOCK_BACK_PRESS_HANDLER_AT_START, true); - public static final CachedFlag sLockTopControlsOnLargeTabletsV2 = - newCachedFlag(LOCK_TOP_CONTROLS_ON_LARGE_TABLETS_V2, false); + public static final String MOVE_TO_FRONT_IN_LAUNCH_INTENT_DISPATCHER = +@@ -961,7 +962,7 @@ public abstract class ChromeFeatureList { + newCachedFlag( + LOCK_TOP_CONTROLS_ON_LARGE_TABLETS_V2, + /* defaultValue= */ false); - public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); + public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, false); public static final CachedFlag sMaliciousApkDownloadCheck = @@ -1581,7 +1581,7 @@ diff --git a/chrome/browser/segmentation_platform/android/java/src/org/chromium/ 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 -@@ -4013,6 +4013,12 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4027,6 +4027,12 @@ To change this setting, BEGIN_LINKdelete the Chrome d Recent tabs @@ -1621,7 +1621,7 @@ diff --git a/components/ntp_tiles/custom_links_store.cc b/components/ntp_tiles/c diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc -@@ -196,6 +196,7 @@ BASE_FEATURE(kRemoveSearchReadyOmnibox, DISABLED); +@@ -184,6 +184,7 @@ BASE_FEATURE(kRemoveSearchReadyOmnibox, DISABLED); BASE_FEATURE(kDefaultTypedNavigationsToHttps, "OmniboxDefaultTypedNavigationsToHttps", enable_if(IS_IOS)); @@ -1629,18 +1629,18 @@ diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/ // Override the delay to create a spare renderer when the omnibox is focused // on Android. -@@ -282,6 +283,7 @@ BASE_FEATURE(kOmniboxMobileParityUpdate, ENABLED); +@@ -270,6 +271,7 @@ BASE_FEATURE(kOmniboxMobileParityUpdate, ENABLED); // Updates various NTP/Omnibox assets and descriptions for visual alignment on // Android and iOS, V2. BASE_FEATURE(kOmniboxMobileParityUpdateV2, ENABLED); +SET_CROMITE_FEATURE_DISABLED(kOmniboxMobileParityUpdateV2); - #if BUILDFLAG(IS_IOS) - // Updates the search engine logo on NTP. iOS only. + // The features below allow tuning number of suggestions offered to users in + // specific contexts. These features are default enabled and are used to control 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 -@@ -802,9 +802,9 @@ class TemplateURL { +@@ -801,9 +801,9 @@ class TemplateURL { } const GURL& favicon_url() const { return data().favicon_url; } 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 145a4cee..4665ceb0 100644 --- a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -9,7 +9,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../ReaderModeToolbarButtonController.java | 4 ++-- .../ContextualPageActionController.java | 4 ++++ - .../chrome/browser/settings/MainSettings.java | 9 +-------- + .../chrome/browser/settings/MainSettings.java | 2 +- .../segmentation_platform_config.cc | 1 + .../strings/android_chrome_strings.grd | 3 +++ ...tton_group_adaptive_toolbar_preference.xml | 9 +++++++++ @@ -20,13 +20,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 + - 13 files changed, 43 insertions(+), 21 deletions(-) + 13 files changed, 43 insertions(+), 14 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 -@@ -79,11 +79,11 @@ public class ReaderModeToolbarButtonController extends BaseButtonDataProvider +@@ -71,11 +71,11 @@ public class ReaderModeToolbarButtonController extends BaseButtonDataProvider modalDialogManager, AppCompatResources.getDrawable(context, R.drawable.ic_mobile_friendly_24dp), context.getString(R.string.reader_mode_cpa_button_text), @@ -38,12 +38,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/R - /* tooltipTextResId= */ R.string.show_reading_mode_text); + /* tooltipTextResId= */ R.string.reader_mode_action_chip_label_simplify_page); - mContext = context; - mActivityTabProvider = activityTabProvider; + mReaderModeIphControllerSupplier = readerModeIphControllerSupplier; + mActivityTabObserver = 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 -@@ -292,6 +292,10 @@ public class ContextualPageActionController { +@@ -293,6 +293,10 @@ public class ContextualPageActionController { && mTabSupplier.get().getId() == tab.getId(); if (!isSameTab) return; @@ -57,26 +57,19 @@ 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 -@@ -350,14 +350,7 @@ public class MainSettings extends ChromeBaseSettingsFragment - getContext(), - getProfile(), - /* androidPermissionDelegate= */ null, -- /* behavior= */ null) -- .recomputeUiState( -- uiState -> { -- // Don't show toolbar shortcut settings if disabled from finch. -- if (!uiState.canShowUi) { -- removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); -- } -- }); -+ /* behavior= */ null); - // LINT.ThenChange(//chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java:InitPrefToolbarShortcut) +@@ -343,7 +343,7 @@ public class MainSettings extends ChromeBaseSettingsFragment + getContext(), + getProfile(), + (shouldShow) -> { +- if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); ++ if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); <-- check if needed + }); // LINT.IfChange(InitPrefUiTheme) diff --git a/chrome/browser/segmentation_platform/segmentation_platform_config.cc b/chrome/browser/segmentation_platform/segmentation_platform_config.cc --- a/chrome/browser/segmentation_platform/segmentation_platform_config.cc +++ b/chrome/browser/segmentation_platform/segmentation_platform_config.cc -@@ -74,6 +74,7 @@ constexpr int kAdaptiveToolbarDefaultSelectionTTLDays = 56; +@@ -75,6 +75,7 @@ constexpr int kAdaptiveToolbarDefaultSelectionTTLDays = 56; #if BUILDFLAG(IS_ANDROID) std::unique_ptr GetConfigForAdaptiveToolbar() { @@ -87,7 +80,7 @@ diff --git a/chrome/browser/segmentation_platform/segmentation_platform_config.c 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 -@@ -5085,6 +5085,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -5108,6 +5108,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d View @@ -119,7 +112,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 -@@ -361,7 +361,7 @@ public class AdaptiveToolbarButtonController +@@ -362,7 +362,7 @@ public class AdaptiveToolbarButtonController } private boolean isScreenWideEnoughForButton() { @@ -205,7 +198,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow private @AdaptiveToolbarButtonVariant int mSelected; private @AdaptiveToolbarButtonVariant int mAutoButtonCaption; private @Nullable AdaptiveToolbarStatePredictor mStatePredictor; -@@ -68,6 +69,7 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -67,6 +68,7 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut mAutoButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_based_on_usage); @@ -213,7 +206,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mNewTabButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_new_tab); mShareButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_share); -@@ -75,6 +77,7 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -74,6 +76,7 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_voice_search); mTranslateButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_translate); @@ -221,7 +214,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mAddToBookmarksButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_add_to_bookmarks); -@@ -82,6 +85,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -81,6 +84,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_read_aloud); mPageSummaryButton = (RadioButtonWithDescription) holder.findViewById(R.id.adaptive_option_page_summary); @@ -230,7 +223,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mIsBound = true; -@@ -159,13 +164,6 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -158,13 +163,6 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut mAutoButton.setDescriptionText( getContext().getString(resId, getButtonString(uiState.autoButtonCaption))); @@ -244,7 +237,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow updateVoiceButtonVisibility(); updateReadAloudButtonVisibility(); updatePageSummaryButtonVisibility(); -@@ -193,6 +191,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -191,6 +189,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut mSelected = AdaptiveToolbarButtonVariant.READ_ALOUD; } else if (mPageSummaryButton.isChecked()) { mSelected = AdaptiveToolbarButtonVariant.PAGE_SUMMARY; @@ -253,7 +246,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow } else { assert false : "No matching setting found."; } -@@ -232,6 +232,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -230,6 +230,8 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut return mReadAloudButton; case AdaptiveToolbarButtonVariant.PAGE_SUMMARY: return mPageSummaryButton; @@ -262,7 +255,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow } return null; } -@@ -263,6 +265,9 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut +@@ -261,6 +263,9 @@ public class RadioButtonGroupAdaptiveToolbarPreference extends ContainedRadioBut case AdaptiveToolbarButtonVariant.OPEN_IN_BROWSER: stringRes = R.string.menu_open_in_product_default; break; diff --git a/build/patches/Revert-Permit-blocking-of-view-source.patch b/build/patches/Revert-Permit-blocking-of-view-source.patch index 15a06c0c..f337839a 100644 --- a/build/patches/Revert-Permit-blocking-of-view-source.patch +++ b/build/patches/Revert-Permit-blocking-of-view-source.patch @@ -6,18 +6,27 @@ This reverts commit e72fc9b64116bf259e516096fcc60b58ae8ae1b3. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../policy/content/policy_blocklist_navigation_throttle.cc | 1 + - 1 file changed, 1 insertion(+) + .../policy/content/policy_blocklist_navigation_throttle.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/policy/content/policy_blocklist_navigation_throttle.cc b/components/policy/content/policy_blocklist_navigation_throttle.cc --- a/components/policy/content/policy_blocklist_navigation_throttle.cc +++ b/components/policy/content/policy_blocklist_navigation_throttle.cc -@@ -59,6 +59,7 @@ PolicyBlocklistNavigationThrottle::~PolicyBlocklistNavigationThrottle() = - default; +@@ -67,7 +67,7 @@ bool PolicyBlocklistNavigationThrottle::IsViewSourceNavigation() { - bool PolicyBlocklistNavigationThrottle::IsBlockedViewSourceNavigation() { -+ if ((true)) return false; - content::NavigationEntry* nav_entry = - navigation_handle()->GetNavigationEntry(); - if (!nav_entry || !nav_entry->IsViewSourceMode()) { + PolicyBlocklistState + PolicyBlocklistNavigationThrottle::GetViewSourceNavigationBlocklistState() { +- CHECK(IsViewSourceNavigation()); ++ CHECK(false); + GURL view_source_url = + GURL(std::string("view-source:") + navigation_handle()->GetURL().spec()); + +@@ -100,6 +100,7 @@ PolicyBlocklistNavigationThrottle::WillStartOrRedirectRequest( + // If the navigation is to view-source, check if the view-source:url should + // be blocked. + if (IsViewSourceNavigation()) { ++ if ((true)) return PROCEED; + PolicyBlocklistState view_source_blocklist_state = + GetViewSourceNavigationBlocklistState(); + if (view_source_blocklist_state.url_blocklist_state == -- diff --git a/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch b/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch index 7859ec64..6bf21b6b 100644 --- a/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch +++ b/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch @@ -9,7 +9,7 @@ The feature can be disabled using the throttle-main-thread-to-60hz flag (enabled License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - cc/base/features.cc | 3 ++- + cc/base/features.cc | 9 ++------- cc/scheduler/scheduler_state_machine.cc | 17 +++++++++++++++++ .../java/res/xml/privacy_preferences.xml | 6 ++++++ chrome/browser/about_flags.cc | 6 +++--- @@ -25,23 +25,29 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../Set-the-screen-frame-rate-to-60-Hz.inc | 7 +++++++ .../renderer/core/animation/animation_clock.cc | 11 ++++++++--- .../core/view_transition/view_transition.cc | 2 ++ - 16 files changed, 119 insertions(+), 12 deletions(-) + 16 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Set-the-screen-frame-rate-to-60-Hz.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Set-the-screen-frame-rate-to-60-Hz.inc diff --git a/cc/base/features.cc b/cc/base/features.cc --- a/cc/base/features.cc +++ b/cc/base/features.cc -@@ -135,7 +135,7 @@ BASE_FEATURE(kPreventDuplicateImageDecodes, base::FEATURE_DISABLED_BY_DEFAULT); - +@@ -136,13 +136,7 @@ BASE_FEATURE(kPreventDuplicateImageDecodes, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kInitImageDecodeLastUseTime, base::FEATURE_ENABLED_BY_DEFAULT); --BASE_FEATURE(kThrottleMainFrameTo60Hz, base::FEATURE_DISABLED_BY_DEFAULT); + // Enabled on Android, after a field trial showed improvements. +-BASE_FEATURE(kThrottleMainFrameTo60Hz, +-#if BUILDFLAG(IS_ANDROID) +- base::FEATURE_ENABLED_BY_DEFAULT +-#else +- base::FEATURE_DISABLED_BY_DEFAULT +-#endif +-); +CROMITE_FEATURE(kThrottleMainFrameTo60Hz, "ThrottleMainFrameTo60Hz", base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kBoostFrameRateForUrgentMainFrame, - base::FEATURE_DISABLED_BY_DEFAULT); -@@ -163,6 +163,7 @@ BASE_FEATURE(kViewTransitionFloorTransform, base::FEATURE_ENABLED_BY_DEFAULT); + #if BUILDFLAG(IS_ANDROID) + BASE_FEATURE(kThrottleMainFrameTo60HzWebView, +@@ -175,6 +169,7 @@ BASE_FEATURE(kViewTransitionFloorTransform, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kRenderThrottleFrameRate, base::FEATURE_ENABLED_BY_DEFAULT); const base::FeatureParam kRenderThrottledFrameIntervalHz{ &kRenderThrottleFrameRate, "render-throttled-frame-interval-hz", 30}; @@ -52,7 +58,7 @@ diff --git a/cc/base/features.cc b/cc/base/features.cc diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc -@@ -1548,6 +1548,15 @@ void SchedulerStateMachine::FrameIntervalUpdated( +@@ -1578,6 +1578,15 @@ void SchedulerStateMachine::FrameIntervalUpdated( // // Apply some slack, so that if for some reason the interval is a bit larger // than 8.33333333333333ms, then we catch it still. @@ -65,10 +71,10 @@ diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_st + } + if ((true)) return; +#endif - // - // Do not enable throttling for the synchronous compositor, as it hasn't been - // evaluated for this use case, as of 09/2025. The aim is to make sure that -@@ -1876,6 +1885,14 @@ base::TimeTicks SchedulerStateMachine::Now() const { + constexpr float kSlackFactor = .9; + bool fast_vsync_interval = + frame_interval < base::Hertz(120) * (1 / kSlackFactor); +@@ -1903,6 +1912,14 @@ base::TimeTicks SchedulerStateMachine::Now() const { } base::TimeDelta SchedulerStateMachine::MainFrameThrottledInterval() const { @@ -86,7 +92,7 @@ diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_st diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -98,6 +98,12 @@ found in the LICENSE file. +@@ -92,6 +92,12 @@ found in the LICENSE file. android:summary="@string/tab_switcher_list_mode_summary" app:featureName="TabSwitcherListMode" app:needRestart="true" /> @@ -102,7 +108,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi 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 -@@ -12052,9 +12052,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -11699,9 +11699,9 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(::features::kBlockRootWindowAccessibleNameChangeEvent)}, #endif // BUILDFLAG(IS_MAC) @@ -118,7 +124,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -52,6 +52,7 @@ +@@ -51,6 +51,7 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/config/chromebox_for_meetings/buildflags.h" // PLATFORM_CFM @@ -126,7 +132,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #include "chrome/browser/after_startup_task_utils.h" #include "chrome/browser/ai/ai_manager.h" #include "chrome/browser/app_mode/app_mode_utils.h" -@@ -305,6 +306,7 @@ +@@ -302,6 +303,7 @@ #include "components/variations/variations_associated_data.h" #include "components/variations/variations_switches.h" #include "components/version_info/version_info.h" @@ -134,7 +140,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #include "components/webapps/common/web_app_id.h" #include "components/webui/chrome_urls/pref_names.h" #include "content/public/browser/attribution_data_model.h" -@@ -2718,6 +2720,15 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( +@@ -2720,6 +2722,15 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( command_line->AppendSwitchASCII(ash::switches::kHomedir, homedir.value()); #endif @@ -167,10 +173,10 @@ new file mode 100644 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 -@@ -97,6 +97,7 @@ const char kMaxOverlaysParam[] = "max_overlays"; +@@ -84,6 +84,7 @@ const char kMaxOverlaysParam[] = "max_overlays"; BASE_FEATURE(kDelegatedCompositing, base::FEATURE_DISABLED_BY_DEFAULT); - BASE_FEATURE(kAvoidDuplicateDelayBeginFrame, base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kAvoidDuplicateDelayBeginFrame, base::FEATURE_ENABLED_BY_DEFAULT); +SET_CROMITE_FEATURE_ENABLED(kAvoidDuplicateDelayBeginFrame); const char kDrawQuadSplit[] = "num_of_splits"; @@ -178,7 +184,7 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features. diff --git a/components/viz/common/frame_sinks/begin_frame_source.cc b/components/viz/common/frame_sinks/begin_frame_source.cc --- a/components/viz/common/frame_sinks/begin_frame_source.cc +++ b/components/viz/common/frame_sinks/begin_frame_source.cc -@@ -25,6 +25,7 @@ +@@ -24,6 +24,7 @@ #include "base/tracing/protos/chrome_track_event.pbzero.h" #include "components/viz/common/features.h" #include "components/viz/common/frame_sinks/delay_based_time_source.h" @@ -186,7 +192,7 @@ diff --git a/components/viz/common/frame_sinks/begin_frame_source.cc b/component namespace viz { -@@ -250,7 +251,10 @@ BackToBackBeginFrameSource::BackToBackBeginFrameSource( +@@ -260,7 +261,10 @@ BackToBackBeginFrameSource::BackToBackBeginFrameSource( time_source_->SetClient(this); // The time_source_ ticks immediately, so we SetActive(true) for a single // tick when we need it, and keep it as SetActive(false) otherwise. @@ -198,7 +204,7 @@ diff --git a/components/viz/common/frame_sinks/begin_frame_source.cc b/component } BackToBackBeginFrameSource::~BackToBackBeginFrameSource() = default; -@@ -308,6 +312,14 @@ void BackToBackBeginFrameSource::OnTimerTick() { +@@ -318,6 +322,14 @@ void BackToBackBeginFrameSource::OnTimerTick() { } base::TimeTicks frame_time = time_source_->LastTickTime(); base::TimeDelta interval = max_vrr_interval_.value_or(vsync_interval_); @@ -216,7 +222,7 @@ diff --git a/components/viz/common/frame_sinks/begin_frame_source.cc b/component diff --git a/components/viz/common/frame_sinks/begin_frame_source.h b/components/viz/common/frame_sinks/begin_frame_source.h --- a/components/viz/common/frame_sinks/begin_frame_source.h +++ b/components/viz/common/frame_sinks/begin_frame_source.h -@@ -339,6 +339,7 @@ class VIZ_COMMON_EXPORT BackToBackBeginFrameSource +@@ -362,6 +362,7 @@ class VIZ_COMMON_EXPORT BackToBackBeginFrameSource pending_begin_frame_observers_; uint64_t next_sequence_number_; base::TimeDelta vsync_interval_ = BeginFrameArgs::DefaultInterval(); @@ -227,7 +233,7 @@ diff --git a/components/viz/common/frame_sinks/begin_frame_source.h b/components diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc --- a/components/viz/service/display/display.cc +++ b/components/viz/service/display/display.cc -@@ -33,6 +33,7 @@ +@@ -32,6 +32,7 @@ #include "base/trace_event/traced_value.h" #include "base/trace_event/typed_macros.h" #include "build/build_config.h" @@ -235,7 +241,7 @@ diff --git a/components/viz/service/display/display.cc b/components/viz/service/ #include "cc/base/math_util.h" #include "cc/base/region.h" #include "cc/base/simple_enclosed_region.h" -@@ -274,8 +275,21 @@ void Display::PresentationGroupTiming::OnSwap(gfx::SwapTimings timings, +@@ -272,8 +273,21 @@ void Display::PresentationGroupTiming::OnSwap(gfx::SwapTimings timings, auto frame_latency = timings.swap_start - frame_time_; if (frame_latency < base::Seconds(0)) { @@ -319,7 +325,7 @@ diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl. #include "components/viz/common/features.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/service/display/display.h" -@@ -753,7 +754,10 @@ void RootCompositorFrameSinkImpl::FrameIntervalDeciderResultCallback( +@@ -757,7 +758,10 @@ void RootCompositorFrameSinkImpl::FrameIntervalDeciderResultCallback( result); interval = interval_and_compat.first; gfx::SurfaceControlFrameRateCompatibility compat = interval_and_compat.second; @@ -331,7 +337,7 @@ diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl. if (decided_display_interval_ == interval && decided_display_frame_rate_compat_ == compat) { return; -@@ -775,7 +779,9 @@ void RootCompositorFrameSinkImpl::FrameIntervalDeciderResultCallback( +@@ -779,7 +783,9 @@ void RootCompositorFrameSinkImpl::FrameIntervalDeciderResultCallback( return interval.interval; }), result); @@ -385,7 +391,7 @@ diff --git a/third_party/blink/renderer/core/animation/animation_clock.cc b/thir diff --git a/third_party/blink/renderer/core/view_transition/view_transition.cc b/third_party/blink/renderer/core/view_transition/view_transition.cc --- a/third_party/blink/renderer/core/view_transition/view_transition.cc +++ b/third_party/blink/renderer/core/view_transition/view_transition.cc -@@ -989,8 +989,10 @@ CSSStyleSheet* ViewTransition::UAStyleSheet() const { +@@ -998,8 +998,10 @@ CSSStyleSheet* ViewTransition::UAStyleSheet() const { void ViewTransition::WillCommitCompositorFrame() { // There should only be 1 commit when we're in the capturing phase and // rendering is paused immediately after it finishes. diff --git a/build/patches/WIN-Disable-updater.patch b/build/patches/WIN-Disable-updater.patch index 7e321284..0bb8136f 100644 --- a/build/patches/WIN-Disable-updater.patch +++ b/build/patches/WIN-Disable-updater.patch @@ -4,9 +4,9 @@ Subject: WIN Disable updater --- chrome/browser/active_use_util.h | 2 +- - chrome/browser/updater/BUILD.gn | 16 ------- - .../browser/updater/browser_updater_client.cc | 46 +------------------ - 3 files changed, 2 insertions(+), 62 deletions(-) + chrome/browser/updater/BUILD.gn | 14 ------ + .../browser/updater/browser_updater_client.cc | 43 +------------------ + 3 files changed, 2 insertions(+), 57 deletions(-) diff --git a/chrome/browser/active_use_util.h b/chrome/browser/active_use_util.h --- a/chrome/browser/active_use_util.h @@ -22,23 +22,21 @@ diff --git a/chrome/browser/active_use_util.h b/chrome/browser/active_use_util.h diff --git a/chrome/browser/updater/BUILD.gn b/chrome/browser/updater/BUILD.gn --- a/chrome/browser/updater/BUILD.gn +++ b/chrome/browser/updater/BUILD.gn -@@ -31,22 +31,6 @@ if (is_win || is_mac) { - "//components/version_info", +@@ -38,20 +38,6 @@ source_set("updater") { + "//chrome/updater/mojom", ] - if (is_win) { -- sources += [ "browser_updater_client_win.cc" ] -- -- if (enable_updater) { -- sources += [ "browser_updater_client_util_win.cc" ] -- } else { -- sources += [ "browser_updater_client_util_no_updater.cc" ] -- } -- +- sources += [ +- "browser_updater_client_util_win.cc", +- "browser_updater_client_win.cc", +- "scheduler_win.cc", +- ] - deps += [ - "//chrome/browser/google", - "//chrome/install_static:install_static_util", - "//chrome/installer/util:with_no_strings", +- "//chrome/updater:browser_sources", - ] - } - @@ -48,7 +46,7 @@ diff --git a/chrome/browser/updater/BUILD.gn b/chrome/browser/updater/BUILD.gn diff --git a/chrome/browser/updater/browser_updater_client.cc b/chrome/browser/updater/browser_updater_client.cc --- a/chrome/browser/updater/browser_updater_client.cc +++ b/chrome/browser/updater/browser_updater_client.cc -@@ -64,19 +64,6 @@ BrowserUpdaterClient::~BrowserUpdaterClient() { +@@ -57,19 +57,6 @@ BrowserUpdaterClient::~BrowserUpdaterClient() { void BrowserUpdaterClient::Register(base::OnceClosure complete) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -57,8 +55,8 @@ diff --git a/chrome/browser/updater/browser_updater_client.cc b/chrome/browser/u - base::BindOnce(&BrowserUpdaterClient::GetRegistrationRequest, this), - base::BindOnce( - [](base::OnceCallback callback, -- scoped_refptr update_service, -- const updater::RegistrationRequest& request) { +- scoped_refptr update_service, +- const RegistrationRequest& request) { - update_service->RegisterApp(request, std::move(callback)); - }, - base::BindPostTaskToCurrentDefault( @@ -68,23 +66,21 @@ diff --git a/chrome/browser/updater/browser_updater_client.cc b/chrome/browser/u } void BrowserUpdaterClient::RegistrationCompleted(base::OnceClosure complete, -@@ -108,24 +95,6 @@ void BrowserUpdaterClient::CheckForUpdate( - base::RepeatingCallback +@@ -101,22 +88,6 @@ void BrowserUpdaterClient::CheckForUpdate( + base::RepeatingCallback version_updater_callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - -- updater::UpdateService::UpdateState update_state; -- update_state.state = -- updater::UpdateService::UpdateState::State::kCheckingForUpdates; +- UpdateService::UpdateState update_state; +- update_state.state = UpdateService::UpdateState::State::kCheckingForUpdates; - version_updater_callback.Run(update_state); - update_service_->Update( -- GetAppId(), {}, updater::UpdateService::Priority::kForeground, -- updater::UpdateService::PolicySameVersionUpdate::kNotAllowed, +- GetAppId(), {}, UpdateService::Priority::kForeground, +- UpdateService::PolicySameVersionUpdate::kNotAllowed, - /*language=*/{}, - base::BindPostTaskToCurrentDefault( -- base::BindRepeating([](const updater::UpdateService::UpdateState& -- state) { -- *GetLastOnDemandUpdateStateStorage() = state; +- base::BindRepeating([](const UpdateService::UpdateState& state) { +- GetLastOnDemandUpdateStateStorage() = state; - return state; - }).Then(version_updater_callback)), - base::BindPostTaskToCurrentDefault( @@ -93,22 +89,21 @@ diff --git a/chrome/browser/updater/browser_updater_client.cc b/chrome/browser/u } void BrowserUpdaterClient::UpdateCompleted( -@@ -174,20 +143,7 @@ void BrowserUpdaterClient::IsBrowserRegisteredCompleted( +@@ -163,19 +134,7 @@ void BrowserUpdaterClient::IsBrowserRegisteredCompleted( base::OnceCallback callback, - const std::vector& apps) { + const std::vector& apps) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -- const auto updater = std::ranges::find_if( -- apps, [](const updater::UpdateService::AppState& state) { -- return base::EqualsCaseInsensitiveASCII(state.app_id, -- updater::kUpdaterAppId); +- const auto updater = +- std::ranges::find_if(apps, [](const UpdateService::AppState& state) { +- return base::EqualsCaseInsensitiveASCII(state.app_id, kUpdaterAppId); - }); - if (updater != apps.end()) { -- *GetLastKnownUpdaterRegistrationStorage() = *updater; +- GetLastKnownUpdaterRegistrationStorage() = *updater; - } - const auto app = - std::ranges::find_if(apps, &BrowserUpdaterClient::AppMatches); - if (app != apps.end()) { -- *GetLastKnownBrowserRegistrationStorage() = *app; +- GetLastKnownBrowserRegistrationStorage() = *app; - } - std::move(callback).Run(app != apps.end()); + std::move(callback).Run(true);