diff --git a/build/patches/Experimental-support-for-extensions-on-Android.patch b/build/patches/Experimental-support-for-extensions-on-Android.patch index 49bdaede..cbae1084 100644 --- a/build/patches/Experimental-support-for-extensions-on-Android.patch +++ b/build/patches/Experimental-support-for-extensions-on-Android.patch @@ -1,6 +1,6 @@ From: uazo Date: Thu, 6 Nov 2025 13:21:24 +0000 -Subject: Experimental-support-for-extensions-on-Android +Subject: Experimental support for extensions on Android Enable experimental support for extensions in Android. @@ -13,7 +13,7 @@ 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 +- @@ -31,10 +31,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../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 +- @@ -42,21 +42,21 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../chrome/browser/ui/RootUiCoordinator.java | 2 +- 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 | 8 +- + 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 | 70 +++++++++---------- + chrome/browser/chrome_browser_field_trials.cc | 84 +++++++++---------- .../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 +++ .../feedback/DeviceInfoFeedbackSource.java | 2 +- @@ -67,12 +67,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../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/extensions.html | 8 +- .../resources/extensions/item_list.css | 11 +++ .../resources/extensions/toolbar.html.ts | 7 -- ...omeProvidedSharingOptionsProviderBase.java | 4 +- @@ -80,11 +80,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html 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 +++- + .../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 +- @@ -92,30 +92,30 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../ui/extensions/ExtensionActionsBridge.java | 6 ++ .../extensions/windowing/internal/BUILD.gn | 2 +- .../Enable-extensions-Android.grdp | 15 ++++ - .../Extensions-Android.grdp | 9 +++ + .../Extensions-Android.grdp | 9 ++ chrome/browser/ui/android/tab_model/BUILD.gn | 4 +- .../browser/ui/android/tab_model/tab_model.cc | 6 +- .../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 ++- + .../ExtensionActionListContainer.java | 8 +- .../ExtensionToolbarCoordinatorImpl.java | 10 ++- - .../extensions/ExtensionsMenuCoordinator.java | 7 +- + .../extensions/ExtensionsMenuCoordinator.java | 44 +++++----- .../ExtensionsMenuItemProperties.java | 5 +- .../ExtensionsMenuItemViewBinder.java | 2 + - .../extensions/ExtensionsMenuMediator.java | 9 ++- + .../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 +- chrome/browser/ui/prefs/BUILD.gn | 4 +- - chrome/browser/ui/prefs/prefs_tab_helper.cc | 8 +-- + 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 +- .../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 +- @@ -124,14 +124,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html 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 | 16 ++-- 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 +- @@ -150,21 +150,23 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../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.h | 6 +- + extensions/common/extension_l10n_util.cc | 6 ++ extensions/common/features/feature.cc | 2 +- + .../default_locale_handler.cc | 3 + .../renderer/bindings/api_binding_util.cc | 2 +- gpu/config/gpu_finch_features.cc | 4 +- net/features.gni | 4 +- @@ -173,8 +175,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 +- @@ -184,7 +186,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 +- - 172 files changed, 566 insertions(+), 287 deletions(-) + 174 files changed, 597 insertions(+), 316 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 @@ -843,7 +845,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // 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,13 +133,13 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -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. @@ -860,6 +862,11 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enable the link hover status bar. // TODO(crbug.com/404678510): Remove when the feature is stable. +- feature_overrides.EnableFeature(chrome::android::kLinkHoverStatusBar); ++ // feature_overrides.EnableFeature(chrome::android::kLinkHoverStatusBar); + + // 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). @@ -871,8 +878,12 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enable desktop tab management features. // TODO(crbug.com/422902625): Remove when rollout is complete to all form -@@ -166,7 +166,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( - feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); +@@ -163,10 +163,10 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid); + feature_overrides.EnableFeature(features::kSubframeImportance); + // TODO(crbug.com/422903297): Remove when tablet rollout is complete. +- feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); ++ // feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); // Enable V8 optimizations for high-end Android Desktop devices. // TODO(crbug.com/425860368): Remove when the feature is stable. - feature_overrides.EnableFeature(features::kV8AndroidDesktopHighEndConfig); @@ -916,7 +927,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,49 +205,49 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -205,58 +205,58 @@ 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. @@ -985,6 +996,28 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enable all tabs to have WebContents at all times for desktop platforms. // TODO(crbug.com/448420873): Remove once we enable this feature for all form + // factors. This is currently blocked by performance regressions on low-end + // Android devices. +- feature_overrides.EnableFeature(features::kWebContentsDiscard); +- feature_overrides.EnableFeature(features::kLazyBrowserInterfaceBroker); +- feature_overrides.EnableFeature(chrome::android::kTabFreezingUsesDiscard); +- feature_overrides.EnableFeature(chrome::android::kLoadAllTabsAtStartup); ++ // feature_overrides.EnableFeature(features::kWebContentsDiscard); ++ // feature_overrides.EnableFeature(features::kLazyBrowserInterfaceBroker); ++ // feature_overrides.EnableFeature(chrome::android::kTabFreezingUsesDiscard); ++ // feature_overrides.EnableFeature(chrome::android::kLoadAllTabsAtStartup); + + // 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( + // 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. +- feature_overrides.EnableFeature(::features::kAndroidDesktopZoomScaling); ++ // feature_overrides.EnableFeature(::features::kAndroidDesktopZoomScaling); + #endif // BUILDFLAG(IS_DESKTOP_ANDROID) + // Desktop-first features which are past incubation should either end up here, + // or to a finch trial that enables it for all form factors. diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/browser/chrome_browser_interface_binders_webui.cc --- a/chrome/browser/chrome_browser_interface_binders_webui.cc +++ b/chrome/browser/chrome_browser_interface_binders_webui.cc @@ -2110,7 +2143,57 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mContext = context; mCurrentTabSupplier = currentTabSupplier; mTabCreator = tabCreator; -@@ -165,7 +167,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -129,6 +131,21 @@ public class ExtensionsMenuCoordinator implements Destroyable { + } + }; + ++ mExtensionsMenuButton.setDelegate( ++ new ListMenuDelegate() { ++ @Override ++ public RectProvider getRectProvider( ++ View listMenuHostingView) { ++ return MenuBuilderHelper.getRectProvider( ++ mExtensionsMenuButton); ++ } ++ ++ @Override ++ public ListMenu getListMenu() { ++ return listMenu; ++ } ++ }); ++ + mMediator = + new ExtensionsMenuMediator( + mContext, +@@ -137,35 +154,14 @@ public class ExtensionsMenuCoordinator implements Destroyable { + mCurrentTabSupplier, + mExtensionModels, + () -> { +- mExtensionsMenuButton.setDelegate( +- new ListMenuDelegate() { +- @Override +- public RectProvider getRectProvider( +- View listMenuHostingView) { +- return MenuBuilderHelper.getRectProvider( +- mExtensionsMenuButton); +- } +- +- @Override +- public ListMenu getListMenu() { +- return listMenu; +- } +- }); +- if (mShouldShowMenuOnInit) { +- if (mExtensionsMenuButton.getHost().isMenuShowing()) { +- mExtensionsMenuButton.dismiss(); +- } else { +- mExtensionsMenuButton.showMenu(); +- } +- mShouldShowMenuOnInit = false; +- } + }, + (extensionsSupported) -> { + int visibility = extensionsSupported ? View.VISIBLE : View.GONE; mExtensionsMenuButton.setVisibility(visibility); mExtensionsMenuTabSwitcherDivider.setVisibility(visibility); }, @@ -3263,6 +3346,32 @@ diff --git a/extensions/common/extension_features.h b/extensions/common/extensio } // namespace extensions_features #endif // EXTENSIONS_COMMON_EXTENSION_FEATURES_H_ +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, + } + + if (valid_locales->empty()) { ++#if !BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) + *error = errors::kLocalesNoValidLocaleNamesListed; + return false; ++#endif + } + + return true; +@@ -567,7 +569,11 @@ bool ShouldSkipValidation(const base::FilePath& locales_path, + // '.svn' directories. + base::FilePath relative_path; + if (!locales_path.AppendRelativePath(locale_path, &relative_path)) { ++#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) ++ return true; ++#else + NOTREACHED(); ++#endif + } + std::string subdir = relative_path.MaybeAsASCII(); + if (subdir.empty()) diff --git a/extensions/common/features/feature.cc b/extensions/common/features/feature.cc --- a/extensions/common/features/feature.cc +++ b/extensions/common/features/feature.cc @@ -3275,6 +3384,19 @@ diff --git a/extensions/common/features/feature.cc b/extensions/common/features/ return DESKTOP_ANDROID_PLATFORM; #else return UNSPECIFIED_PLATFORM; +diff --git a/extensions/common/manifest_handlers/default_locale_handler.cc b/extensions/common/manifest_handlers/default_locale_handler.cc +--- a/extensions/common/manifest_handlers/default_locale_handler.cc ++++ b/extensions/common/manifest_handlers/default_locale_handler.cc +@@ -115,6 +115,9 @@ bool DefaultLocaleHandler::Validate( + + // Only message file for default locale has to exist. + if (!has_default_locale_message_file) { ++#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) ++ if (base::PathExists(default_locale_path)) return true; ++#endif + *error = errors::kLocalesNoDefaultMessages; + return false; + } 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