diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e8309c24a26ec721b80b0e05e1b03b0d1a6d5914..a1722e9166313377c71515d24d3c38750ea1c814 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,8 @@ stages: .build-cromite: image: registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:chromium-latest + rules: + - if: $CI_PIPELINE_SOURCE != "schedule" tags: - build-browser artifacts: diff --git a/build/browser.gn_args b/build/browser.gn_args index 750096b9f53f502bdc1f993983b6e70d4ddf4c60..0dfd1b2ac4fa6cabdbdfe87208522207507d6971 100644 --- a/build/browser.gn_args +++ b/build/browser.gn_args @@ -31,6 +31,8 @@ exclude_unwind_tables=false ffmpeg_branding="Chrome" generate_linker_map=true icu_use_data_file=true +include_both_v8_snapshots = false +include_both_v8_snapshots_android_secondary_abi = false is_cfi=false is_component_build=false is_debug=false diff --git a/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch b/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch index 9e1d166591b120f88850e603df1c9662aea6a507..320fdc2975d92d23d4654aad0c0e8887de509d5b 100644 --- a/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch @@ -90,7 +90,7 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3514,6 +3514,10 @@ +@@ -3627,6 +3627,10 @@ "chrome-signin-team@google.com" ], "expiry_milestone": 138 @@ -119,7 +119,7 @@ new file mode 100644 diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json -@@ -2613,6 +2613,22 @@ +@@ -2617,6 +2617,22 @@ "no_downscaled_overlay_promotion" ] }, @@ -145,7 +145,7 @@ diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_lis 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 -@@ -58,6 +58,11 @@ BASE_FEATURE(kAggressiveShaderCacheLimits, +@@ -59,6 +59,11 @@ BASE_FEATURE(kAggressiveShaderCacheLimits, base::FEATURE_DISABLED_BY_DEFAULT); #if BUILDFLAG(IS_ANDROID) @@ -160,14 +160,14 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h --- a/gpu/config/gpu_finch_features.h +++ b/gpu/config/gpu_finch_features.h -@@ -26,6 +26,7 @@ GPU_EXPORT BASE_DECLARE_FEATURE(kUseGles2ForOopR); - GPU_EXPORT BASE_DECLARE_FEATURE(kAggressiveShaderCacheLimits); +@@ -26,6 +26,7 @@ GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kUseGles2ForOopR); + GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kAggressiveShaderCacheLimits); #if BUILDFLAG(IS_ANDROID) -+GPU_EXPORT BASE_DECLARE_FEATURE(kAImageReaderMediaPlayer); - GPU_EXPORT BASE_DECLARE_FEATURE(kAndroidSurfaceControl); - GPU_EXPORT BASE_DECLARE_FEATURE(kWebViewSurfaceControl); - GPU_EXPORT BASE_DECLARE_FEATURE(kWebViewSurfaceControlForTV); ++GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kAImageReaderMediaPlayer); + GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kAndroidSurfaceControl); + GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kWebViewSurfaceControl); + GPU_CONFIG_EXPORT BASE_DECLARE_FEATURE(kWebViewSurfaceControlForTV); diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc @@ -207,7 +207,7 @@ diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc -@@ -70,6 +70,7 @@ +@@ -69,6 +69,7 @@ #if BUILDFLAG(IS_ANDROID) #include "ui/gfx/android/android_surface_control_compat.h" @@ -215,7 +215,7 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc #endif #if BUILDFLAG(ENABLE_VULKAN) -@@ -687,6 +688,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, +@@ -688,6 +689,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, } #endif // BUILDFLAG(IS_WIN) diff --git a/build/cromite_patches/Add-AllowUserCertificates-flag.patch b/build/cromite_patches/Add-AllowUserCertificates-flag.patch index a3b1fa20d26c799a32903c1ea3b9397d24cb70e9..ed2df25ee7d158f775619a43bc2637b725597bfc 100644 --- a/build/cromite_patches/Add-AllowUserCertificates-flag.patch +++ b/build/cromite_patches/Add-AllowUserCertificates-flag.patch @@ -28,7 +28,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.printing.PrintManagerDelegateImpl; import org.chromium.printing.PrintingController; import org.chromium.printing.PrintingControllerImpl; -@@ -981,6 +982,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -977,6 +978,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity super.onStartWithNative(); ChromeActivitySessionTracker.getInstance().onStartWithNative(getProfileProviderSupplier()); @@ -40,7 +40,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv 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 -@@ -169,6 +169,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -179,6 +179,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &feed::kFeedPerformanceStudy, &feed::kFeedShowSignInCommand, &feed::kFeedSignedOutViewDemotion, @@ -59,7 +59,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_PAGE_SUMMARY = "AdaptiveButtonInTopToolbarPageSummary"; public static final String ALLOW_TAB_CLOSING_UPON_MINIMIZATION = -@@ -680,6 +681,8 @@ public abstract class ChromeFeatureList { +@@ -728,6 +729,8 @@ public abstract class ChromeFeatureList { public static final CachedFlag sAndroidWindowPopupLargeScreen = newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, false); public static final CachedFlag sAppSpecificHistory = newCachedFlag(APP_SPECIFIC_HISTORY, true); @@ -68,7 +68,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sAsyncNotificationManager = newCachedFlag(ASYNC_NOTIFICATION_MANAGER, false, true); public static final CachedFlag sAsyncNotificationManagerForDownload = -@@ -941,6 +944,7 @@ public abstract class ChromeFeatureList { +@@ -1032,6 +1035,7 @@ public abstract class ChromeFeatureList { sAccountForSuppressedKeyboardInsets, sAllowTabClosingUponMinimization, sAndroidAppIntegration, diff --git a/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch b/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch index 4ae4cb7014c0801dfeef13faca2e466370bfb40c..bec8195bace1c90ab69c929b7c15f2c55cc4dedb 100644 --- a/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch +++ b/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java --- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java -@@ -839,6 +839,11 @@ public class KeyboardShortcuts { +@@ -888,6 +888,11 @@ public class KeyboardShortcuts { KeyEvent.KEYCODE_B, (KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON)); } diff --git a/build/cromite_patches/Add-IsCleartextPermitted-flag.patch b/build/cromite_patches/Add-IsCleartextPermitted-flag.patch index 177c9ea77b069c5b156ac64463586d570c5d1abb..de20f56d4a360afbed7df04342e48f0d3f4ab75f 100644 --- a/build/cromite_patches/Add-IsCleartextPermitted-flag.patch +++ b/build/cromite_patches/Add-IsCleartextPermitted-flag.patch @@ -44,7 +44,7 @@ new file mode 100644 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 -@@ -387,6 +387,11 @@ std::unique_ptr URLRequestHttpJob::Create(URLRequest* request) { +@@ -398,6 +398,11 @@ std::unique_ptr URLRequestHttpJob::Create(URLRequest* request) { } } diff --git a/build/cromite_patches/Add-a-proxy-configuration-page.patch b/build/cromite_patches/Add-a-proxy-configuration-page.patch index 98224260141b7ef8304973b6e0d3606e9a73aed2..22244090fab07060b8d22e863b228262e3c66f97 100644 --- a/build/cromite_patches/Add-a-proxy-configuration-page.patch +++ b/build/cromite_patches/Add-a-proxy-configuration-page.patch @@ -78,7 +78,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -101,6 +101,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -100,6 +100,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private static final String PREF_PASSWORD_LEAK_DETECTION = "password_leak_detection"; private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; @@ -100,7 +100,7 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd -@@ -221,6 +221,9 @@ +@@ -215,6 +215,9 @@ @@ -197,7 +197,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro 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 -@@ -204,6 +204,8 @@ +@@ -206,6 +206,8 @@ #include "printing/buildflags/buildflags.h" #include "rlz/buildflags/buildflags.h" @@ -206,7 +206,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #if BUILDFLAG(ENABLE_BACKGROUND_MODE) #include "chrome/browser/background/extensions/background_mode_manager.h" #endif -@@ -1613,6 +1615,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { +@@ -1689,6 +1691,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { component_updater::RegisterPrefs(registry); domain_reliability::RegisterPrefs(registry); embedder_support::OriginTrialPrefs::RegisterPrefs(registry); @@ -218,7 +218,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc -@@ -160,7 +160,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { +@@ -163,7 +163,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { command_line()->GetSwitchValueASCII(switches::kProxyBypassList); SetValue(proxy_config::prefs::kProxy, base::Value(ProxyConfigDictionary::CreateFixedServers( @@ -661,7 +661,7 @@ new file mode 100644 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 -@@ -204,6 +204,8 @@ static_library("ui") { +@@ -194,6 +194,8 @@ static_library("ui") { "webui/metrics_internals/metrics_internals_ui.h", "webui/net_export_ui.cc", "webui/net_export_ui.h", @@ -673,17 +673,17 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn 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 -@@ -57,6 +57,9 @@ +@@ -56,6 +56,9 @@ #include "extensions/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h" +#include "chrome/browser/ui/webui/proxy_config_ui.h" + + - #if BUILDFLAG(ENABLE_NACL) - #include "chrome/browser/ui/webui/nacl_ui.h" + #if BUILDFLAG(ENABLE_WEBUI_CERTIFICATE_VIEWER) + #include "chrome/browser/ui/webui/certificate_viewer/certificate_viewer_ui.h" #endif -@@ -422,7 +425,7 @@ void RegisterChromeWebUIConfigs() { +@@ -415,7 +418,7 @@ void RegisterChromeWebUIConfigs() { map.AddWebUIConfig(std::make_unique()); map.AddWebUIConfig(std::make_unique()); #endif @@ -1150,11 +1150,11 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons + kChromeUIProxyConfigHost, kChromeUIAboutHost, kChromeUIAccessibilityHost, - #if !BUILDFLAG(IS_ANDROID) + kChromeUIActorInternalsHost, 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 -@@ -179,6 +179,8 @@ inline constexpr char kChromeUINetInternalsHost[] = "net-internals"; +@@ -180,6 +180,8 @@ inline constexpr char kChromeUINetInternalsHost[] = "net-internals"; inline constexpr char kChromeUINetInternalsURL[] = "chrome://net-internals/"; inline constexpr char kChromeUINewTabHost[] = "newtab"; inline constexpr char kChromeUINewTabFooterHost[] = "newtab-footer"; diff --git a/build/cromite_patches/Add-an-always-incognito-mode.patch b/build/cromite_patches/Add-an-always-incognito-mode.patch index 41e4e984e8521339bd5d70762a06f4d545451e71..0e1c53ec34217866a5becd6d91b54b634b5dabfb 100644 --- a/build/cromite_patches/Add-an-always-incognito-mode.patch +++ b/build/cromite_patches/Add-an-always-incognito-mode.patch @@ -28,21 +28,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 7 +- .../ChromeContextMenuPopulator.java | 6 +- - .../CustomTabActivityLifecycleUmaTracker.java | 39 ----- + .../CustomTabActivityLifecycleUmaTracker.java | 39 ---- .../CustomTabAppMenuPropertiesDelegate.java | 4 + - .../CustomTabIntentDataProvider.java | 10 ++ + .../CustomTabIntentDataProvider.java | 10 + .../browser/download/DownloadUtils.java | 13 +- .../history/HistoryContentManager.java | 7 +- .../browser/history/HistoryManager.java | 27 ++- .../chrome/browser/history/HistoryPage.java | 16 ++ .../native_page/NativePageFactory.java | 4 +- .../chrome/browser/ntp/RecentTabsManager.java | 28 ++- - .../privacy/settings/IncognitoSettings.java | 162 ++++++++++++++++++ + .../privacy/settings/IncognitoSettings.java | 175 ++++++++++++++++++ .../settings/FragmentDependencyProvider.java | 4 + .../HistoricalTabModelObserver.java | 5 +- .../tab/tab_restore/HistoricalTabSaver.java | 2 +- .../tab_restore/HistoricalTabSaverImpl.java | 17 +- - .../TabbedAppMenuPropertiesDelegate.java | 17 +- + .../TabbedAppMenuPropertiesDelegate.java | 6 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +- .../browser/tabmodel/ChromeTabCreator.java | 5 +- .../tabmodel/TabModelSelectorImpl.java | 3 + @@ -55,17 +55,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../remote_suggestions_service_factory.cc | 5 + .../bookmarks/android/bookmark_bridge.cc | 7 + .../host_content_settings_map_factory.cc | 22 ++- - chrome/browser/history/history_tab_helper.cc | 20 +++ + chrome/browser/history/history_tab_helper.cc | 20 ++ chrome/browser/history/history_tab_helper.h | 10 +- .../android/offline_page_bridge.cc | 11 +- - .../android/offline_page_model_factory.cc | 20 ++- + .../android/offline_page_model_factory.cc | 20 +- .../android/request_coordinator_factory.cc | 33 +++- .../offline_page_model_factory.h | 1 + .../offline_pages/recent_tab_helper.cc | 31 +++- .../browser/offline_pages/recent_tab_helper.h | 5 + .../request_coordinator_factory.h | 4 +- chrome/browser/prefs/browser_prefs.cc | 5 + - chrome/browser/profiles/profile_selections.cc | 10 ++ + chrome/browser/profiles/profile_selections.cc | 10 + chrome/browser/profiles/profile_selections.h | 7 +- .../browser/ui/android/native_page/BUILD.gn | 2 + .../browser/ui/native_page/NativePage.java | 22 ++- @@ -88,7 +88,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../add-an-always-incognito-mode.inc | 1 + .../add-an-always-incognito-mode.inc | 3 + .../add-an-always-incognito-mode.inc | 1 + - 69 files changed, 798 insertions(+), 113 deletions(-) + 69 files changed, 800 insertions(+), 113 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -101,7 +101,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 -@@ -646,6 +646,7 @@ chrome_java_resources = [ +@@ -639,6 +639,7 @@ chrome_java_resources = [ "java/res/xml/main_preferences_legacy.xml", "java/res/xml/manage_sync_preferences.xml", "java/res/xml/personalize_google_services_preferences.xml", @@ -120,7 +120,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -898,6 +899,7 @@ chrome_java_sources = [ +@@ -902,6 +903,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", @@ -247,7 +247,7 @@ new file mode 100644 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 -@@ -74,6 +74,10 @@ import org.chromium.base.task.TaskTraits; +@@ -74,6 +74,10 @@ import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.UsedByReflection; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; @@ -258,7 +258,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.IntentHandler.ExternalAppId; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; -@@ -726,14 +730,19 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -761,14 +765,19 @@ public class ChromeTabbedActivity extends ChromeActivity { Profile profile = mTabModelSelector.getCurrentModel().getProfile(); // For saving non-incognito tab closures for Recent Tabs. @@ -285,7 +285,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct // Defer creation of this helper so it triggers after TabGroupModelFilter observers. mUndoRefocusHelper = new UndoRefocusHelper( -@@ -2876,8 +2885,9 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -2951,8 +2960,9 @@ public class ChromeTabbedActivity extends ChromeActivity { // We determine the model as soon as possible so every systems get initialized coherently. boolean startIncognito = @@ -300,7 +300,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 -@@ -96,6 +96,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH +@@ -95,6 +95,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.devtools.DevToolsWindowAndroid; @@ -308,7 +308,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.download.DownloadManagerService; -@@ -1980,6 +1981,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -1981,6 +1982,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -321,16 +321,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv 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 -@@ -88,6 +88,8 @@ import java.lang.annotation.Retention; - import java.lang.annotation.RetentionPolicy; +@@ -88,6 +88,8 @@ import java.lang.annotation.RetentionPolicy; import java.util.Iterator; + import java.util.List; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu * items based on activity state. -@@ -496,8 +498,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties +@@ -606,8 +608,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !isNativePage && !isFileScheme && !isContentScheme @@ -345,15 +345,15 @@ 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/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java -@@ -31,6 +31,7 @@ import org.chromium.base.metrics.RecordUserAction; +@@ -34,6 +34,7 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.shared_preferences.SharedPreferencesManager; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; - import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType; -@@ -347,6 +348,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + import org.chromium.chrome.browser.download.DownloadUtils; +@@ -370,6 +371,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { public List> buildContextMenu() { mShowEphemeralTabNewLabel = null; @@ -363,7 +363,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr List> groupedItems = new ArrayList<>(); if (mParams.isPage() && shouldShowEmptySpaceContextMenu()) { -@@ -415,7 +419,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -438,7 +442,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { @@ -424,7 +424,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/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -21,6 +21,7 @@ import org.chromium.base.supplier.ObservableSupplier; +@@ -18,6 +18,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -432,20 +432,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import org.chromium.chrome.browser.DefaultBrowserInfo; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.bookmarks.BookmarkModel; -@@ -200,6 +201,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat - openInChromeItemVisible = false; - tryAddingReadAloud = false; - } +@@ -218,6 +219,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + openInChromeItemVisible = false; + tryAddingReadAloud = false; + } + if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { + downloadItemVisible = true; + } - boolean isNativePage = - url.getScheme().equals(UrlConstants.CHROME_SCHEME) + boolean isNativePage = + url.getScheme().equals(UrlConstants.CHROME_SCHEME) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -98,6 +98,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -99,6 +99,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.net.NetId; @@ -455,7 +455,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -1250,6 +1253,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1260,6 +1263,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return getInitialActivityWidth() > 0; } @@ -533,9 +533,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java -@@ -54,6 +54,14 @@ import org.chromium.ui.base.Clipboard; - +@@ -56,6 +56,14 @@ import org.chromium.ui.base.Clipboard; import java.util.List; + import java.util.function.Function; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; +import org.chromium.chrome.browser.profiles.Profile; @@ -548,7 +548,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History /** Combines and manages the different UI components of browsing history. */ public class HistoryManager implements OnMenuItemClickListener, -@@ -156,7 +164,7 @@ public class HistoryManager +@@ -161,7 +169,7 @@ public class HistoryManager mUmaRecorder.recordOpenHistory(); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -557,7 +557,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -406,9 +414,22 @@ public class HistoryManager +@@ -413,9 +421,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -581,7 +581,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // If Incognito placeholder is shown no need to call any destroy method. return; } -@@ -468,7 +489,7 @@ public class HistoryManager +@@ -475,7 +496,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -626,7 +626,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -18,6 +18,7 @@ import org.chromium.base.supplier.ObservableSupplier; +@@ -19,6 +19,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; @@ -634,7 +634,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; -@@ -326,7 +327,8 @@ public class NativePageFactory { +@@ -351,7 +352,8 @@ public class NativePageFactory { String url, NativePage candidatePage, Tab tab, boolean isIncognito, PdfInfo pdfInfo) { NativePage page; @@ -700,7 +700,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java -@@ -0,0 +1,162 @@ +@@ -0,0 +1,175 @@ +/* + This file is part of Bromite. + @@ -733,7 +733,10 @@ new file mode 100644 +import androidx.preference.PreferenceFragmentCompat; +import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; + ++import org.chromium.base.supplier.ObservableSupplier; ++import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.base.supplier.Supplier; ++ +import org.chromium.chrome.R; +import org.chromium.chrome.browser.preferences.Pref; +import org.chromium.chrome.browser.profiles.Profile; @@ -743,8 +746,11 @@ new file mode 100644 +import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.lifetime.ApplicationLifetime; ++import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; ++ +import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; +import org.chromium.components.browser_ui.settings.SettingsUtils; ++import org.chromium.components.browser_ui.settings.SettingsFragment; +import org.chromium.components.prefs.PrefService; +import org.chromium.components.user_prefs.UserPrefs; + @@ -752,8 +758,8 @@ new file mode 100644 + * Fragment to keep track of the all the always incognito related preferences. + */ +public class IncognitoSettings -+ extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener, -+ INeedSnackbarManager { ++ extends ChromeBaseSettingsFragment implements Preference.OnPreferenceChangeListener, ++ INeedSnackbarManager { + private Supplier mSnackbarManagerSupplier; + private Snackbar mSnackbar; + @@ -762,16 +768,23 @@ new file mode 100644 + private static final String PREF_INCOGNITO_SAVE_SITE_SETTING = "incognito_save_site_setting"; + + private final PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); ++ private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); ++ ++ @Override ++ public ObservableSupplier getPageTitle() { ++ return mPageTitle; ++ } ++ ++ @Override ++ public @SettingsFragment.AnimationType int getAnimationType() { ++ return SettingsFragment.AnimationType.PROPERTY; ++ } + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { -+ PrivacyPreferencesManagerImpl privacyPrefManager = -+ PrivacyPreferencesManagerImpl.getInstance(); ++ mPageTitle.set(getString(R.string.incognito_settings_title)); + SettingsUtils.addPreferencesFromResource(this, R.xml.incognito_preferences); -+ getActivity().setTitle(R.string.incognito_settings_title); -+ + setHasOptionsMenu(true); -+ + updatePreferences(); + } + @@ -993,7 +1006,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore 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 -@@ -26,6 +26,7 @@ import org.chromium.base.supplier.Supplier; +@@ -25,6 +25,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.build.BuildConfig; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; @@ -1001,40 +1014,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ai.AiAssistantService; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; -@@ -371,6 +372,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm - } +@@ -219,7 +220,10 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + } - private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { + // New Tab +- modelList.add(buildNewTabItem()); + boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -+ if (always_incognito) { -+ final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); -+ if (newTabOption != null) -+ newTabOption.setVisible(false); ++ if (!always_incognito) { ++ modelList.add(buildNewTabItem()); + } -+ - // We have to iterate all menu items since same menu item ID may be associated with more - // than one menu items. - boolean isOverviewModeMenu = menuGroup == MenuGroup.OVERVIEW_MODE_MENU; -@@ -430,7 +438,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm - } - if (item.getItemId() == R.id.recent_tabs_menu_id) { -- item.setVisible(!isIncognito); -+ if (always_incognito) { -+ boolean historyEnabledInIncognito = -+ UserPrefs.get(currentTab.getProfile()).getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); -+ item.setVisible(historyEnabledInIncognito); -+ } -+ else { -+ item.setVisible(!isIncognito); -+ } - } - if (item.getItemId() == R.id.menu_select_tabs) { - item.setVisible(isMenuSelectTabsVisible); + // New Incognito Tab + modelList.add(buildNewIncognitoTabItem()); 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 -@@ -214,6 +214,8 @@ import org.chromium.ui.InsetObserver; +@@ -218,6 +218,8 @@ import org.chromium.components.webapps.bottomsheet.PwaBottomSheetControllerFacto import org.chromium.ui.UiUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.DeviceFormFactor; @@ -1043,7 +1038,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.display.DisplayUtil; -@@ -1212,7 +1214,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1238,7 +1240,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1055,7 +1050,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/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -48,6 +48,10 @@ import org.chromium.ui.base.PageTransition; +@@ -52,6 +52,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1064,9 +1059,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome +import org.chromium.chrome.browser.tab.TabObserver; + /** This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ + @NullMarked public class ChromeTabCreator extends TabCreator - implements NeedsTabModel, NeedsTabModelOrderController { -@@ -545,7 +549,6 @@ public class ChromeTabCreator extends TabCreator +@@ -567,7 +571,6 @@ public class ChromeTabCreator extends TabCreator // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. public Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1077,15 +1072,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java -@@ -12,6 +12,7 @@ import androidx.annotation.VisibleForTesting; - - import org.chromium.base.supplier.OneshotSupplier; - import org.chromium.base.supplier.Supplier; +@@ -17,6 +17,7 @@ import org.chromium.build.annotations.EnsuresNonNull; + import org.chromium.build.annotations.Initializer; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ntp.RecentlyClosedBridge; -@@ -119,6 +120,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod +@@ -127,6 +128,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ProfileProvider profileProvider = mProfileProviderSupplier.get(); assert profileProvider != null; @@ -1097,7 +1092,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/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java -@@ -51,6 +51,8 @@ import org.chromium.chrome.browser.tabwindow.TabWindowManager; +@@ -54,6 +54,8 @@ import org.chromium.chrome.browser.tabwindow.TabWindowManager; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; @@ -1106,7 +1101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; -@@ -835,6 +837,13 @@ public class TabPersistentStore { +@@ -844,6 +846,13 @@ public class TabPersistentStore { } } } @@ -1123,7 +1118,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer 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 -@@ -49,6 +49,7 @@ import org.chromium.base.supplier.Supplier; +@@ -50,6 +50,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -1131,7 +1126,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -828,7 +829,7 @@ public class ToolbarManager +@@ -856,7 +857,7 @@ public class ToolbarManager TraceEvent.end("isOfflinePage"); return ret; } @@ -1392,7 +1387,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -@@ -570,6 +573,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -568,6 +571,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -1406,7 +1401,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return nullptr; -@@ -577,6 +587,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -575,6 +585,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -1755,7 +1750,7 @@ diff --git a/chrome/browser/offline_pages/request_coordinator_factory.h b/chrome 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 -@@ -254,6 +254,7 @@ +@@ -256,6 +256,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1763,7 +1758,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" #include "chrome/browser/android/oom_intervention/oom_intervention_decider.h" #include "chrome/browser/android/preferences/browser_prefs_android.h" -@@ -2068,6 +2069,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2142,6 +2143,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1828,7 +1823,7 @@ diff --git a/chrome/browser/profiles/profile_selections.h b/chrome/browser/profi diff --git a/chrome/browser/ui/android/native_page/BUILD.gn b/chrome/browser/ui/android/native_page/BUILD.gn --- a/chrome/browser/ui/android/native_page/BUILD.gn +++ b/chrome/browser/ui/android/native_page/BUILD.gn -@@ -30,6 +30,8 @@ robolectric_library("junit") { +@@ -31,6 +31,8 @@ robolectric_library("junit") { deps = [ ":java", @@ -1924,7 +1919,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -89,6 +89,11 @@ import org.chromium.ui.base.WindowAndroid; +@@ -91,6 +91,11 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.interpolators.Interpolators; import org.chromium.url.GURL; @@ -1936,7 +1931,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; -@@ -1232,10 +1237,13 @@ class LocationBarMediator +@@ -1300,10 +1305,13 @@ class LocationBarMediator } Tab tab = mLocationBarDataProvider.getTab(); if (tab == null) return false; @@ -1954,7 +1949,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 -@@ -6682,6 +6682,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6796,6 +6796,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -1989,7 +1984,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java -@@ -164,6 +164,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -165,6 +165,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro protected GURL mVisibleGurl = GURL.emptyGURL(); protected String mFormattedFullUrl; protected String mUrlForDisplay; @@ -1997,7 +1992,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow // notifyUrlChanged and notifySecurityStateChanged are usually called 3 times across a same // document navigation. The first call is usually necessary, which updates the UrlBar to reflect -@@ -187,7 +188,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -188,7 +189,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro Context context, NewTabPageDelegate newTabPageDelegate, UrlFormatter urlFormatter, @@ -2078,7 +2073,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -4106,6 +4106,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4090,6 +4090,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2226,7 +2221,7 @@ diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omn diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc --- a/components/omnibox/browser/search_provider.cc +++ b/components/omnibox/browser/search_provider.cc -@@ -912,7 +912,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( +@@ -915,7 +915,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( // is required. // Request for suggestions in OTR contexts is not allowed; except for the Lens // searchboxes. diff --git a/build/cromite_patches/Add-bookmark-import-export-actions.patch b/build/cromite_patches/Add-bookmark-import-export-actions.patch index 435fd76aa257518085f985680a0ccd1ce6306796..2ad28dbddd95486e17d9ee56cd83e07d67f2e65e 100644 --- a/build/cromite_patches/Add-bookmark-import-export-actions.patch +++ b/build/cromite_patches/Add-bookmark-import-export-actions.patch @@ -124,15 +124,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java -@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.app.bookmarks; +@@ -9,6 +9,7 @@ import static org.chromium.build.NullUtil.assumeNonNull; import android.content.ComponentName; import android.content.Intent; import android.text.TextUtils; +import android.os.Bundle; import org.chromium.base.IntentUtils; - import org.chromium.build.annotations.Nullable; -@@ -29,6 +30,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; + import org.chromium.build.annotations.NullMarked; +@@ -32,6 +33,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -142,7 +142,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B /** * The activity that displays the bookmark UI on the phone. It keeps a {@link * BookmarkManagerCoordinator} inside of it and creates a snackbar manager. This activity should -@@ -42,6 +46,9 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -46,6 +50,9 @@ public class BookmarkActivity extends SnackbarActivity { private @Nullable BookmarkManagerCoordinator mBookmarkManagerCoordinator; private @Nullable BookmarkOpener mBookmarkOpener; @@ -152,7 +152,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B @Override protected void onProfileAvailable(Profile profile) { super.onProfileAvailable(profile); -@@ -68,6 +75,14 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -73,6 +80,14 @@ public class BookmarkActivity extends SnackbarActivity { mBookmarkManagerCoordinator.updateForUrl(url); setContentView(mBookmarkManagerCoordinator.getView()); BackPressHelper.create(this, getOnBackPressedDispatcher(), mBookmarkManagerCoordinator); @@ -167,15 +167,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B } @Override -@@ -87,6 +102,7 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -91,6 +106,7 @@ public class BookmarkActivity extends SnackbarActivity { @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); + mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data); if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { + assumeNonNull(data); BookmarkId bookmarkId = - BookmarkId.getBookmarkIdFromString( -@@ -95,6 +111,21 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -100,6 +116,21 @@ public class BookmarkActivity extends SnackbarActivity { } } @@ -200,7 +200,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -18,6 +18,7 @@ import org.chromium.base.supplier.ObservableSupplier; +@@ -19,6 +19,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; @@ -208,7 +208,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier; -@@ -59,7 +60,7 @@ import org.chromium.ui.util.ColorUtils; +@@ -62,7 +63,7 @@ import org.chromium.ui.util.ColorUtils; * Creates NativePage objects to show chrome-native:// URLs using the native Android view system. */ public class NativePageFactory { @@ -217,7 +217,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final BrowserControlsManager mBrowserControlsManager; private final Supplier mCurrentTabSupplier; -@@ -82,7 +83,7 @@ public class NativePageFactory { +@@ -85,7 +86,7 @@ public class NativePageFactory { private static NativePage sTestPage; public NativePageFactory( @@ -226,7 +226,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat @NonNull BottomSheetController sheetController, @NonNull BrowserControlsManager browserControlsManager, @NonNull Supplier currentTabSupplier, -@@ -154,7 +155,7 @@ public class NativePageFactory { +@@ -157,7 +158,7 @@ public class NativePageFactory { @VisibleForTesting static class NativePageBuilder { @@ -235,10 +235,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final Supplier mNewTabPageCreationTracker; private final BrowserControlsManager mBrowserControlsManager; -@@ -251,7 +252,7 @@ public class NativePageFactory { - mSnackbarManagerSupplier.get(), - tab.getProfile(), - new TabShim(tab, mBrowserControlsManager, mTabModelSelector), +@@ -262,7 +263,7 @@ public class NativePageFactory { + mBrowserControlsManager, + mTabModelSelector, + mEdgeToEdgeControllerSupplier), - mActivity.getComponentName()); + mActivity.getComponentName(), mActivity); } @@ -247,7 +247,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -222,6 +222,8 @@ static_library("browser") { +@@ -248,6 +248,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -256,7 +256,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bookmarks/chrome_bookmark_client.cc", "bookmarks/chrome_bookmark_client.h", "bookmarks/managed_bookmark_service_factory.cc", -@@ -1731,6 +1733,13 @@ static_library("browser") { +@@ -1760,6 +1762,13 @@ static_library("browser") { ] } @@ -270,7 +270,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3639,8 +3648,6 @@ static_library("browser") { +@@ -3684,8 +3693,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -758,7 +758,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java -@@ -53,6 +53,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; +@@ -57,6 +57,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; import org.chromium.components.image_fetcher.ImageFetcherConfig; import org.chromium.components.image_fetcher.ImageFetcherFactory; import org.chromium.ui.KeyboardVisibilityDelegate; @@ -767,7 +767,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; import org.chromium.ui.modelutil.MVCListAdapter.ListItem; -@@ -322,6 +324,13 @@ public class BookmarkManagerCoordinator +@@ -333,6 +335,13 @@ public class BookmarkManagerCoordinator // Public API implementation. @@ -784,7 +784,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java -@@ -59,6 +59,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; +@@ -62,6 +62,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.PowerBookmarkType; @@ -793,7 +793,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.ui.accessibility.AccessibilityState; import org.chromium.ui.listmenu.ListMenu; import org.chromium.ui.listmenu.ListMenuItemProperties; -@@ -77,6 +79,47 @@ import java.util.function.BooleanSupplier; +@@ -80,6 +82,47 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Predicate; @@ -840,8 +840,8 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + /** Responsible for BookmarkManager business logic. */ // TODO(crbug.com/40256938): Remove BookmarkDelegate if possible. - class BookmarkManagerMediator -@@ -86,6 +129,9 @@ class BookmarkManagerMediator + @NullMarked +@@ -90,6 +133,9 @@ class BookmarkManagerMediator private static boolean sPreventLoadingForTesting; @@ -851,7 +851,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Keeps track of whether drag is enabled / active for bookmark lists. */ private class BookmarkDragStateDelegate implements DragStateDelegate { private BookmarkDelegate mBookmarkDelegate; -@@ -583,6 +629,14 @@ class BookmarkManagerMediator +@@ -596,6 +642,14 @@ class BookmarkManagerMediator mNativePage = nativePage; } @@ -866,7 +866,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** See BookmarkManager(Coordinator)#updateForUrl */ void updateForUrl(String url) { // Bookmark model is null if the manager has been destroyed. -@@ -758,6 +812,235 @@ class BookmarkManagerMediator +@@ -768,6 +822,235 @@ class BookmarkManagerMediator } } @@ -1105,7 +1105,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java -@@ -16,6 +16,9 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +@@ -15,6 +15,9 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.BasicNativePage; import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.components.embedder_support.util.UrlConstants; @@ -1114,20 +1114,20 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows +import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; /** A native page holding a {@link BookmarkManagerCoordinator} on _tablet_. */ - public class BookmarkPage extends BasicNativePage { + @NullMarked @@ -35,7 +38,8 @@ public class BookmarkPage extends BasicNativePage { - @NonNull SnackbarManager snackbarManager, - @NonNull Profile profile, - @NonNull NativePageHost host, + SnackbarManager snackbarManager, + Profile profile, + NativePageHost host, - @Nullable ComponentName componentName) { + @Nullable ComponentName componentName, + ChromeActivity activity) { super(host); mTitle = host.getContext().getString(R.string.bookmarks); -@@ -55,6 +59,9 @@ public class BookmarkPage extends BasicNativePage { - new BookmarkManagerOpenerImpl(), - PriceDropNotificationManagerFactory.create(profile)); +@@ -56,6 +60,9 @@ public class BookmarkPage extends BasicNativePage { + PriceDropNotificationManagerFactory.create(profile), + host::createEdgeToEdgePadAdjuster); mBookmarkManagerCoordinator.setBasicNativePage(this); + mBookmarkManagerCoordinator.setWindow(activity.getWindowAndroid(), + new ModalDialogManager( @@ -1327,7 +1327,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -223,6 +223,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -236,6 +236,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kBatchTabRestore, &kBlockIntentsWhileLocked, &kBookmarkPaneAndroid, @@ -1338,7 +1338,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 -@@ -625,6 +625,7 @@ public abstract class ChromeFeatureList { +@@ -662,6 +662,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; @@ -1349,7 +1349,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc --- a/chrome/browser/importer/profile_writer.cc +++ b/chrome/browser/importer/profile_writer.cc -@@ -125,6 +125,16 @@ void ProfileWriter::AddBookmarks( +@@ -126,6 +126,16 @@ void ProfileWriter::AddBookmarks( return; BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_); @@ -1401,7 +1401,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** Whether Chrome is set as the default browser. Default value is false. */ public static final String CHROME_DEFAULT_BROWSER = "applink.chrome_default_browser"; -@@ -999,6 +1001,7 @@ public final class ChromePreferenceKeys { +@@ -1008,6 +1010,7 @@ public final class ChromePreferenceKeys { AUXILIARY_SEARCH_SCHEMA_VERSION, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, @@ -1441,7 +1441,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn @@ -352,6 +352,9 @@ static_library("common_lib") { - sources += [ + "chrome_descriptors_android.h", "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", + ## Bromite dependencies for bookmark import functionality @@ -1693,7 +1693,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui return mimeTypes; } -@@ -1155,6 +1169,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -1168,6 +1182,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick return countAcceptTypesFor(superType) == mMimeTypes.size(); } diff --git a/build/cromite_patches/Add-cromite-flags-support.patch b/build/cromite_patches/Add-cromite-flags-support.patch index e3c87ad659eb7f10225b9eb08e0d6e948f9a4ad6..20709c0d104b940f37795b7a3b293857a734a30d 100644 --- a/build/cromite_patches/Add-cromite-flags-support.patch +++ b/build/cromite_patches/Add-cromite-flags-support.patch @@ -144,7 +144,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/base/BUILD.gn b/base/BUILD.gn --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -178,6 +178,8 @@ use_epoll = is_linux || is_chromeos || is_android +@@ -174,6 +174,8 @@ use_epoll = is_linux || is_chromeos || is_android # This does not include test code (test support and anything in the test # directory) which should use source_set as is recommended for GN targets). component("base") { @@ -153,7 +153,7 @@ diff --git a/base/BUILD.gn b/base/BUILD.gn sources = [ "allocator/allocator_check.cc", "allocator/allocator_check.h", -@@ -1036,7 +1038,7 @@ component("base") { +@@ -1035,7 +1037,7 @@ component("base") { "//build/config/compiler:wglobal_constructors", ] @@ -224,7 +224,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc namespace { // Pointer to the FeatureList instance singleton that was set via -@@ -472,6 +497,46 @@ bool FeatureList::IsEnabled(const Feature& feature) { +@@ -470,6 +495,46 @@ bool FeatureList::IsEnabled(const Feature& feature) { return g_feature_list_instance->IsFeatureEnabled(feature); } @@ -271,7 +271,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc // static bool FeatureList::IsValidFeatureOrFieldTrialName(std::string_view name) { return IsStringASCII(name) && name.find_first_of(",<*") == std::string::npos; -@@ -742,6 +807,17 @@ void FeatureList::VisitFeaturesAndParams(FeatureVisitor& visitor, +@@ -737,6 +802,17 @@ void FeatureList::VisitFeaturesAndParams(FeatureVisitor& visitor, void FeatureList::FinalizeInitialization() { DCHECK(!initialized_); @@ -292,7 +292,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc diff --git a/base/feature_list.h b/base/feature_list.h --- a/base/feature_list.h +++ b/base/feature_list.h -@@ -174,8 +174,10 @@ enum class FeatureMacroHandshake { kSecret }; +@@ -177,8 +177,10 @@ enum class FeatureMacroHandshake { kSecret }; struct BASE_EXPORT LOGICALLY_CONST Feature { constexpr Feature(const char* name, FeatureState default_state, @@ -305,7 +305,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h #if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) if (std::string_view(name).find(BUILDFLAG(BANNED_BASE_FEATURE_PREFIX)) == 0) { -@@ -202,6 +204,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { +@@ -205,6 +207,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { // command line switch. const FeatureState default_state; @@ -315,7 +315,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h private: friend class FeatureList; -@@ -481,6 +486,11 @@ class BASE_EXPORT FeatureList { +@@ -485,6 +490,11 @@ class BASE_EXPORT FeatureList { // instance, which is checked in builds with DCHECKs enabled. static bool IsEnabled(const Feature& feature); @@ -327,7 +327,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h // Some characters are not allowed to appear in feature names or the // associated field trial names, as they are used as special characters for // command-line serialization. This function checks that the strings are ASCII -@@ -750,4 +760,62 @@ class BASE_EXPORT FeatureList { +@@ -754,4 +764,62 @@ class BASE_EXPORT FeatureList { } // namespace base @@ -393,7 +393,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h diff --git a/build/android/gyp/java_cpp_features.py b/build/android/gyp/java_cpp_features.py --- a/build/android/gyp/java_cpp_features.py +++ b/build/android/gyp/java_cpp_features.py -@@ -22,10 +22,27 @@ class FeatureParserDelegate(java_cpp_utils.CppConstantParser.Delegate): +@@ -21,10 +21,27 @@ class FeatureParserDelegate(java_cpp_utils.CppConstantParser.Delegate): # ExtractConstantName() -> 'ConstantName' # ExtractValue() -> '"StringNameOfTheFeature"' FEATURE_RE = re.compile(r'BASE_FEATURE\(k([^,]+),') @@ -463,7 +463,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settin diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -127,7 +127,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -130,7 +130,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment } @Override @@ -528,7 +528,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -@@ -34,7 +35,9 @@ import org.chromium.base.Callback; +@@ -32,7 +33,9 @@ import org.chromium.base.Callback; import org.chromium.base.CallbackUtils; import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; @@ -538,7 +538,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeBaseAppCompatActivity; -@@ -42,12 +45,14 @@ import org.chromium.chrome.browser.back_press.BackPressHelper; +@@ -40,12 +43,14 @@ import org.chromium.chrome.browser.back_press.BackPressHelper; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; @@ -553,7 +553,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerFactory; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; -@@ -89,6 +94,40 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -88,6 +93,40 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback, SnackbarManageable { private static final String TAG = "SettingsActivity"; @@ -594,7 +594,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public static final String EXTRA_SHOW_FRAGMENT = "show_fragment"; -@@ -155,7 +194,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -154,7 +193,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity mProfile, mSnackbarManagerSupplier, mBottomSheetControllerSupplier, @@ -607,7 +607,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java -@@ -17,11 +17,12 @@ import org.chromium.base.version_info.VersionInfo; +@@ -19,12 +19,13 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; @@ -616,24 +616,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/setting import org.chromium.components.browser_ui.settings.SettingsUtils; /** Settings fragment containing preferences aimed at Chrome and web developers. */ + @NullMarked -public class DeveloperSettings extends PreferenceFragmentCompat implements EmbeddableSettingsPage { +public class DeveloperSettings extends ChromeBaseSettingsFragment implements EmbeddableSettingsPage { private static final String UI_PREF_BETA_STABLE_HINT = "beta_stable_hint"; // Non-translated strings: -@@ -52,7 +53,7 @@ public class DeveloperSettings extends PreferenceFragmentCompat implements Embed +@@ -55,7 +56,7 @@ public class DeveloperSettings extends PreferenceFragmentCompat implements Embed } @Override -- public void onCreatePreferences(Bundle savedInstanceState, String s) { -+ public void onCreatePreferencesCromite(Bundle savedInstanceState, String s) { +- public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String s) { ++ public void onCreatePreferencesCromite(@Nullable Bundle savedInstanceState, @Nullable String s) { SettingsUtils.addPreferencesFromResource(this, R.xml.developer_preferences); if (VersionInfo.isBetaBuild() || VersionInfo.isStableBuild()) { 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 -@@ -406,6 +406,10 @@ using flags_ui::kOsLinux; +@@ -407,6 +407,10 @@ using flags_ui::kOsLinux; using flags_ui::kOsMac; using flags_ui::kOsWin; @@ -644,9 +645,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc namespace about_flags { namespace { -@@ -4705,6 +4709,10 @@ const FeatureEntry::FeatureVariation kHistorySyncOptinExpansionPillVariations[] - nullptr}}; - #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +@@ -4835,6 +4839,10 @@ const FeatureEntry::Choice kDataSharingVersioningStateChoices[] = { + }; + // LINT.ThenChange(//ios/chrome/browser/flags/about_flags.mm:DataSharingVersioningChoices) +#define FEATURE_PARAM_SECTION +#include "cromite_flags/chrome_browser_about_flags_cc.inc" @@ -655,7 +656,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. -@@ -4731,6 +4739,9 @@ const FeatureEntry::FeatureVariation kHistorySyncOptinExpansionPillVariations[] +@@ -4861,6 +4869,9 @@ const FeatureEntry::Choice kDataSharingVersioningStateChoices[] = { const FeatureEntry kFeatureEntries[] = { // Include generated flags for flag unexpiry; see //docs/flag_expiry.md and // //tools/flags/generate_unexpire_flags.py. @@ -727,7 +728,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn 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 -@@ -1348,5 +1348,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, +@@ -1421,5 +1421,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, "WebOtpCrossDeviceSimpleString", base::FEATURE_DISABLED_BY_DEFAULT); @@ -737,9 +738,9 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -286,6 +286,7 @@ constexpr base::FeatureParam kQuickDeleteAndroidSurveyTriggerId( - "trigger_id", - /*default_value=*/""); +@@ -318,6 +318,7 @@ constexpr base::FeatureParam kTouchToSearchCalloutTextVariant( + "text_variant", + /*default_value=*/false); +#include "cromite_flags/chrome_browser_flags_android_chrome_feature_list_h.inc" } // namespace android @@ -759,7 +760,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f import java.util.List; import java.util.Map; -@@ -924,7 +928,7 @@ public abstract class ChromeFeatureList { +@@ -1015,7 +1019,7 @@ public abstract class ChromeFeatureList { public static final CachedFlag sWebApkMinShellApkVersion = newCachedFlag(WEB_APK_MIN_SHELL_APK_VERSION, true); @@ -768,7 +769,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f List.of( sAccountForSuppressedKeyboardInsets, sAllowTabClosingUponMinimization, -@@ -1048,6 +1052,13 @@ public abstract class ChromeFeatureList { +@@ -1152,6 +1156,13 @@ public abstract class ChromeFeatureList { sUseLibunwindstackNativeUnwinderAndroid, sWebApkMinShellApkVersion); @@ -958,7 +959,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -500,4 +500,5 @@ bool HasTabSearchToolbarButton() { +@@ -430,4 +430,5 @@ bool HasTabSearchToolbarButton() { return has_tab_search_toolbar_button; } @@ -999,7 +1000,7 @@ diff --git a/chrome/browser/unexpire_flags.cc b/chrome/browser/unexpire_flags.cc diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1795,4 +1795,5 @@ BASE_FEATURE(kDisableShortcutsEnableDiy, +@@ -1866,4 +1866,5 @@ BASE_FEATURE(kDisableShortcutsEnableDiy, "DisableShortcutsEnableDiy", base::FEATURE_ENABLED_BY_DEFAULT); @@ -1146,7 +1147,7 @@ diff --git a/components/components_strings.grd b/components/components_strings.g + - + diff --git a/components/content_settings/core/common/features.cc b/components/content_settings/core/common/features.cc --- a/components/content_settings/core/common/features.cc +++ b/components/content_settings/core/common/features.cc @@ -1186,7 +1187,7 @@ diff --git a/components/offline_pages/core/offline_page_feature.h b/components/o diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc -@@ -183,4 +183,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, +@@ -191,4 +191,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, "ImprovedPasswordChangeService", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1195,7 +1196,7 @@ diff --git a/components/password_manager/core/browser/features/password_features diff --git a/components/permissions/features.cc b/components/permissions/features.cc --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -146,6 +146,8 @@ BASE_FEATURE(kOsAdditionalSecurityPermissionKillSwitch, +@@ -147,6 +147,8 @@ BASE_FEATURE(kOsAdditionalSecurityPermissionKillSwitch, "OsAdditionalSecurityPermissionKillSwitch", base::FEATURE_DISABLED_BY_DEFAULT); #endif @@ -1249,7 +1250,7 @@ diff --git a/components/variations/synthetic_trials_active_group_id_provider.h b diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flags_state.cc --- a/components/webui/flags/flags_state.cc +++ b/components/webui/flags/flags_state.cc -@@ -376,6 +376,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( +@@ -377,6 +377,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); @@ -1271,7 +1272,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag CHECK(entry_it != name_to_switch_map.end()); const SwitchEntry& entry = entry_it->second; -@@ -709,6 +724,27 @@ void FlagsState::GetFlagFeatureEntries( +@@ -710,6 +725,27 @@ void FlagsState::GetFlagFeatureEntries( data.Set("links", std::move(links)); } @@ -1299,7 +1300,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag switch (entry.type) { case FeatureEntry::SINGLE_VALUE: case FeatureEntry::SINGLE_DISABLE_VALUE: -@@ -836,6 +872,16 @@ void FlagsState::AddSwitchesToCommandLine( +@@ -837,6 +873,16 @@ void FlagsState::AddSwitchesToCommandLine( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); if (entry_it == name_to_switch_map.end()) { @@ -1316,7 +1317,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag NOTREACHED(); } -@@ -1092,6 +1138,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( +@@ -1093,6 +1139,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( bool FlagsState::IsSupportedFeature(const FlagsStorage* storage, const std::string& name, int platform_mask) const { @@ -1331,7 +1332,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag for (const auto& entry : feature_entries_) { DCHECK(entry.IsValid()); if (!(entry.supported_platforms & platform_mask)) { -@@ -1130,6 +1184,11 @@ void FlagsState::SetFlags( +@@ -1131,6 +1185,11 @@ void FlagsState::SetFlags( FindFeatureEntryByName(feature_internal_name); // Since this flag is currently enabled, we know for sure that we can find // its feature entry using its internal name. @@ -1346,7 +1347,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag diff --git a/components/webui/flags/resources/app.css b/components/webui/flags/resources/app.css --- a/components/webui/flags/resources/app.css +++ b/components/webui/flags/resources/app.css -@@ -383,3 +383,27 @@ cr-tabs { +@@ -391,3 +391,27 @@ cr-tabs { padding-top: 1.5rem; } } @@ -1385,7 +1386,7 @@ diff --git a/components/webui/flags/resources/app.html.ts b/components/webui/fla @@ -1491,7 +1492,7 @@ diff --git a/components/webui/flags/resources/app.ts b/components/webui/flags/re diff --git a/components/webui/flags/resources/experiment.css b/components/webui/flags/resources/experiment.css --- a/components/webui/flags/resources/experiment.css +++ b/components/webui/flags/resources/experiment.css -@@ -12,6 +12,7 @@ +@@ -17,6 +17,7 @@ } .experiment { @@ -1499,7 +1500,7 @@ diff --git a/components/webui/flags/resources/experiment.css b/components/webui/ color: var(--secondary-color); line-height: 1.45; width: 100%; -@@ -79,6 +80,11 @@ +@@ -84,6 +85,11 @@ resize: none; } @@ -1511,7 +1512,7 @@ diff --git a/components/webui/flags/resources/experiment.css b/components/webui/ select { background: white; border: 1px solid var(--link-color); -@@ -155,6 +161,7 @@ input { +@@ -160,6 +166,7 @@ input { @media (max-width: 480px) { .experiment { border-bottom: 1px solid var(--separator-color); @@ -1519,7 +1520,7 @@ diff --git a/components/webui/flags/resources/experiment.css b/components/webui/ } .experiment-name { -@@ -172,7 +179,6 @@ input { +@@ -177,7 +184,6 @@ input { .experiment .experiment-actions { max-width: 100%; padding-top: 12px; @@ -1527,7 +1528,7 @@ diff --git a/components/webui/flags/resources/experiment.css b/components/webui/ width: 100%; } -@@ -180,7 +186,6 @@ input { +@@ -185,7 +191,6 @@ input { .body { overflow: hidden; text-overflow: ellipsis; @@ -1551,7 +1552,7 @@ diff --git a/components/webui/flags/resources/experiment.html.ts b/components/we @@ -86,7 +87,9 @@ export function getHtml(this: ExperimentElement) { @change="${this.onExperimentSelectChange_}"> ${this.feature_.options!.map(option => html` -