From eab93d000f67c1fcab8cd68fb6d1d3d7f03e80a7 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Thu, 5 Feb 2026 14:18:21 +0100 Subject: [PATCH] Patches for 145 (final version) --- .../Add-an-always-incognito-mode.patch | 13 +- .../Add-bookmark-import-export-actions.patch | 20 +- build/patches/Add-cromite-flags-support.patch | 12 +- ...dd-custom-tab-intents-privacy-option.patch | 20 +- ...-to-disable-external-intent-requests.patch | 13 +- .../Add-menu-item-to-bookmark-all-tabs.patch | 8 +- build/patches/Add-search-engine.patch | 4 +- .../Add-setting-to-clear-data-on-exit.patch | 33 +- build/patches/Bromite-auto-updater.patch | 24 +- .../Bromite-subresource-adblocker.patch | 20 +- .../Content-settings-infrastructure.patch | 13 +- build/patches/Cromite-Branding.patch | 25 +- .../patches/Disable-all-predictors-code.patch | 28 +- .../Disable-device-bound-session.patch | 29 +- build/patches/Disable-safety-check.patch | 19 +- ...isable-speechSynthesis-getVoices-API.patch | 29 +- ...ndroid-Dynamic-Performance-Framework.patch | 42 +- .../Enable-Global-Privacy-Control.patch | 12 +- .../Enable-extension-in-incognito.patch | 636 ++++++++++++++++-- .../Enable-native-Android-autofill.patch | 16 +- ...le-search-engine-settings-desktop-ui.patch | 15 +- build/patches/Enable-share-intent.patch | 6 +- ...al-support-for-extensions-on-Android.patch | 141 +++- .../Experimental-user-scripts-support.patch | 27 +- build/patches/Eyeo-Adblock-for-Cromite.patch | 44 +- ...story-number-of-days-privacy-setting.patch | 13 +- .../Move-navigation-bar-to-bottom.patch | 68 +- ...ning-all-cookies-by-top-frame-domain.patch | 2 +- ...vate-network-access-content-settings.patch | 31 +- .../Remove-binary-blob-integrations.patch | 29 +- .../Restore-Simplified-NTP-launch.patch | 2 +- ...-button-in-top-toolbar-customization.patch | 15 +- .../Restore-chrome-password-store.patch | 73 +- ...evert-Permit-blocking-of-view-source.patch | 2 +- ...l-of-execution-context-address-space.patch | 11 +- .../Set-the-screen-frame-rate-to-60-Hz.patch | 43 +- build/patches/Timezone-customization.patch | 6 +- .../Use-list-mode-for-tab-switcher.patch | 4 +- build/patches/User-agent-customization.patch | 27 +- build/patches/Welcome-screen.patch | 58 +- build/patches/bromite-build-utils.patch | 16 +- .../eyeo-133.0.6943.49-android_api.patch | 80 ++- ...romium-Disable-translate-integration.patch | 148 +++- 43 files changed, 1433 insertions(+), 444 deletions(-) diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 8e39b48e..a78a7e4a 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -36,7 +36,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/history/HistoryManager.java | 27 ++- .../chrome/browser/history/HistoryPage.java | 16 ++ .../native_page/NativePageFactory.java | 4 +- - .../chrome/browser/ntp/RecentTabsManager.java | 28 ++- + .../chrome/browser/ntp/RecentTabsManager.java | 29 ++- .../privacy/settings/IncognitoSettings.java | 175 ++++++++++++++++++ .../settings/FragmentDependencyProvider.java | 4 + .../HistoricalTabModelObserver.java | 5 +- @@ -89,7 +89,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 + - 70 files changed, 807 insertions(+), 116 deletions(-) + 70 files changed, 808 insertions(+), 116 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 @@ -654,10 +654,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java -@@ -48,6 +48,15 @@ import org.chromium.ui.base.WindowAndroid; +@@ -48,6 +48,16 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; ++import android.content.Context; +import android.content.Intent; +import android.provider.Browser; +import android.net.Uri; @@ -670,7 +671,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM import java.util.HashMap; import java.util.List; import java.util.Map; -@@ -120,7 +129,8 @@ public class RecentTabsManager +@@ -120,7 +130,8 @@ public class RecentTabsManager SnackbarManager snackbarManager, Runnable showHistoryManager, RecentlyClosedEntriesManager recentlyClosedEntriesManager) { @@ -680,7 +681,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM mActiveTab = tab; mShowHistoryManager = showHistoryManager; mForeignSessionHelper = new ForeignSessionHelper(profile); -@@ -310,6 +320,22 @@ public class RecentTabsManager +@@ -310,6 +321,22 @@ public class RecentTabsManager */ public void openRecentlyClosedTab(RecentlyClosedTab tab, int windowDisposition) { if (mIsDestroyed) return; @@ -858,7 +859,7 @@ new file mode 100644 + MenuItem help = + menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.string.menu_help); + help.setIcon(VectorDrawableCompat.create( -+ getResources(), R.drawable.ic_help_and_feedback, getActivity().getTheme())); ++ getResources(), R.drawable.ic_help_24dp, getActivity().getTheme())); + } + + @Override diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 0d08afad..47272a25 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -327,8 +327,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } +void BookmarkBridge::ImportBookmarks(JNIEnv* env, -+ const JavaParamRef& obj, -+ const JavaParamRef& java_window) { ++ const JavaRef& obj, ++ const JavaRef& java_window) { + DCHECK(IsLoaded()); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + @@ -357,9 +357,9 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +} + +void BookmarkBridge::ExportBookmarks(JNIEnv* env, -+ const JavaParamRef& obj, -+ const JavaParamRef& java_window, -+ const JavaParamRef& j_export_path) { ++ const JavaRef& obj, ++ const JavaRef& java_window, ++ const JavaRef& j_export_path) { + DCHECK(IsLoaded()); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + @@ -544,13 +544,13 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser jint type); + void ImportBookmarks(JNIEnv* env, -+ const base::android::JavaParamRef& obj, -+ const base::android::JavaParamRef& java_window); ++ const base::android::JavaRef& obj, ++ const base::android::JavaRef& java_window); + + void ExportBookmarks(JNIEnv* env, -+ const base::android::JavaParamRef& obj, -+ const base::android::JavaParamRef& java_window, -+ const base::android::JavaParamRef& j_export_path); ++ const base::android::JavaRef& obj, ++ const base::android::JavaRef& java_window, ++ const base::android::JavaRef& j_export_path); + void ExportBookmarksEnd(const base::android::ScopedJavaGlobalRef& obj, + ui::WindowAndroid* window, bookmark_html_writer::Result result) const; + diff --git a/build/patches/Add-cromite-flags-support.patch b/build/patches/Add-cromite-flags-support.patch index 241b6dd2..19983be2 100644 --- a/build/patches/Add-cromite-flags-support.patch +++ b/build/patches/Add-cromite-flags-support.patch @@ -24,7 +24,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../homepage/settings/HomepageSettings.java | 2 +- .../privacy/settings/PrivacySettings.java | 2 +- .../settings/FragmentDependencyProvider.java | 10 +- - .../browser/settings/SettingsActivity.java | 39 ++++ + .../browser/settings/SettingsActivity.java | 41 ++++- .../tracing/settings/DeveloperSettings.java | 5 +- chrome/browser/about_flags.cc | 11 ++ chrome/browser/browser_features.cc | 1 + @@ -106,7 +106,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + - 93 files changed, 845 insertions(+), 31 deletions(-) + 93 files changed, 846 insertions(+), 32 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp @@ -620,14 +620,16 @@ 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"; -@@ -206,6 +244,7 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -206,7 +244,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity mSnackbarManagerSupplier, mBottomSheetControllerSupplier, getModalDialogManagerSupplier(), -+ () -> new RequestRestartDelegate(mSnackbarManagerSupplier, this), - () -> mSearchCoordinator), +- () -> mSearchCoordinator), ++ () -> mSearchCoordinator, ++ () -> new RequestRestartDelegate(mSnackbarManagerSupplier, this)), /* recursive= */ true); fragmentManager.registerFragmentLifecycleCallbacks( + new WideDisplayPaddingApplier(), /* recursive= */ true); 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 diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index 424186d2..5e23743a 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -13,7 +13,7 @@ See also: https://github.com/bromite/bromite/issues/1474 License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../java/res/xml/privacy_preferences.xml | 15 ++++++ - .../browser/LaunchIntentDispatcher.java | 21 ++++++++ + .../browser/LaunchIntentDispatcher.java | 22 ++++++++ .../CustomTabIntentDataProvider.java | 22 ++++---- .../customtabs/CustomTabsConnection.java | 3 +- .../IncognitoCustomTabIntentDataProvider.java | 14 +++++ @@ -25,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../OriginVerifier.java | 5 ++ .../core/common/language_experiments.cc | 1 + .../add-custom-tab-intents-privacy-option.inc | 1 + - 13 files changed, 158 insertions(+), 13 deletions(-) + 13 files changed, 159 insertions(+), 13 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc @@ -57,7 +57,15 @@ 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/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -51,6 +51,9 @@ import java.lang.annotation.Retention; +@@ -22,6 +22,7 @@ import androidx.core.os.BuildCompat; + + import org.chromium.base.ApplicationStatus; + import org.chromium.base.CommandLine; ++import org.chromium.base.ContextUtils; + import org.chromium.base.IntentUtils; + import org.chromium.base.Log; + import org.chromium.base.metrics.RecordHistogram; +@@ -51,6 +52,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Set; @@ -67,7 +75,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis /** * Dispatches incoming intents to the appropriate activity based on the current configuration and * Intent fired. -@@ -137,6 +140,9 @@ public class LaunchIntentDispatcher { +@@ -137,6 +141,9 @@ public class LaunchIntentDispatcher { */ public static boolean isCustomTabIntent(Intent intent) { if (intent == null) return false; @@ -77,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis Log.w( TAG, "CustomTabsIntent#shouldAlwaysUseBrowserUI() = " -@@ -163,6 +169,10 @@ public class LaunchIntentDispatcher { +@@ -163,6 +170,10 @@ public class LaunchIntentDispatcher { // Make sure the result of the CustomTabActivity is forwarded to the client. newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); @@ -88,7 +96,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis // Since configureIntentForResizableCustomTab() might change the componenet/class // associated with the passed intent, it needs to be called after #setClassName(context, // CustomTabActivity.class.getName()); -@@ -333,6 +343,17 @@ public class LaunchIntentDispatcher { +@@ -333,6 +344,17 @@ public class LaunchIntentDispatcher { if (Intent.ACTION_VIEW.equals(newIntent.getAction()) && !IntentHandler.wasIntentSenderChrome(newIntent)) { diff --git a/build/patches/Add-flag-to-disable-external-intent-requests.patch b/build/patches/Add-flag-to-disable-external-intent-requests.patch index 53722db4..96a32da0 100644 --- a/build/patches/Add-flag-to-disable-external-intent-requests.patch +++ b/build/patches/Add-flag-to-disable-external-intent-requests.patch @@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../java/res/xml/privacy_preferences.xml | 7 +++- .../customtabs/CustomTabDelegateFactory.java | 2 ++ - .../ExternalNavigationDelegateImpl.java | 4 ++- + .../ExternalNavigationDelegateImpl.java | 6 ++-- .../cromite/sAllowExternalIntentRequests.java | 33 +++++++++++++++++++ ...g-to-disable-external-intent-requests.grdp | 9 +++++ .../android/external_intents_features.cc | 6 ++++ @@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...ag-to-disable-external-intent-requests.inc | 13 ++++++++ ...t-Delete-block-external-form-redirects.inc | 15 +++++++++ ...ag-to-disable-external-intent-requests.inc | 3 ++ - 12 files changed, 118 insertions(+), 2 deletions(-) + 12 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-flag-to-disable-external-intent-requests.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc @@ -85,6 +85,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/Ext + return !sAllowExternalIntentRequests.getInstance().isEnabled(); } + @Override +@@ -316,7 +318,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat + && params.isInitialNavigationInFrame() + // TODO(crbug.com/452537438): Figure out a better way to check whether we are in + // desktop windowing mode or if the device can enter desktop windowing mode. +- && (DeviceInfo.isDesktop() || params.isInDesktopWindowingMode()); ++ && (params.isInDesktopWindowingMode()); + } + @Override diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java new file mode 100644 diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 1abc4c8f..96f5e8ae 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -167,7 +167,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +base::android::ScopedJavaLocalRef +BookmarkBridge::GetBookmarkIdForTabsCollection( + JNIEnv* env, -+ const JavaParamRef& url) { ++ const JavaRef& url) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + GURL gurl = url::GURLAndroid::ToNativeGURL(env, url); @@ -218,7 +218,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +ScopedJavaLocalRef BookmarkBridge::GetTabsCollectionFolderId( + JNIEnv* env, -+ const JavaParamRef& obj) { ++ const JavaRef& obj) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + const BookmarkNode* tabs_collection_node = bookmark_model_->tabs_collection_node(); + ScopedJavaLocalRef folder_id_obj = @@ -239,7 +239,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + base::android::ScopedJavaLocalRef GetBookmarkIdForTabsCollection( + JNIEnv* env, -+ const base::android::JavaParamRef& url); ++ const base::android::JavaRef& url); + base::android::ScopedJavaLocalRef GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); @@ -250,7 +250,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + base::android::ScopedJavaLocalRef GetTabsCollectionFolderId( + JNIEnv* env, -+ const base::android::JavaParamRef& obj); ++ const base::android::JavaRef& obj); + base::android::ScopedJavaLocalRef AddFolder( JNIEnv* env, diff --git a/build/patches/Add-search-engine.patch b/build/patches/Add-search-engine.patch index 0fec294a..2c8e96b0 100644 --- a/build/patches/Add-search-engine.patch +++ b/build/patches/Add-search-engine.patch @@ -265,8 +265,8 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json + action(action_name) { visibility = [ ":$source_set_name" ] - script = "//build/gn_run_binary.py" -@@ -63,6 +68,10 @@ template("json_to_struct") { + script = "//tools/json_to_struct/json_to_struct.py" +@@ -61,6 +66,10 @@ template("json_to_struct") { "--namespace=" + invoker.namespace, "--schema=" + rebase_path(invoker.schema_file, root_build_dir), ] diff --git a/build/patches/Add-setting-to-clear-data-on-exit.patch b/build/patches/Add-setting-to-clear-data-on-exit.patch index 392f0197..44de78d2 100644 --- a/build/patches/Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/Add-setting-to-clear-data-on-exit.patch @@ -8,7 +8,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../java/res/xml/privacy_preferences.xml | 5 ++ .../chrome/browser/ChromeTabbedActivity.java | 7 +- .../browsing_data/BrowsingDataBridge.java | 12 +-- - .../ClearBrowsingDataFragment.java | 31 ++++++-- + .../ClearBrowsingDataFragment.java | 37 +++++++-- .../ClearBrowsingDataFragmentAtStart.java | 79 +++++++++++++++++++ chrome/app/settings_strings.grdp | 10 +++ chrome/browser/about_flags.cc | 1 + @@ -41,7 +41,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html content/browser/storage_partition_impl.cc | 2 + .../public/browser/browsing_data_remover.h | 7 +- .../Add-setting-to-clear-data-on-exit.inc | 8 ++ - 37 files changed, 410 insertions(+), 34 deletions(-) + 37 files changed, 415 insertions(+), 35 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-clear-data-on-exit.inc @@ -176,7 +176,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C item.isSelected()); } -@@ -447,8 +454,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -447,8 +454,16 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment .setBrowsingDataDeletionTimePeriod(mLastSelectedTimePeriod); } @@ -186,11 +186,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C + /** Returns the list of supported {@link DialogOption}. */ - private static List getDialogOptions(Bundle fragmentArgs) { -+ protected static List getDialogOptions(Bundle fragmentArgs) { ++ protected List getDialogOptions(Bundle fragmentArgs) { ++ return getDialogOptionsStatic(fragmentArgs); ++ } ++ ++ private static List getDialogOptionsStatic(Bundle fragmentArgs) { String referrer = fragmentArgs.getString( ClearBrowsingDataFragment.CLEAR_BROWSING_DATA_REFERRER, null); -@@ -474,6 +485,10 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -474,6 +489,10 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment DialogOption.CLEAR_SITE_SETTINGS); } @@ -201,7 +205,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C /** * Decides whether a given dialog option should be selected when the dialog is initialized. * -@@ -482,7 +497,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -482,7 +501,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment */ private boolean isOptionSelectedByDefault(@DialogOption int option) { return BrowsingDataBridge.getForProfile(getProfile()) @@ -210,7 +214,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C } /** -@@ -550,6 +565,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -550,6 +569,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment * options. */ private void onClearButtonClicked() { @@ -218,7 +222,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C if (shouldShowImportantSitesDialog()) { showImportantDialogThenClear(); return; -@@ -579,6 +595,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -579,6 +599,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment Button clearButton = (Button) assumeNonNull(getView()).findViewById(R.id.clear_button); boolean isEnabled = !getSelectedOptions().isEmpty(); clearButton.setEnabled(isEnabled); @@ -226,7 +230,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C } private int getSpinnerIndex( -@@ -656,7 +673,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -656,7 +677,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment .getBoolean(Pref.ALLOW_DELETING_BROWSER_HISTORY)) { enabled = false; browsingDataBridge.setBrowsingDataDeletionPreference( @@ -235,7 +239,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C } // Disable tabs closure if the user is in multi-window mode. -@@ -686,8 +703,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment +@@ -686,8 +707,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment mSigninManager.addSignInStateObserver(this); setHasOptionsMenu(true); @@ -248,6 +252,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C @Override public ObservableSupplier getPageTitle() { return mPageTitle; +@@ -989,7 +1014,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment + public void updateDynamicPreferences( + Context context, SettingsIndexData indexData, Profile profile) { + Bundle args = createFragmentArgs(context.getClass().getName()); +- List options = getDialogOptions(args); ++ List options = getDialogOptionsStatic(args); + // Not all checkboxes defined in the layout are necessarily handled by this + // class or a particular subclass. Hide those that are not. + Set unboundOptions = getAllOptions(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java new file mode 100644 --- /dev/null diff --git a/build/patches/Bromite-auto-updater.patch b/build/patches/Bromite-auto-updater.patch index c5ba2ec6..3568243a 100644 --- a/build/patches/Bromite-auto-updater.patch +++ b/build/patches/Bromite-auto-updater.patch @@ -21,7 +21,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/endpoint_fetcher/BUILD.gn | 32 ++ chrome/browser/endpoint_fetcher/DEPS | 3 + chrome/browser/endpoint_fetcher/OWNERS | 1 + - .../endpoint_fetcher_android.cc | 107 +++++++ + .../endpoint_fetcher_android.cc | 109 +++++++ .../endpoint_fetcher/EndpointFetcher.java | 63 ++++ .../EndpointHeaderResponse.java | 31 ++ .../endpoint_fetcher/EndpointResponse.java | 30 ++ @@ -50,7 +50,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/manta/base_provider.cc | 4 +- .../Bromite-auto-updater.inc | 3 + .../Bromite-auto-updater.inc | 1 + - 42 files changed, 1154 insertions(+), 106 deletions(-) + 42 files changed, 1156 insertions(+), 106 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/CromiteUpdateStatusProvider.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java create mode 100644 chrome/browser/endpoint_fetcher/BUILD.gn @@ -366,7 +366,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMen + mMenuUiState.itemState.summary = + resources.getString(defaultUpdateSummary); + } -+ mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp; ++ mMenuUiState.itemState.icon = R.drawable.ic_history_24dp; + mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light; + mMenuUiState.itemState.enabled = true; + break; @@ -390,7 +390,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMen + mMenuUiState.itemState.title = R.string.menu_inline_update_failed; + mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue_dark; + mMenuUiState.itemState.summary = resources.getString(R.string.try_again); -+ mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp; ++ mMenuUiState.itemState.icon = R.drawable.ic_history_24dp; + mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light; + mMenuUiState.itemState.enabled = true; + break; @@ -758,7 +758,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc b/chrom new file mode 100644 --- /dev/null +++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc -@@ -0,0 +1,107 @@ +@@ -0,0 +1,109 @@ +// Copyright 2019 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -815,11 +815,11 @@ new file mode 100644 + +static void JNI_EndpointFetcher_NativeFetchWithNoAuth( + JNIEnv* env, -+ const base::android::JavaParamRef& jprofile, -+ const base::android::JavaParamRef& jurl, ++ const base::android::JavaRef& jprofile, ++ const base::android::JavaRef& jurl, + jlong jtimeout, jboolean intercept_redirect, + jint jannotation_hash_code, -+ const base::android::JavaParamRef& jcallback) { ++ const base::android::JavaRef& jcallback) { + auto endpoint_fetcher = std::make_unique( + Profile::FromJavaObject(jprofile) + ->GetDefaultStoragePartition() @@ -842,11 +842,11 @@ new file mode 100644 + +static void JNI_EndpointFetcher_NativeHeadWithNoAuth( + JNIEnv* env, -+ const base::android::JavaParamRef& jprofile, -+ const base::android::JavaParamRef& jurl, ++ const base::android::JavaRef& jprofile, ++ const base::android::JavaRef& jurl, + jlong jtimeout, jboolean intercept_redirect, + jint jannotation_hash_code, -+ const base::android::JavaParamRef& jcallback) { ++ const base::android::JavaRef& jcallback) { + auto endpoint_fetcher = std::make_unique( + Profile::FromJavaObject(jprofile) + ->GetDefaultStoragePartition() @@ -866,6 +866,8 @@ new file mode 100644 + std::move(endpoint_fetcher)), + nullptr); +} ++ ++DEFINE_JNI(EndpointFetcher) diff --git a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java new file mode 100644 --- /dev/null diff --git a/build/patches/Bromite-subresource-adblocker.patch b/build/patches/Bromite-subresource-adblocker.patch index c66baf50..fab20e36 100644 --- a/build/patches/Bromite-subresource-adblocker.patch +++ b/build/patches/Bromite-subresource-adblocker.patch @@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/browser_process_impl.h | 2 + chrome/browser/chrome_browser_main.cc | 3 + chrome/browser/flags/BUILD.gn | 3 + - .../flags/android/adblock_native_gateway.cc | 31 ++ + .../flags/android/adblock_native_gateway.cc | 33 ++ .../browser/flags/AdBlockNativeGateway.java | 30 ++ .../net/system_network_context_manager.cc | 4 + .../strings/android_chrome_strings.grd | 14 + @@ -50,7 +50,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/subresource_filter_features.cc | 118 +------- .../core/browser/verified_ruleset_dealer.cc | 4 + .../core/common/indexed_ruleset.cc | 5 +- - 38 files changed, 1282 insertions(+), 127 deletions(-) + 38 files changed, 1284 insertions(+), 127 deletions(-) create mode 100644 chrome/android/java/res/layout/adblock_editor.xml create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java @@ -630,7 +630,7 @@ diff --git a/chrome/browser/flags/android/adblock_native_gateway.cc b/chrome/bro new file mode 100755 --- /dev/null +++ b/chrome/browser/flags/android/adblock_native_gateway.cc -@@ -0,0 +1,31 @@ +@@ -0,0 +1,33 @@ +#include "chrome/browser/flags/jni_headers/AdBlockNativeGateway_jni.h" + +#include "base/android/jni_string.h" @@ -639,7 +639,7 @@ new file mode 100755 +#include "components/prefs/pref_service.h" + +using base::android::ScopedJavaLocalRef; -+using base::android::JavaParamRef; ++using base::android::JavaRef; + +static ScopedJavaLocalRef JNI_AdBlockNativeGateway_GetAdBlockFiltersURL( + JNIEnv* env) { @@ -648,20 +648,22 @@ new file mode 100755 +} + +static void JNI_AdBlockNativeGateway_SetAdBlockFiltersURL( -+ JNIEnv* env, const JavaParamRef& url) { ++ JNIEnv* env, const JavaRef& url) { + g_browser_process->local_state()->SetString(prefs::kAdBlockFiltersURL, + base::android::ConvertJavaStringToUTF8(env, url)); +} + -+static jboolean JNI_AdBlockNativeGateway_GetAdBlockEnabled( ++static bool JNI_AdBlockNativeGateway_GetAdBlockEnabled( + JNIEnv* env) { + return g_browser_process->local_state()->GetBoolean(prefs::kAdBlockEnabled); +} + +static void JNI_AdBlockNativeGateway_SetAdBlockEnabled( -+ JNIEnv* env, jboolean enabled) { ++ JNIEnv* env, bool enabled) { + g_browser_process->local_state()->SetBoolean(prefs::kAdBlockEnabled, enabled); +} ++ ++DEFINE_JNI(AdBlockNativeGateway) diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java new file mode 100755 --- /dev/null @@ -690,7 +692,7 @@ new file mode 100755 + } + + @NativeMethods -+ interface Natives { ++ public interface Natives { + void setAdBlockFiltersURL(String url); + String getAdBlockFiltersURL(); + void setAdBlockEnabled(boolean enabled); @@ -1115,7 +1117,7 @@ new file mode 100644 +#include "components/component_updater/update_scheduler.h" +#include "url/gurl.h" +#include "components/component_updater/download_filters_task.h" -+#include "components/subresource_filter/content/shared/browser/ruleset_service.h" ++#include "components/subresource_filter/content/browser/ruleset_service.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" + +namespace adblock_updater { diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index 93dae734..16aba41c 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -47,7 +47,7 @@ Require: bromite-build-utils.patch .../ContentSettingsResources.java | 32 +- .../site_settings/SingleCategorySettings.java | 57 ++- .../site_settings/SingleWebsiteSettings.java | 48 +- - .../site_settings/SiteSettings.java | 33 +- + .../site_settings/SiteSettings.java | 35 +- .../site_settings/SiteSettingsCategory.java | 18 +- .../site_settings/SiteSettingsDelegate.java | 2 + .../TriStateSiteSettingsPreference.java | 11 + @@ -84,7 +84,7 @@ Require: bromite-build-utils.patch .../platform/web_content_settings_client.h | 13 + .../execution_context/execution_context.cc | 16 + .../execution_context/execution_context.h | 5 + - 73 files changed, 1962 insertions(+), 105 deletions(-) + 73 files changed, 1963 insertions(+), 106 deletions(-) create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java @@ -2621,6 +2621,15 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } if (prefCategory != Type.THIRD_PARTY_COOKIES) { +@@ -278,7 +281,7 @@ public class SiteSettings extends BaseSiteSettingsFragment + // Always remove the divider as the search is based on containment style. + indexData.removeEntry(PreferenceParser.createUniqueId(prefFragment, "divider")); + +- for (@Type int prefCategory = 0; prefCategory < Type.NUM_ENTRIES; prefCategory++) { ++ for (@Type int prefCategory = 0; prefCategory < BromiteCustomContentSettingImpl.NUM_ENTRIES(); prefCategory++) { + if (SiteSettingsCategory.contentSettingsType(prefCategory) < 0) continue; + + String key = SiteSettingsCategory.preferenceKey(prefCategory); diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java diff --git a/build/patches/Cromite-Branding.patch b/build/patches/Cromite-Branding.patch index d66e57ec..1da40405 100644 --- a/build/patches/Cromite-Branding.patch +++ b/build/patches/Cromite-Branding.patch @@ -45,6 +45,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../prefs/chrome_pref_service_factory.cc | 6 +- .../profiles/profile_shortcut_manager_win.cc | 2 +- .../settings/settings_menu/settings_menu.html | 14 ++- + .../tab_group_sync/TabGroupSyncUtils.java | 5 +- .../OmniboxSuggestionsContainer.java | 8 +- .../strings/android_chrome_strings.grd | 4 +- .../toolbar/chrome_labs/chrome_labs_utils.cc | 1 + @@ -66,9 +67,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../webui/version/resources/about_version.ts | 4 +- .../resources/about_version_mobile.css | 9 ++ content/child/runtime_features.cc | 44 ++++----- - .../Cromite-Branding.inc | 2 + + .../Cromite-Branding.inc | 1 + tools/grit/grit/grd_reader.py | 35 +++++++ - 64 files changed, 263 insertions(+), 173 deletions(-) + 65 files changed, 266 insertions(+), 174 deletions(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Cromite-Branding.inc diff --git a/build/BUILD.gn b/build/BUILD.gn @@ -13273,7 +13274,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x + android:layout_width="44dp" + android:layout_height="match_parent" + android:contentDescription="@string/search" -+ android:src="@drawable/ic_search" ++ android:src="@drawable/ic_search_24dp" + android:tooltipText="@string/accessibility_search_loupe_tooltip_text" + style="@style/ToolbarMenuButton" + app:tint="@color/default_icon_color_tint_list" /> @@ -13419,6 +13420,21 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html $i18n{aboutPageTitle} +diff --git a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java +--- a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java ++++ b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java +@@ -127,7 +127,10 @@ public final class TabGroupSyncUtils { + for (String syncGroupId : tabGroupSyncService.getAllGroupIds()) { + SavedTabGroup savedTabGroup = tabGroupSyncService.getGroup(syncGroupId); + // If there is no local ID the group is already hidden so this is a no-op. +- if (savedTabGroup == null || savedTabGroup.localId == null) continue; ++ if (savedTabGroup == null || savedTabGroup.localId == null) { ++ tabGroupSyncService.removeGroup(syncGroupId); ++ continue; ++ } + + if (!isInAnyWindow(savedTabGroup.localId, filterList)) { + tabGroupSyncService.removeLocalTabGroupMapping( diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java @@ -19295,8 +19311,7 @@ diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/C new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Cromite-Branding.inc -@@ -0,0 +1,2 @@ -+SET_CROMITE_FEATURE_ENABLED(kAndroidTabDeclutterArchiveAllButActiveTab); +@@ -0,0 +1 @@ +SET_CROMITE_FEATURE_ENABLED(kGridTabSwitcherUpdate); diff --git a/tools/grit/grit/grd_reader.py b/tools/grit/grit/grd_reader.py --- a/tools/grit/grit/grd_reader.py diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index 27b55766..d68c2970 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -59,6 +59,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/optimization_guide/features.gni | 3 +- .../core/page_content_annotations_features.cc | 7 +++++ .../page_content_annotations_model_manager.cc | 1 + + .../browser/client_side_phishing_model.cc | 4 +-- .../notification_content_detection/BUILD.gn | 4 --- components/viz/service/BUILD.gn | 4 +-- components/viz/service/gl/gpu_service_impl.cc | 18 ----------- @@ -83,7 +84,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/html/parser/html_document_parser.cc | 1 + .../document_speculation_rules.cc | 1 + .../platform/runtime_enabled_features.json5 | 2 +- - 78 files changed, 197 insertions(+), 139 deletions(-) + 79 files changed, 199 insertions(+), 141 deletions(-) create mode 100644 cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-all-predictors-code.inc @@ -1397,6 +1398,29 @@ diff --git a/components/page_content_annotations/core/page_content_annotations_m if (page_visibility_model_handler_) return; +diff --git a/components/safe_browsing/content/browser/client_side_phishing_model.cc b/components/safe_browsing/content/browser/client_side_phishing_model.cc +--- a/components/safe_browsing/content/browser/client_side_phishing_model.cc ++++ b/components/safe_browsing/content/browser/client_side_phishing_model.cc +@@ -466,7 +466,7 @@ void ClientSidePhishingModel::OnImageEmbeddingModelFileAndEmbeddingListLoaded( + model_metadata.value()); + } + +- int loaded_image_embedder_version = -1; // Valid versions start at 1. ++ [[maybe_unused]] int loaded_image_embedder_version = -1; // Valid versions start at 1. + if (image_embedding_model_metadata.has_value()) { + embedding_model_opt_guide_metadata_image_embedding_version_ = + image_embedding_model_metadata->image_embedding_model_version(); +@@ -490,9 +490,9 @@ void ClientSidePhishingModel::OnImageEmbeddingModelFileAndEmbeddingListLoaded( + embedding_list_version_num); + } + } ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + // Drop any existing target image embeddings in preparation for a new set. + target_image_embeddings_.clear(); +-#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + // Only load image embeddings when the version of their embedder matches the + // version of the embedder that's been loaded. + if (model_and_list.second.has_value() && diff --git a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn --- a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn +++ b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn @@ -1520,7 +1544,7 @@ new file mode 100644 --- /dev/null +++ b/cromite_flags/components/password_manager/core/browser/features/password_features_cc/Disable-all-predictors-code.inc @@ -0,0 +1 @@ -+SET_CROMITE_FEATURE_DISABLED(kDownloadModelForPasswordChange); ++SET_CROMITE_FEATURE_DISABLED(kProactivelyDownloadModelForPasswordChange); diff --git a/cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc b/cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Disable-device-bound-session.patch b/build/patches/Disable-device-bound-session.patch index c38e9c80..2dbea5ef 100644 --- a/build/patches/Disable-device-bound-session.patch +++ b/build/patches/Disable-device-bound-session.patch @@ -7,9 +7,34 @@ see https://w3c.github.io/webappsec-dbsc/#privacy-considerations License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - net/features.gni | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .../metrics/chrome_browser_main_extra_parts_metrics.cc | 6 ++++++ + net/features.gni | 2 +- + 2 files changed, 7 insertions(+), 1 deletion(-) +diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc +--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc ++++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc +@@ -124,6 +124,10 @@ + #include "chrome/browser/signin/bound_session_credentials/unexportable_key_service_factory.h" + #endif // BUILDFLAG(IS_MAC) + ++#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) ++#include "net/net_buildflags.h" ++#endif ++ + namespace { + + // The number of restarts to wait until removing the enable-benchmarking flag. +@@ -884,7 +888,9 @@ void RecordStartupMetrics() { + #endif // BUILDFLAG(IS_WIN) + + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) ++#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) + crypto::MaybeMeasureTpmOperations(unexportable_keys::GetDefaultConfig()); ++#endif + #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + + // Record whether Chrome is the default browser or not. diff --git a/net/features.gni b/net/features.gni --- a/net/features.gni +++ b/net/features.gni diff --git a/build/patches/Disable-safety-check.patch b/build/patches/Disable-safety-check.patch index 4b4322f2..e2ca951b 100644 --- a/build/patches/Disable-safety-check.patch +++ b/build/patches/Disable-safety-check.patch @@ -11,12 +11,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../settings/FragmentDependencyProvider.java | 29 ------------------- .../chrome/browser/settings/MainSettings.java | 2 +- .../settings/SettingsNavigationImpl.java | 3 +- + .../search/SearchIndexProviderRegistry.java | 2 -- chrome/browser/BUILD.gn | 1 - chrome/browser/safety_check/android/BUILD.gn | 2 -- .../safety_check/SafetyCheckBridge.java | 4 +-- .../suggestions/action/OmniboxPedal.java | 3 -- .../Disable-safety-check.inc | 1 + - 12 files changed, 6 insertions(+), 72 deletions(-) + 13 files changed, 6 insertions(+), 74 deletions(-) create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-safety-check.inc diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn @@ -30,7 +31,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/safety_hub/android:java", "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", -@@ -1141,8 +1140,6 @@ if (_is_default_toolchain) { +@@ -1129,8 +1128,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:junit", "//chrome/browser/recent_tabs/internal:junit", "//chrome/browser/safe_browsing/android:junit", @@ -39,7 +40,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/search_engines/android:junit", "//chrome/browser/search_resumption:junit", "//chrome/browser/serial/android:junit", -@@ -1434,8 +1431,6 @@ if (_is_default_toolchain) { +@@ -1422,8 +1419,6 @@ if (_is_default_toolchain) { "//chrome/browser/quick_delete:javatests", "//chrome/browser/renderer_host/android:javatests", "//chrome/browser/safe_browsing/android:javatests", @@ -211,6 +212,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin case SettingsFragment.SITE: return SiteSettings.class; case SettingsFragment.ACCESSIBILITY: +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java +@@ -123,8 +123,6 @@ public final class SearchIndexProviderRegistry { + .SEARCH_INDEX_DATA_PROVIDER, + org.chromium.chrome.browser.privacy.settings.PrivacySettings + .SEARCH_INDEX_DATA_PROVIDER, +- org.chromium.chrome.browser.safety_check.SafetyCheckSettingsFragment +- .SEARCH_INDEX_DATA_PROVIDER, + org.chromium.chrome.browser.tasks.tab_management.TabsSettings + .SEARCH_INDEX_DATA_PROVIDER, + org.chromium.chrome.browser.sync.settings.ManageSyncSettings diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn diff --git a/build/patches/Disable-speechSynthesis-getVoices-API.patch b/build/patches/Disable-speechSynthesis-getVoices-API.patch index 9345cd9a..77e555ad 100644 --- a/build/patches/Disable-speechSynthesis-getVoices-API.patch +++ b/build/patches/Disable-speechSynthesis-getVoices-API.patch @@ -11,18 +11,18 @@ Require: Timezone-customization.patch License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../renderer/chrome_content_renderer_client.cc | 2 +- - .../renderer/content_settings_agent_impl.cc | 9 ++++++++- - .../renderer/content_settings_agent_impl.h | 2 ++ - content/browser/speech/tts_android.cc | 2 +- - content/browser/speech/tts_win.cc | 2 +- - .../Disable-speechSynthesis-getVoices-API.inc | 8 ++++++++ - .../Disable-speechSynthesis-getVoices-API.inc | 2 ++ - .../Disable-speechSynthesis-getVoices-API.inc | 3 +++ - .../Disable-speechSynthesis-getVoices-API.inc | 1 + - .../platform/web_content_settings_client.h | 2 ++ - .../modules/speech/speech_synthesis.cc | 18 +++++++++++++++--- - 11 files changed, 44 insertions(+), 7 deletions(-) + .../chrome_content_renderer_client.cc | 2 +- + .../renderer/content_settings_agent_impl.cc | 9 ++++++++- + .../renderer/content_settings_agent_impl.h | 2 ++ + content/browser/speech/tts_android.cc | 2 +- + content/browser/speech/tts_win.cc | 2 +- + .../Disable-speechSynthesis-getVoices-API.inc | 8 ++++++++ + .../Disable-speechSynthesis-getVoices-API.inc | 2 ++ + .../Disable-speechSynthesis-getVoices-API.inc | 3 +++ + .../Disable-speechSynthesis-getVoices-API.inc | 1 + + .../platform/web_content_settings_client.h | 2 ++ + .../modules/speech/speech_synthesis.cc | 19 ++++++++++++++++--- + 11 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Disable-speechSynthesis-getVoices-API.inc create mode 100644 cromite_flags/media/base/media_switches_cc/Disable-speechSynthesis-getVoices-API.inc create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-speechSynthesis-getVoices-API.inc @@ -163,7 +163,7 @@ diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/thi #include "third_party/blink/renderer/bindings/modules/v8/v8_speech_synthesis_error_event_init.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_speech_synthesis_event_init.h" #include "third_party/blink/renderer/core/dom/document.h" -@@ -88,9 +90,19 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window) +@@ -88,9 +90,20 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window) void SpeechSynthesis::OnSetVoiceList( Vector mojom_voices) { voice_list_.clear(); @@ -172,7 +172,8 @@ diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/thi - MakeGarbageCollected(std::move(mojom_voice))); + bool allowed = !base::FeatureList::IsEnabled(features::kDisableSpeechSynthesisVoiceList); + if (allowed) { -+ auto* frame = local_dom_window_->GetFrame(); ++ LocalDOMWindow* window = GetSupplementable(); ++ auto* frame = window->GetFrame(); + if (frame) { + blink::WebContentSettingsClient* settings = frame->GetContentSettingsClient(); + if (settings) allowed = !settings->IsTimezoneChanged(); diff --git a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch index ba6a9a72..f9d7ee60 100644 --- a/build/patches/Enable-Android-Dynamic-Performance-Framework.patch +++ b/build/patches/Enable-Android-Dynamic-Performance-Framework.patch @@ -4,10 +4,11 @@ Subject: Enable Android Dynamic Performance Framework License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - chrome/version.gni | 8 ++++---- - components/viz/common/features.cc | 2 ++ - components/viz/service/performance_hint/hint_session.cc | 5 +---- - 3 files changed, 7 insertions(+), 8 deletions(-) + chrome/version.gni | 8 ++++---- + components/viz/common/features.cc | 2 ++ + components/viz/service/performance_hint/hint_session.cc | 5 +---- + .../platform/widget/input/widget_input_handler_manager.cc | 5 +++++ + 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/chrome/version.gni b/chrome/version.gni --- a/chrome/version.gni @@ -44,15 +45,7 @@ diff --git a/chrome/version.gni b/chrome/version.gni diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc -@@ -161,6 +161,7 @@ BASE_FEATURE(kWebViewNewInvalidateHeuristic, base::FEATURE_ENABLED_BY_DEFAULT); - - BASE_FEATURE(kWebViewNewInvalidateHeuristicForTV, - base::FEATURE_DISABLED_BY_DEFAULT); -+SET_CROMITE_FEATURE_ENABLED(kWebViewEnableADPFRendererMain); - - // If enabled and the device's SOC manufacturer is in the allowlist, WebView - // reports the set of threads involved in frame production to HWUI, and they're -@@ -241,6 +242,7 @@ BASE_FEATURE(kEnableADPFRendererMain, base::FEATURE_ENABLED_BY_DEFAULT); +@@ -241,6 +241,7 @@ BASE_FEATURE(kEnableADPFRendererMain, base::FEATURE_ENABLED_BY_DEFAULT); // If enabled, Chrome puts Renderer Main threads into a separate // ADPF(Android Dynamic Performance Framework) hint session, and does not // report any timing hints from this session. @@ -60,6 +53,14 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features. BASE_FEATURE(kEnableADPFSeparateRendererMainSession, base::FEATURE_DISABLED_BY_DEFAULT); +@@ -538,6 +539,7 @@ bool IsBrowserControlsInVizEnabled() { + + bool ShouldUseAdpfForSoc(std::string_view soc_allowlist, + std::string_view soc) { ++ if ((true)) return true; + std::vector allowlist = base::SplitStringPiece( + soc_allowlist, "|", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + return base::Contains(allowlist, soc); diff --git a/components/viz/service/performance_hint/hint_session.cc b/components/viz/service/performance_hint/hint_session.cc --- a/components/viz/service/performance_hint/hint_session.cc +++ b/components/viz/service/performance_hint/hint_session.cc @@ -81,4 +82,19 @@ diff --git a/components/viz/service/performance_hint/hint_session.cc b/component std::string soc_allowlist = features::kADPFSocManufacturerAllowlist.Get(); std::string soc = base::SysInfo::SocManufacturer(); +diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc +--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc ++++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc +@@ -221,6 +221,11 @@ class SynchronousCompositorProxyRegistry + renderer_threads.push_back( + viz::Thread{io_thread_id_, viz::Thread::Type::kIO}); + } ++ // Renderer Main is included in the set of threads reported to the HWUI. ++ if (main_thread_id_ != base::kInvalidThreadId) { ++ renderer_threads.push_back( ++ viz::Thread{main_thread_id_, viz::Thread::Type::kMain}); ++ } + proxy_->SetThreads(renderer_threads); + } + -- diff --git a/build/patches/Enable-Global-Privacy-Control.patch b/build/patches/Enable-Global-Privacy-Control.patch index 992ddc0d..1bccedf0 100644 --- a/build/patches/Enable-Global-Privacy-Control.patch +++ b/build/patches/Enable-Global-Privacy-Control.patch @@ -225,14 +225,14 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -486,6 +486,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { - settings_api::PrefType::kNumber; - (*s_allowlist)[::prefs::kNearbySharingOnboardingCompletePrefName] = +@@ -416,6 +416,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { + (*s_allowlist)[::prefs::kBlockAll3pcToggleEnabled] = settings_api::PrefType::kBoolean; + (*s_allowlist)[::prefs::kEnableDoNotTrack] = settings_api::PrefType::kBoolean; + (*s_allowlist)[::prefs::kEnableGPC] = settings_api::PrefType::kBoolean; - (*s_allowlist)[::prefs::kNearbySharingActiveProfilePrefName] = - settings_api::PrefType::kBoolean; - (*s_allowlist)[::prefs::kNearbySharingDeviceNamePrefName] = + + // Sync and personalization page. + (*s_allowlist)[::prefs::kSearchSuggestEnabled] = diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc --- a/chrome/browser/renderer_preferences_util.cc +++ b/chrome/browser/renderer_preferences_util.cc diff --git a/build/patches/Enable-extension-in-incognito.patch b/build/patches/Enable-extension-in-incognito.patch index 88af7bb7..1b276876 100644 --- a/build/patches/Enable-extension-in-incognito.patch +++ b/build/patches/Enable-extension-in-incognito.patch @@ -6,33 +6,38 @@ Full activation of incognito mode in experimental extension License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../chrome/browser/ChromeTabbedActivity.java | 40 +++++++- - .../chrome/browser/app/ChromeActivity.java | 28 ++++-- + .../chrome/browser/ChromeTabbedActivity.java | 37 +++++++- + .../chrome/browser/app/ChromeActivity.java | 36 ++++++-- .../customtabs/BaseCustomTabActivity.java | 2 +- .../BaseCustomTabRootUiCoordinator.java | 4 +- .../CustomTabIntentDataProvider.java | 3 + .../tabbed_mode/TabbedRootUiCoordinator.java | 3 +- .../browser/tabmodel/TabModelJniBridge.java | 4 +- .../tabmodel/TabModelSelectorBase.java | 7 ++ - .../browser/toolbar/ToolbarManager.java | 4 +- + .../browser/toolbar/ToolbarManager.java | 13 ++- .../chrome/browser/ui/RootUiCoordinator.java | 6 +- .../developer_private_functions.cc | 3 +- .../browser/extensions/extension_tab_util.cc | 2 +- - .../tabmodel/IncognitoTabModelImpl.java | 10 +- + .../tabmodel/IncognitoTabModelImpl.java | 10 ++- .../tabmodel/IncognitoTabModelObserver.java | 2 + - .../extensions/extension_actions_bridge.cc | 12 +++ - .../extensions/extension_actions_bridge.h | 1 + - .../ui/extensions/ExtensionActionsBridge.java | 6 ++ + .../extensions/extension_actions_bridge.cc | 23 +++-- + .../extensions/extension_actions_bridge.h | 4 +- + .../ui/extensions/ExtensionActionsBridge.java | 26 +++++- .../android/tab_model/tab_model_jni_bridge.cc | 4 + - .../ExtensionActionListCoordinator.java | 4 +- - .../ExtensionActionListMediator.java | 19 +++- - .../ExtensionToolbarCoordinator.java | 7 +- - .../ExtensionToolbarCoordinatorImpl.java | 5 +- - .../extensions/ExtensionsMenuCoordinator.java | 4 +- - .../extensions/ExtensionsMenuMediator.java | 10 +- - .../ChromeAndroidTaskTrackerImpl.java | 92 ++++++++++++++----- + .../ExtensionActionListCoordinator.java | 12 ++- + .../ExtensionActionListMediator.java | 23 +++-- + .../ExtensionActionsUpdateHelper.java | 64 +++++++++++-- + .../ExtensionToolbarCoordinator.java | 13 ++- + .../ExtensionToolbarCoordinatorImpl.java | 34 +++++-- + .../extensions/ExtensionsMenuCoordinator.java | 7 +- + .../extensions/ExtensionsMenuMediator.java | 14 ++- + .../browser_window/ChromeAndroidTaskImpl.java | 3 + + .../ChromeAndroidTaskTrackerFactory.java | 1 - + .../ChromeAndroidTaskTrackerImpl.java | 90 ++++++++++++++----- .../ChromeAndroidTaskTracker.java | 7 +- - 26 files changed, 233 insertions(+), 56 deletions(-) + components/tabs/impl/tab_collection.cc | 16 ++++ + components/tabs/impl/tab_strip_collection.cc | 4 +- + 31 files changed, 382 insertions(+), 95 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java @@ -59,7 +64,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.ui.IncognitoRestoreAppLaunchDrawBlockerFactory; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; -@@ -822,7 +825,36 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -822,7 +825,33 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mTabModelNotificationDotManager.initWithNative(mTabModelSelector); TabModel currentTabModel = mTabModelSelector.getCurrentModel(); initializeChromeAndroidTask( @@ -73,9 +78,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct + + @Override + public void onProfileDestroyed(Profile profile) { -+ if (!profile.isOffTheRecord()) return; -+ ExtensionActionsBridge.get(profile) -+ .closeBackgroundHosts(); + } + }); + @@ -97,7 +99,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct // For saving non-incognito tab closures for Recent Tabs. boolean alwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -@@ -2969,7 +3001,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -2969,7 +2998,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mLayoutStateProviderSupplier, getBrowserControlsManager(), getWindowAndroid(), @@ -106,7 +108,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct getLifecycleDispatcher(), getLayoutManagerSupplier(), /* menuOrKeyboardActionController= */ this, -@@ -3885,6 +3917,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -3885,6 +3914,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt } RecordUserAction.record("MobileMenuRecentTabs"); } else if (id == R.id.extensions_menu_id) { @@ -158,11 +160,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv + mChromeAndroidTaskSupplierInternal.get().getId(), + tabModel); + ChromeAndroidTaskTrackerFactory.getInstance() -+ .onActivityWindowAndroidDestroy(incognitoTask); ++ .onActivityWindowAndroidDestroy(incognitoTask, getWindowAndroid()); } @Override -@@ -2053,7 +2069,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -1797,6 +1813,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity + @SuppressLint("NewApi") + @Override + protected final void onDestroy() { ++ ActivityWindowAndroid wAndroid = getWindowAndroid(); ++ if (wAndroid != null) { ++ var chromeAndroidTaskTracker = ChromeAndroidTaskTrackerFactory.getInstance(); ++ if (chromeAndroidTaskTracker != null) { ++ chromeAndroidTaskTracker.onActivityWindowAndroidDestroy(wAndroid); ++ } ++ } ++ + if (mSnackbarManager != null) { + SnackbarManagerProvider.detach(mSnackbarManager); + } +@@ -2053,7 +2077,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity getProfileProviderSupplier().runSyncOrOnAvailable(this::initializeManualFillingComponent); @@ -171,7 +188,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv if (chromeAndroidTask != null) { chromeAndroidTask.onNativeInitializationFinished(); } -@@ -2097,7 +2113,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2097,7 +2121,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity && DeviceFormFactor.isNonMultiDisplayContextOnTablet(this)) { HostZoomMap.setTransparentZoomAdjustment( ContentFeatureList.sAndroidMonitorZoomScalingFactor.getValue() / 100.0f); @@ -319,6 +336,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.flags.ChromeFeatureList; import android.view.Gravity; +@@ -366,7 +368,7 @@ public class ToolbarManager + private TopInsetCoordinator.@Nullable Observer mTopInsetCoordinatorObserver; + private final SettableNonNullObservableSupplier<@ControlsPosition Integer> + mToolbarPositionSupplier = ObservableSuppliers.createNonNull(ControlsPosition.NONE); +- private final OneshotSupplier mChromeAndroidTaskSupplier; ++ private final Function mChromeAndroidTaskSupplier; + + private @MonotonicNonNull HomeButtonCoordinator mHomeButtonCoordinator; + private @MonotonicNonNull HomePageButtonsCoordinator mHomePageButtonsCoordinator; @@ -802,7 +804,7 @@ public class ToolbarManager ObservableSupplier omniboxFocusStateSupplier, OneshotSupplier promoShownOneshotSupplier, @@ -328,6 +354,31 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar Supplier isInOverviewModeSupplier, Supplier modalDialogManagerSupplier, StatusBarColorController statusBarColorController, +@@ -2424,22 +2426,19 @@ public class ToolbarManager + ViewStub extensionToolbarStub = + mControlContainer.findViewById(R.id.extension_toolbar_container_stub); + if (extensionToolbarStub != null) { +- ChromeAndroidTask task = mChromeAndroidTaskSupplier.get(); +- // ChromeAndroidTask is available only on Desktop Android. +- if (task != null) { + mExtensionToolbarCoordinator = + ExtensionToolbarCoordinator.maybeCreate( + mActivity, + extensionToolbarStub, + mWindowAndroid, +- task, ++ mChromeAndroidTaskSupplier, ++ mProfileSupplier, + mActivityTabProvider.asObservable(), + mTabCreatorManager.getTabCreator(false), + getBrowsingModeThemeColorProvider()); + if (mExtensionToolbarCoordinator != null) { + mToolbar.setExtensionToolbarCoordinator(mExtensionToolbarCoordinator); + } +- } + } + + // Must be initialized before Toolbar attempts to use it. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java @@ -440,7 +491,20 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ #include "ui/color/color_provider_manager.h" #include "ui/events/android/key_event_android.h" #include "ui/events/event.h" -@@ -221,6 +223,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) { +@@ -60,10 +62,9 @@ void ExtensionActionsBridge::IconObserver::OnIconUpdated() { + } + + ExtensionActionsBridge::ExtensionActionsBridge( +- BrowserWindowInterface* browser, ++ Profile* profile, + const base::android::JavaRef& java_object) +- : browser_(browser), +- profile_(browser->GetProfile()), ++ : profile_(profile), + java_object_(java_object), + model_(ToolbarActionsModel::Get(profile_)), + keybinding_registry_( +@@ -221,6 +222,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) { install_directory, install_updacked_directory)); } @@ -457,9 +521,32 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ jni_zero::ScopedJavaLocalRef ExtensionActionsBridge::HandleKeyDownEvent( JNIEnv* env, +@@ -309,11 +320,9 @@ void ExtensionActionsBridge::OnToolbarIconUpdated( + static jlong JNI_ExtensionActionsBridge_Init( + JNIEnv* env, + const base::android::JavaRef& java_object, +- jlong j_browser_window_interface) { +- BrowserWindowInterface* browser = +- reinterpret_cast(j_browser_window_interface); ++ Profile* profile) { + return reinterpret_cast( +- new ExtensionActionsBridge(browser, java_object)); ++ new ExtensionActionsBridge(profile, java_object)); + } + + static bool JNI_ExtensionActionsBridge_ExtensionsEnabled(JNIEnv* env, diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/chrome/browser/ui/android/extensions/extension_actions_bridge.h --- a/chrome/browser/ui/android/extensions/extension_actions_bridge.h +++ b/chrome/browser/ui/android/extensions/extension_actions_bridge.h +@@ -25,7 +25,7 @@ namespace extensions { + // This bridge is created and owned by Java UI code. + class ExtensionActionsBridge : public ToolbarActionsModel::Observer { + public: +- ExtensionActionsBridge(BrowserWindowInterface* browser, ++ ExtensionActionsBridge(Profile* profile, + const base::android::JavaRef& java_object); + ExtensionActionsBridge(const ExtensionActionsBridge&) = delete; + ExtensionActionsBridge& operator=(const ExtensionActionsBridge&) = delete; @@ -53,6 +53,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer { int tab_id, content::WebContents* web_contents); @@ -468,10 +555,74 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/c jni_zero::ScopedJavaLocalRef HandleKeyDownEvent( JNIEnv* env, const ui::KeyEventAndroid& key_event); +@@ -100,7 +101,6 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer { + // Called by IconObserver to notify that the icon of an action was updated. + void OnToolbarIconUpdated(const ToolbarActionsModel::ActionId& action_id); + +- const raw_ptr browser_; + const raw_ptr profile_; + const base::android::ScopedJavaGlobalRef java_object_; + const raw_ptr model_; diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java --- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java +++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java -@@ -245,6 +245,10 @@ public class ExtensionActionsBridge implements Destroyable { +@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.ui.extensions; + + import android.graphics.Bitmap; + import android.view.KeyEvent; ++import android.util.ArrayMap; + + import androidx.annotation.VisibleForTesting; + +@@ -17,14 +18,17 @@ import org.jni_zero.NativeMethods; + import org.chromium.base.ObserverList; + import org.chromium.base.lifetime.Destroyable; + import org.chromium.base.lifetime.LifetimeAssert; ++import org.chromium.base.ThreadUtils; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.browser.profiles.Profile; ++import org.chromium.chrome.browser.profiles.ProfileKeyedMap; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; + import org.chromium.content_public.browser.WebContents; + import org.chromium.extensions.ShowAction; + + import java.util.Objects; ++import java.util.Map; + + /** A JNI bridge to interact with extension actions for the toolbar. */ + @NullMarked +@@ -34,10 +38,19 @@ public class ExtensionActionsBridge implements Destroyable { + private long mNativeExtensionActionsBridge; + private final ObserverList mObservers = new ObserverList<>(); + +- public ExtensionActionsBridge(ChromeAndroidTask task) { ++ private static final ProfileKeyedMap mExtensionActionsBridges = ++ new ProfileKeyedMap<>((e) -> e.destroy()); ++ ++ public static ExtensionActionsBridge get(Profile profile) { ++ ThreadUtils.assertOnUiThread(); ++ return mExtensionActionsBridges.getForProfile(profile, ++ ExtensionActionsBridge::new); ++ } ++ ++ private ExtensionActionsBridge(Profile profile) { + mNativeExtensionActionsBridge = + ExtensionActionsBridgeJni.get() +- .init(this, task.getOrCreateNativeBrowserWindowPtr()); ++ .init(this, profile); + } + + /** Represents the result of handling a key event. */ +@@ -71,6 +84,7 @@ public class ExtensionActionsBridge implements Destroyable { + + @Override + public void destroy() { ++ closeBackgroundHosts(); + assert mNativeExtensionActionsBridge != 0; + ExtensionActionsBridgeJni.get().destroy(mNativeExtensionActionsBridge); + mNativeExtensionActionsBridge = 0; +@@ -245,11 +259,15 @@ public class ExtensionActionsBridge implements Destroyable { ExtensionActionsBridgeJni.get().clearExtensionData(mNativeExtensionActionsBridge); } @@ -482,7 +633,13 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b @NativeMethods public interface Natives { boolean extensionsEnabled(@JniType("Profile*") Profile profile); -@@ -281,6 +285,8 @@ public class ExtensionActionsBridge implements Destroyable { + +- long init(ExtensionActionsBridge bridge, long browserWindowInterfacePtr); ++ long init(ExtensionActionsBridge bridge, @JniType("Profile*") Profile profile); + + void destroy(long nativeExtensionActionsBridge); + +@@ -281,6 +299,8 @@ public class ExtensionActionsBridge implements Destroyable { void clearExtensionData(long nativeExtensionActionsBridge); @@ -508,7 +665,15 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java -@@ -21,6 +21,8 @@ import org.chromium.ui.listmenu.ListMenuButton; +@@ -12,6 +12,7 @@ import org.chromium.base.lifetime.LifetimeAssert; + import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; ++import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; +@@ -21,6 +22,8 @@ import org.chromium.ui.listmenu.ListMenuButton; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.ViewGroupAdapter; @@ -517,19 +682,55 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Root component for the extension action buttons. Exposes public API for external consumers to * interact with the buttons and affect their states. -@@ -37,7 +39,7 @@ public class ExtensionActionListCoordinator implements Destroyable { +@@ -28,6 +31,7 @@ import org.chromium.ui.modelutil.ViewGroupAdapter; + @NullMarked + public class ExtensionActionListCoordinator implements Destroyable { + private final ExtensionActionListContainer mContainer; ++ private final ListMenuButton mExtensionsMenuButton; + private final ModelList mModels; + private final ExtensionActionListMediator mMediator; + private final ViewGroupAdapter mAdapter; +@@ -36,15 +40,18 @@ public class ExtensionActionListCoordinator implements Destroyable { + public ExtensionActionListCoordinator( Context context, ExtensionActionListContainer container, ++ ListMenuButton extensionsMenuButton, WindowAndroid windowAndroid, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier) { mContainer = container; ++ mExtensionsMenuButton = extensionsMenuButton; + mModels = new ModelList(); + mMediator = + new ExtensionActionListMediator( +- context, windowAndroid, mModels, task, currentTabSupplier); ++ context, windowAndroid, mModels, task, profileSupplier, currentTabSupplier); + mAdapter = + new ViewGroupAdapter.Builder(mContainer, mModels) + .registerType( +@@ -69,6 +76,7 @@ public class ExtensionActionListCoordinator implements Destroyable { + + /** Performs a click on the button for the given action. */ + public void click(String actionId) { ++ mExtensionsMenuButton.dismiss(); + for (int i = 0; i < mModels.size(); i++) { + if (mModels.get(i).model.get(ExtensionActionButtonProperties.ID).equals(actionId)) { + mContainer.getChildAt(i).performClick(); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java -@@ -31,6 +31,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem; +@@ -15,6 +15,7 @@ import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.browser.extensions.ContextMenuSource; ++import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.toolbar.MenuBuilderHelper; + import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType; +@@ -31,6 +32,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; @@ -538,7 +739,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow @NullMarked class ExtensionActionListMediator implements Destroyable { private static final String TAG = "EALMediator"; -@@ -38,7 +40,7 @@ class ExtensionActionListMediator implements Destroyable { +@@ -38,7 +41,7 @@ class ExtensionActionListMediator implements Destroyable { private final Context mContext; private final WindowAndroid mWindowAndroid; private final ModelList mModels; @@ -547,12 +748,13 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate(); -@@ -51,12 +53,12 @@ class ExtensionActionListMediator implements Destroyable { +@@ -51,16 +54,17 @@ class ExtensionActionListMediator implements Destroyable { Context context, WindowAndroid windowAndroid, ModelList models, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier) { mContext = context; mWindowAndroid = windowAndroid; @@ -562,7 +764,12 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mExtensionActionsUpdateHelper = new ExtensionActionsUpdateHelper( -@@ -111,8 +113,13 @@ class ExtensionActionListMediator implements Destroyable { +- mModels, task, currentTabSupplier, mActionsUpdateDelegate); ++ mModels, profileSupplier, currentTabSupplier, mActionsUpdateDelegate); + } + + @Override +@@ -111,8 +115,13 @@ class ExtensionActionListMediator implements Destroyable { } int tabId = currentTab.getId(); @@ -577,7 +784,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow assert mCurrentPopup == null; mCurrentPopup = new ExtensionActionPopup(mContext, mWindowAndroid, buttonView, actionId, contents); -@@ -131,9 +138,11 @@ class ExtensionActionListMediator implements Destroyable { +@@ -131,9 +140,11 @@ class ExtensionActionListMediator implements Destroyable { return; } @@ -590,12 +797,143 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow ExtensionActionContextMenuUtils.showContextMenu( mContext, buttonView, bridge, MenuBuilderHelper.getRectProvider(buttonView), null); +diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java +--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java ++++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java +@@ -9,6 +9,7 @@ import org.chromium.base.lifetime.Destroyable; + import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; ++import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; + import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; +@@ -46,32 +47,35 @@ public class ExtensionActionsUpdateHelper implements Destroyable { + void onUpdateFinished(); + } + ++ private final NullableObservableSupplier mProfileSupplier; + private final NullableObservableSupplier mCurrentTabSupplier; + private final ActionsUpdateDelegate mActionsUpdateDelegate; + private final ModelList mModels; +- private final ExtensionActionsBridge mExtensionActionsBridge; + ++ private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated; + private final Callback<@Nullable Tab> mTabChangedCallback = this::onTabChanged; + private final ActionsObserver mActionsObserver = new ActionsObserver(); + ++ @Nullable private ExtensionActionsBridge mExtensionActionsBridge; ++ @Nullable private Profile mProfile; + @Nullable private Tab mCurrentTab; + + public ExtensionActionsUpdateHelper( + ModelList models, +- ChromeAndroidTask task, ++ NullableObservableSupplier profileSupplier, + NullableObservableSupplier currentTabSupplier, + ActionsUpdateDelegate delegate) { + mModels = models; ++ mProfileSupplier = profileSupplier; + mCurrentTabSupplier = currentTabSupplier; + mActionsUpdateDelegate = delegate; +- mExtensionActionsBridge = new ExtensionActionsBridge(task); + ++ mProfileSupplier.addObserver(mProfileUpdatedCallback); + mCurrentTabSupplier.addObserver(mTabChangedCallback); +- mExtensionActionsBridge.addObserver(mActionsObserver); + } + + private void maybeUpdateAllActions() { +- if (mCurrentTab == null) { ++ if (mProfile == null || mExtensionActionsBridge == null || mCurrentTab == null) { + mModels.clear(); + return; + } +@@ -98,6 +102,35 @@ public class ExtensionActionsUpdateHelper implements Destroyable { + mActionsUpdateDelegate.onUpdateFinished(); + } + ++ private void onProfileUpdated(@Nullable Profile profile) { ++ if (profile == mProfile) { ++ return; ++ } ++ ++ mActionsUpdateDelegate.onUpdateStarted(); ++ ++ if (mExtensionActionsBridge != null) { ++ mExtensionActionsBridge.removeObserver(mActionsObserver); ++ } ++ mExtensionActionsBridge = null; ++ mProfile = profile; ++ ++ if (mProfile != null) { ++ mExtensionActionsBridge = ExtensionActionsBridge.get(mProfile); ++ if (mExtensionActionsBridge != null) { ++ mExtensionActionsBridge.addObserver(mActionsObserver); ++ } ++ } ++ ++ mModels.clear(); ++ ++ if (mCurrentTab != null && mCurrentTab.getProfile() != mProfile) { ++ return; ++ } ++ ++ maybeUpdateAllActions(); ++ } ++ + private void onTabChanged(@Nullable Tab tab) { + if (tab == mCurrentTab) { + return; +@@ -116,9 +149,21 @@ public class ExtensionActionsUpdateHelper implements Destroyable { + } + + mCurrentTab = tab; ++ ++ // If the tab belongs to a different profile, onProfileUpdated will be called soon, so ++ // do not update actions now to avoid duplicated updates. ++ if (tab.getProfile() != mProfile) { ++ return; ++ } ++ + maybeUpdateAllActions(); + } + ++ /** Returns the profile. */ ++ public @Nullable Profile getProfile() { ++ return mProfile; ++ } ++ + /** Returns the current tab. */ + public @Nullable Tab getCurrentTab() { + return mCurrentTab; +@@ -131,11 +176,16 @@ public class ExtensionActionsUpdateHelper implements Destroyable { + + @Override + public void destroy() { +- mExtensionActionsBridge.removeObserver(mActionsObserver); ++ if (mExtensionActionsBridge != null) { ++ mExtensionActionsBridge.removeObserver(mActionsObserver); ++ } ++ ++ mProfileSupplier.removeObserver(mProfileUpdatedCallback); + mCurrentTabSupplier.removeObserver(mTabChangedCallback); +- mExtensionActionsBridge.destroy(); + + mCurrentTab = null; ++ mExtensionActionsBridge = null; ++ mProfile = null; + } + + private class ActionsObserver implements ExtensionActionsBridge.Observer { diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java -@@ -15,12 +15,15 @@ import org.chromium.build.annotations.Initializer; +@@ -14,13 +14,17 @@ import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.Initializer; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; ++import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabCreator; @@ -609,36 +947,54 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * The coordinator of the extension-related toolbar UI. * -@@ -41,7 +44,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { +@@ -41,12 +45,13 @@ public interface ExtensionToolbarCoordinator extends Destroyable { Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider) { -@@ -77,7 +80,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { + // Check if the extension UI is enabled first. +- if (!ExtensionUi.isEnabled(task.getProfile())) { ++ if (!ExtensionUi.isEnabled(profileSupplier.get())) { + return null; + } + +@@ -60,6 +65,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable { + extensionToolbarStub, + windowAndroid, + task, ++ profileSupplier, + currentTabSupplier, + tabCreator, + themeColorProvider); +@@ -77,7 +83,8 @@ public interface ExtensionToolbarCoordinator extends Destroyable { Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java -@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; +@@ -15,7 +15,9 @@ import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.ServiceImpl; ++import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; -@@ -24,6 +25,8 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi; +@@ -24,40 +26,42 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi; import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.ui.base.WindowAndroid; @@ -647,19 +1003,95 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The implementation of {@link ExtensionToolbarCoordinator}. */ @NullMarked @ServiceImpl(ExtensionToolbarCoordinator.class) -@@ -39,7 +42,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordinator { + private final @Nullable LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this); + +- private ExtensionActionsBridge mBridge; + private ExtensionActionListCoordinator mExtensionActionListCoordinator; + private ExtensionsMenuCoordinator mExtensionsMenuCoordinator; ++ private NullableObservableSupplier mCurrentTabSupplier; ++ Function mTaskSupplier; + + @Override + public void initializeWithNative( Context context, ViewStub extensionToolbarStub, WindowAndroid windowAndroid, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider) { +- mBridge = new ExtensionActionsBridge(task); ++ mCurrentTabSupplier = currentTabSupplier; ++ mTaskSupplier = task; + + extensionToolbarStub.setLayoutResource(R.layout.extension_toolbar_container); + LinearLayout container = (LinearLayout) extensionToolbarStub.inflate(); +- mProfileSupplier.addObserver((profile) -> { +- if (!ExtensionUi.isEnabled(profileSupplier.get())) { +- container.setVisibility(View.GONE); +- } +- }); + mExtensionActionListCoordinator = + new ExtensionActionListCoordinator( + context, + container.findViewById(R.id.extension_action_list), ++ container.findViewById(R.id.extensions_menu_button), + windowAndroid, + task, ++ profileSupplier, + currentTabSupplier); + mExtensionsMenuCoordinator = + new ExtensionsMenuCoordinator( +@@ -65,6 +69,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + container.findViewById(R.id.extensions_menu_button), + themeColorProvider, + task, ++ profileSupplier, + currentTabSupplier, + tabCreator, + mExtensionActionListCoordinator); +@@ -74,7 +79,6 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + public void destroy() { + mExtensionsMenuCoordinator.destroy(); + mExtensionActionListCoordinator.destroy(); +- mBridge.destroy(); + LifetimeAssert.setSafeToGc(mLifetimeAssert, true); + } + +@@ -85,6 +89,18 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + return false; + } + ++ Tab currentTab = mCurrentTabSupplier.get(); ++ if (currentTab == null) { ++ return false; ++ } ++ ++ ChromeAndroidTask task = mTaskSupplier.apply(currentTab); ++ if (task == null) { ++ return false; ++ } ++ ++ ExtensionActionsBridge mBridge = ExtensionActionsBridge.get(currentTab.getProfile()); ++ + ExtensionActionsBridge.HandleKeyEventResult result = mBridge.handleKeyDownEvent(event); + if (result.handled) { + return true; diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java -@@ -40,6 +40,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -18,6 +18,7 @@ import org.chromium.base.lifetime.Destroyable; + import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; ++import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.tab.TabLaunchType; + import org.chromium.chrome.browser.tabmodel.TabCreator; +@@ -40,6 +41,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.widget.RectProvider; @@ -668,19 +1100,36 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Coordinator for the extensions menu, accessed from the puzzle icon in the toolbar. This class is * responsible for the button and the menu. -@@ -75,7 +77,7 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -75,7 +78,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { Context context, ListMenuButton extensionsMenuButton, ThemeColorProvider themeColorProvider, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier, TabCreator tabCreator, ExtensionActionListCoordinator extensionActionListCoordinator) { +@@ -138,6 +142,7 @@ public class ExtensionsMenuCoordinator implements Destroyable { + new ExtensionsMenuMediator( + mContext, + task, ++ profileSupplier, + mCurrentTabSupplier, + mExtensionModels, + () -> { diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java -@@ -26,6 +26,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList; +@@ -13,6 +13,7 @@ import org.chromium.base.lifetime.Destroyable; + import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.chrome.browser.extensions.ContextMenuSource; ++import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; + import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator; +@@ -26,6 +27,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.widget.RectProvider; @@ -689,7 +1138,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Mediator for the extensions menu. This class is responsible for listening to changes in the * extensions and updating the model accordingly. -@@ -34,7 +36,7 @@ import org.chromium.ui.widget.RectProvider; +@@ -34,7 +37,7 @@ import org.chromium.ui.widget.RectProvider; class ExtensionsMenuMediator implements Destroyable { private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate(); private final Context mContext; @@ -698,20 +1147,30 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow private final Runnable mOnUpdateFinishedRunnable; private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; private final View mRootView; -@@ -42,7 +44,7 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -42,7 +45,8 @@ class ExtensionsMenuMediator implements Destroyable { public ExtensionsMenuMediator( Context context, - ChromeAndroidTask task, + Function task, ++ NullableObservableSupplier profileSupplier, NullableObservableSupplier currentTabSupplier, ModelList extensionModels, Runnable onUpdateFinishedRunnable, -@@ -99,9 +101,11 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -56,7 +60,7 @@ class ExtensionsMenuMediator implements Destroyable { + + mExtensionActionsUpdateHelper = + new ExtensionActionsUpdateHelper( +- extensionModels, task, currentTabSupplier, mActionsUpdateDelegate); ++ extensionModels, profileSupplier, currentTabSupplier, mActionsUpdateDelegate); + } + + private static class RelativeViewRectProvider extends RectProvider { +@@ -99,9 +103,11 @@ class ExtensionsMenuMediator implements Destroyable { return; } -+ ChromeAndroidTask task = mTaskSupplier.get(); ++ ChromeAndroidTask task = mTask.apply(currentTab); + ExtensionActionContextMenuBridge bridge = new ExtensionActionContextMenuBridge( @@ -720,6 +1179,30 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow ExtensionActionContextMenuUtils.showContextMenu( mContext, +diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java +--- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java ++++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java +@@ -440,6 +440,9 @@ final class ChromeAndroidTaskImpl + if (isActivityToRemoveAtTop) { + registerListenersForTopActivity(); + } ++ ++ // (5) remove UnownedUserDataHost ++ topActivityScopedObjects.mTabModel.associateWithBrowserWindow(0); + } + + @Override +diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java +--- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java ++++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java +@@ -21,7 +21,6 @@ public final class ChromeAndroidTaskTrackerFactory { + public static ChromeAndroidTaskTracker getInstance() { + // TODO(crbug.com/473636857): Remove once this is properly implemented on non-desktop + // platforms. +- if (!DeviceInfo.isDesktop()) return null; + + return ChromeAndroidTaskTrackerImpl.getInstance(); + } diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java --- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java +++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java @@ -796,7 +1279,7 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro mObservers.forEach((observer) -> observer.onTaskAdded(newTask)); return newTask; } -@@ -141,28 +167,43 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { +@@ -141,23 +167,38 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { @Override @Nullable @@ -831,7 +1314,7 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro + if (key.mTaskId != taskId) continue; + + var task = mTasksCromite.get(key); -+ if (task.getActivityWindowAndroid() != activityWindowAndroid) { ++ if (task.getTopActivityWindowAndroid() != activityWindowAndroid) { + continue; + } + onActivityWindowAndroidDestroy(task, activityWindowAndroid); @@ -843,18 +1326,12 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro if (task == null) { return; } - -- task.removeActivityScopedObjects(activityWindowAndroid); -+ task.removeActivityScopedObjects(activityWindowAndroid); <-- check this - - // Destroy the ChromeAndroidTask if there is no ActivityWindowAndroid associated with it. - // @@ -177,7 +218,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker { // In the future, we can register a Task listener when a ChromeAndroidTask is created, // then destroy it when notified of the Task removal. if (task.getTopActivityWindowAndroid() == null) { - removeInternal(taskId); -+ removeInternal(task); <-- check this ++ removeInternal(task); } } @@ -943,9 +1420,54 @@ diff --git a/chrome/browser/ui/browser_window/public/android/java/src/org/chromi */ void onActivityWindowAndroidDestroy(ActivityWindowAndroid activityWindowAndroid); -+ void onActivityWindowAndroidDestroy(ChromeAndroidTask task); ++ void onActivityWindowAndroidDestroy(ChromeAndroidTask task, ActivityWindowAndroid activityWindowAndroid); + /** * Adds an observer which will be called on addition or removal of tasks. * +diff --git a/components/tabs/impl/tab_collection.cc b/components/tabs/impl/tab_collection.cc +--- a/components/tabs/impl/tab_collection.cc ++++ b/components/tabs/impl/tab_collection.cc +@@ -137,6 +137,22 @@ TabCollection::TabCollection(Type type, + + TabCollection::~TabCollection() { + DispatchPendingNotifications(); ++ ++ auto& childrens = GetChildren(); ++ for (auto it = childrens.begin(); it != childrens.end(); ) { ++ auto& child = *it; ++ if (std::holds_alternative>(child)) { ++ TabInterface* tab = ++ std::get>(child).get(); ++ auto removed_tab = MaybeRemoveTab(tab); ++ } else if (std::holds_alternative>(child)) { ++ TabCollection* collection = ++ std::get>(child).get(); ++ auto removed_collection = MaybeRemoveCollection(collection); ++ } else { ++ it++; ++ } ++ } + } + + void TabCollection::AddObserver(TabCollectionObserver* observer) const { +diff --git a/components/tabs/impl/tab_strip_collection.cc b/components/tabs/impl/tab_strip_collection.cc +--- a/components/tabs/impl/tab_strip_collection.cc ++++ b/components/tabs/impl/tab_strip_collection.cc +@@ -327,13 +327,13 @@ std::unique_ptr TabStripCollection::RemoveTabAtIndexRecursive( + std::unique_ptr TabStripCollection::MaybeRemoveTab( + TabInterface* tab) { + CHECK(tab); +- return nullptr; ++ return RemoveTabImpl(tab); + } + + std::unique_ptr TabStripCollection::MaybeRemoveCollection( + TabCollection* collection) { + CHECK(collection); +- return nullptr; ++ return TabStripCollection::RemoveTabCollection(collection); + } + + void TabStripCollection::InsertTabCollectionAt( -- diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index fed2416b..3566bb1e 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -51,7 +51,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -26,6 +26,8 @@ import androidx.preference.Preference; +@@ -27,6 +27,8 @@ import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; @@ -60,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.build.annotations.Nullable; -@@ -57,6 +59,11 @@ import java.lang.annotation.Retention; +@@ -60,6 +62,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; @@ -72,16 +72,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage /** * The "Passwords" screen in Settings, which allows the user to enable or disable password saving, * to view saved passwords (just the username and URL), and to delete saved passwords. -@@ -64,7 +71,7 @@ import java.util.Locale; +@@ -67,7 +74,7 @@ import java.util.Locale; public class PasswordSettings extends ChromeBaseSettingsFragment implements PasswordListObserver, - Preference.OnPreferenceClickListener, + Preference.OnPreferenceClickListener, SearchViewProvider, - SyncService.SyncStateChangedListener { + SyncService.SyncStateChangedListener, INeedSnackbarManager { @IntDef({ TrustedVaultBannerState.NOT_SHOWN, TrustedVaultBannerState.OFFER_OPT_IN, -@@ -94,6 +101,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -97,6 +104,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment public static final String PREF_TRUSTED_VAULT_BANNER = "trusted_vault_banner"; public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link"; @@ -94,7 +94,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private static final String PREF_KEY_CATEGORY_SAVED_PASSWORDS = "saved_passwords"; private static final String PREF_KEY_CATEGORY_EXCEPTIONS = "exceptions"; private static final String PREF_KEY_SAVED_PASSWORDS_NO_TEXT = "saved_passwords_no_text"; -@@ -126,6 +139,9 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -129,6 +142,9 @@ public class PasswordSettings extends ChromeBaseSettingsFragment private Preference mLinkPref; private Menu mMenu; @@ -104,7 +104,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); /** For controlling the UX flow of exporting passwords. */ -@@ -305,6 +321,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -315,6 +331,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment createSavePasswordsSwitch(); createAutoSignInCheckbox(); @@ -112,7 +112,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage PasswordManagerHandlerProvider.getForProfile(getProfile()) .getPasswordManagerHandler() -@@ -565,6 +582,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -577,6 +594,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE)); } diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index 3a1b0675..054f2ddb 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -16,6 +16,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/extensions/extension_util.h | 2 +- chrome/browser/resources/BUILD.gn | 7 + chrome/browser/resources/settings/BUILD.gn | 2 +- + .../browser/resources/settings/lazy_load.ts | 2 +- .../resources/settings/page_visibility.ts | 36 ++- .../settings/people_page/sync_controls.ts | 6 +- .../search_engine_edit_dialog.html | 6 + @@ -80,7 +81,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/images/BUILD.gn | 2 +- ui/webui/resources/js/BUILD.gn | 2 +- ui/webui/resources/js/load_time_data.ts | 17 +- - 73 files changed, 1159 insertions(+), 75 deletions(-) + 74 files changed, 1160 insertions(+), 76 deletions(-) create mode 100644 chrome/app/settings_strings_android.grdp create mode 100644 chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml create mode 100644 chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc @@ -485,6 +486,18 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc build_webui("build") { grd_prefix = "settings" +diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts +--- a/chrome/browser/resources/settings/lazy_load.ts ++++ b/chrome/browser/resources/settings/lazy_load.ts +@@ -143,7 +143,7 @@ export {CrTextareaElement} from 'chrome://resources/cr_elements/cr_textarea/cr_t + export {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; + export {getToastManager} from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.js'; + export {CrTooltipElement} from 'chrome://resources/cr_elements/cr_tooltip/cr_tooltip.js'; +-// ++// + export {PageCallbackRouter, PageHandlerFactory, PageHandlerRemote, PageRemote} from 'chrome://resources/js/batch_upload_promo.mojom-webui.js'; + export type {PageHandlerInterface} from 'chrome://resources/js/batch_upload_promo.mojom-webui.js'; + export {BatchUploadPromoProxyImpl} from 'chrome://resources/js/batch_upload_promo/batch_upload_promo_proxy.js'; diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/browser/resources/settings/page_visibility.ts --- a/chrome/browser/resources/settings/page_visibility.ts +++ b/chrome/browser/resources/settings/page_visibility.ts diff --git a/build/patches/Enable-share-intent.patch b/build/patches/Enable-share-intent.patch index 83461024..933609d2 100644 --- a/build/patches/Enable-share-intent.patch +++ b/build/patches/Enable-share-intent.patch @@ -242,7 +242,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -351,8 +351,8 @@ public class LaunchIntentDispatcher { +@@ -352,8 +352,8 @@ public class LaunchIntentDispatcher { /*incognito*/true); newIntent.setData(mIntent.getData()); newIntent.setPackage(applicationContext.getPackageName()); @@ -411,7 +411,7 @@ new file mode 100644 + chromeIntent.setPackage(applicationContext.getPackageName()); + chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + -+ LaunchIntentDispatcher.dispatch(this, chromeIntent); ++ LaunchIntentDispatcher.dispatchToTabbedActivity(this, chromeIntent); + finish(); + }); + @@ -461,7 +461,7 @@ new file mode 100644 + chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + IntentHandler.setForceIncognitoMode(chromeIntent); + -+ LaunchIntentDispatcher.dispatch(this, chromeIntent); ++ LaunchIntentDispatcher.dispatchToTabbedActivity(this, chromeIntent); + finish(); + } + diff --git a/build/patches/Experimental-support-for-extensions-on-Android.patch b/build/patches/Experimental-support-for-extensions-on-Android.patch index 8eaaffbe..13f020b9 100644 --- a/build/patches/Experimental-support-for-extensions-on-Android.patch +++ b/build/patches/Experimental-support-for-extensions-on-Android.patch @@ -18,12 +18,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../src/org/chromium/base/DeviceInfo.java | 6 +- build/BUILD.gn | 2 +- build/config/android/rules.gni | 4 +- - build/config/chrome_build.gni | 7 ++- + build/config/chrome_build.gni | 7 +- build/config/compiler/BUILD.gn | 2 +- build/config/compiler/pgo/BUILD.gn | 2 +- chrome/android/BUILD.gn | 4 +- chrome/android/chrome_public_apk_tmpl.gni | 2 +- - .../java/res/layout/manage_space_activity.xml | 14 ++++- + .../java/res/layout/manage_space_activity.xml | 14 +++- .../java/res/xml/developer_preferences.xml | 6 ++ .../browser/ChromeBaseAppCompatActivity.java | 2 +- .../AppMenuPropertiesDelegateImpl.java | 2 +- @@ -33,11 +33,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../MediaCaptureNotificationServiceImpl.java | 8 +-- .../browser/multiwindow/MultiWindowUtils.java | 2 +- .../ChromeSiteSettingsDelegate.java | 2 +- - .../site_settings/ManageSpaceActivity.java | 20 +++++++ + .../site_settings/ManageSpaceActivity.java | 20 ++++++ ...InterceptNavigationDelegateClientImpl.java | 2 +- .../browser/tab/RequestDesktopUtils.java | 2 +- + .../TabbedAppMenuPropertiesDelegate.java | 2 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 2 +- - chrome/app/extensions_strings.grdp | 7 +++ + chrome/app/extensions_strings.grdp | 7 ++ chrome/app/theme/theme_resources.grd | 4 +- chrome/browser/BUILD.gn | 6 +- chrome/browser/about_flags.cc | 4 ++ @@ -45,7 +46,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../bookmarks/bar/BookmarkBarUtils.java | 6 +- .../bar/BookmarkBarVisibilityProvider.java | 2 +- chrome/browser/browser_process_impl.cc | 2 +- - chrome/browser/chrome_browser_field_trials.cc | 60 +++++++++---------- + chrome/browser/chrome_browser_field_trials.cc | 72 +++++++++---------- .../chrome_browser_interface_binders_webui.cc | 4 +- .../browser/chrome_content_browser_client.cc | 4 +- chrome/browser/devtools/BUILD.gn | 2 +- @@ -53,13 +54,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../download_offline_content_provider.cc | 4 +- chrome/browser/extensions/BUILD.gn | 12 +++- .../chrome_extensions_api_client_android.cc | 2 +- + .../extensions/api/identity/web_auth_flow.cc | 6 +- + .../extensions/api/identity/web_auth_flow.h | 4 +- .../extensions/extension_management.cc | 8 ++- .../browser/extensions/extension_management.h | 2 +- - chrome/browser/extensions/extension_util.cc | 11 ++++ + chrome/browser/extensions/extension_util.cc | 11 +++ .../feedback/DeviceInfoFeedbackSource.java | 2 +- chrome/browser/media/router/BUILD.gn | 4 +- .../browser/media/router/discovery/BUILD.gn | 2 +- - .../media/router/media_router_feature.cc | 10 ++-- + .../media/router/media_router_feature.cc | 10 +-- .../media/router/media_router_feature.h | 2 +- .../media/webrtc/webrtc_event_log_manager.cc | 4 +- .../policy_value_and_status_aggregator.cc | 2 +- @@ -70,8 +73,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/resources/discards/BUILD.gn | 2 +- .../resources/extensions/detail_view.css | 6 ++ .../resources/extensions/extensions.html | 8 ++- - .../resources/extensions/item_list.css | 11 ++++ - .../resources/extensions/toolbar.html.ts | 7 --- + .../resources/extensions/item_list.css | 11 +++ + .../resources/extensions/toolbar.html.ts | 7 -- ...omeProvidedSharingOptionsProviderBase.java | 4 +- chrome/browser/startup_data.cc | 6 +- chrome/browser/startup_data.h | 6 +- @@ -81,14 +84,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/ui/android/context_menu_helper.h | 4 +- .../desktop_site/DesktopSiteUtils.java | 4 +- chrome/browser/ui/android/extensions/BUILD.gn | 4 +- - .../extensions/extension_actions_bridge.cc | 23 +++++++ + .../extensions/extension_actions_bridge.cc | 23 ++++++ .../extensions/extension_actions_bridge.h | 1 + .../java/res/layout/extensions_menu.xml | 1 + .../res/layout/extensions_menu_footer.xml | 4 +- .../extensions/java/res/values/dimens.xml | 1 + .../ui/extensions/ExtensionActionsBridge.java | 6 ++ .../extensions/windowing/internal/BUILD.gn | 2 +- - .../Enable-extensions-Android.grdp | 15 +++++ + .../Enable-extensions-Android.grdp | 15 ++++ .../Extensions-Android.grdp | 9 +++ .../browser/ui/android/tab_model/tab_model.cc | 4 +- .../browser/ui/android/tab_model/tab_model.h | 2 +- @@ -96,11 +99,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../android/tab_model/tab_model_test_helper.h | 2 +- .../toolbar/java/res/layout/toolbar_phone.xml | 6 ++ .../ExtensionActionListContainer.java | 8 ++- - .../ExtensionToolbarCoordinatorImpl.java | 10 +++- - .../extensions/ExtensionsMenuCoordinator.java | 44 +++++++------- + .../ExtensionToolbarCoordinatorImpl.java | 10 ++- + .../extensions/ExtensionsMenuCoordinator.java | 44 ++++++------ .../ExtensionsMenuItemProperties.java | 5 +- .../ExtensionsMenuItemViewBinder.java | 2 + - .../extensions/ExtensionsMenuMediator.java | 10 +++- + .../extensions/ExtensionsMenuMediator.java | 10 ++- chrome/browser/ui/prefs/BUILD.gn | 4 +- chrome/browser/ui/prefs/prefs_tab_helper.cc | 8 +-- .../browser/ui/webui/chrome_web_ui_configs.cc | 4 +- @@ -109,12 +112,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/chrome_paks.gni | 2 +- chrome/common/chrome_switches.cc | 2 +- chrome/common/chrome_switches.h | 2 +- - chrome/common/extensions/api/api_sources.gni | 7 +++ + chrome/common/extensions/api/api_sources.gni | 7 ++ chrome/common/webui_url_constants.cc | 2 +- chrome/common/webui_url_constants.h | 2 +- .../sandbox_status_extension_android.cc | 3 +- .../sandbox_status_extension_android.h | 1 + - chrome/test/BUILD.gn | 14 ++--- + chrome/test/BUILD.gn | 14 ++-- chrome/version.gni | 4 +- .../core/browser/host_content_settings_map.cc | 6 ++ .../embedder_support/view/ContentView.java | 2 +- @@ -136,7 +139,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../media/video_capture_manager.cc | 4 +- .../media/video_capture_manager.h | 6 +- .../render_widget_host_view_android.cc | 2 +- - .../browser/ContentUiEventHandler.java | 7 ++- + .../browser/ContentUiEventHandler.java | 7 +- content/public/common/content_features.cc | 2 +- .../render_frame_media_playback_options.cc | 2 +- .../about_flags_cc/Extensions-Android.inc | 12 ++++ @@ -146,12 +149,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html 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_host.cc | 24 ++++++- extensions/buildflags/BUILD.gn | 3 +- extensions/buildflags/buildflags.gni | 4 +- extensions/common/api/schema.gni | 2 +- extensions/common/command.cc | 2 +- - extensions/common/extension_features.cc | 10 +++- + extensions/common/extension_features.cc | 10 ++- extensions/common/extension_features.h | 6 +- extensions/common/extension_l10n_util.cc | 6 ++ extensions/common/features/feature.cc | 2 +- @@ -175,7 +178,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 +- - 163 files changed, 565 insertions(+), 285 deletions(-) + 166 files changed, 577 insertions(+), 297 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 @@ -333,7 +336,7 @@ diff --git a/build/config/compiler/pgo/BUILD.gn b/build/config/compiler/pgo/BUIL diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -966,7 +966,7 @@ if (_is_default_toolchain) { +@@ -954,7 +954,7 @@ if (_is_default_toolchain) { "//chrome/browser/password_entry_edit/android/internal:java", ] @@ -342,7 +345,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn deps += [ "//chrome/browser/ui/android/extensions/windowing/internal:java" ] } else { -@@ -2310,7 +2310,7 @@ if (_is_default_toolchain) { +@@ -2298,7 +2298,7 @@ if (_is_default_toolchain) { "//components/embedder_support/android:virtual_structure_javatests", ] @@ -598,6 +601,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesk return false; } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +@@ -843,7 +843,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + return false; + } + +- return DeviceInfo.isDesktop() || isPdf; ++ return DeviceInfo.isDesktopFalse() || isPdf; + } + + private MVCListAdapter.ListItem buildPrintItem(Tab currentTab) { 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 @@ -771,6 +786,15 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc --- a/chrome/browser/chrome_browser_field_trials.cc +++ b/chrome/browser/chrome_browser_field_trials.cc +@@ -124,7 +124,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + feature_overrides.DisableFeature(features::kEyeDropper); + } + #elif BUILDFLAG(IS_ANDROID) // BUILDFLAG(IS_LINUX) +-#if BUILDFLAG(IS_DESKTOP_ANDROID) ++#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) + // Nota bene: Anything here is expected to be short-lived, unless deemed too + // risky to launch to non-desktop platforms. New features being added here + // should be the exception, and not the norm. Instead, you should place the @@ -134,11 +134,11 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Enables the caret browsing a11y feature - can use arrow keys to navigate // through web pages. @@ -785,9 +809,19 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // If enabled, render processes associated only with tabs in unfocused windows // will be downgraded to "vis" priority, rather than remaining at "fg". This -@@ -155,10 +155,10 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -149,16 +149,16 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + // Enable desktop tab management features. + // TODO(crbug.com/422902625): Remove when rollout is complete to all form + // factors. +- feature_overrides.EnableFeature(chrome::android::kProcessRankPolicyAndroid); +- feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid); +- feature_overrides.EnableFeature(features::kSubframeImportance); ++ // feature_overrides.EnableFeature(chrome::android::kProcessRankPolicyAndroid); have dangling ptr issue on shutdown ++ // feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid); ++ // feature_overrides.EnableFeature(features::kSubframeImportance); // TODO(crbug.com/465596248): Remove when experiment is complete. - feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab); +- feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab); ++ // feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab); // TODO(crbug.com/422903297): Remove when tablet rollout is complete. - feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); + // feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); @@ -834,7 +868,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. -@@ -197,43 +197,43 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -197,48 +197,48 @@ 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. @@ -894,6 +928,12 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // Enable the ability for extensions to override chrome pages. // TODO(crbug.com/404069963): Remove flag when the feature is verified to be + // stable on desktop Android. +- feature_overrides.EnableFeature(chrome::android::kChromeNativeUrlOverriding); ++ // feature_overrides.EnableFeature(chrome::android::kChromeNativeUrlOverriding); + + // Enable desktop full screen to a screen feature flag by default for desktop + // platforms. @@ -250,7 +250,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Enables the ability to specify a platform-specific zoom scaling that will // apply transparently to all pages. @@ -1031,6 +1071,57 @@ diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client_android. namespace extensions { +diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.cc b/chrome/browser/extensions/api/identity/web_auth_flow.cc +--- a/chrome/browser/extensions/api/identity/web_auth_flow.cc ++++ b/chrome/browser/extensions/api/identity/web_auth_flow.cc +@@ -38,7 +38,7 @@ + #include "chrome/browser/ui/browser.h" + #include "chrome/browser/ui/browser_window.h" + #else +-static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)); ++static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE)); + #include "base/functional/callback_forward.h" + #include "chrome/browser/android/tab_android.h" + #include "chrome/browser/ui/android/tab_model/tab_model.h" +@@ -166,7 +166,7 @@ void WebAuthFlow::CloseInfoBar() { + } + } + +-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) ++#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) + void WebAuthFlow::OnBrowserWindowInterfaceInitialized( + BrowserWindowInterface* browser) { + TabModel* tab_model = +@@ -202,7 +202,7 @@ bool WebAuthFlow::DisplayAuthPageInPopupWindow() { + + browser->window()->Show(); + #else +- static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)); ++ static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE)); + BrowserWindowCreateParams params(BrowserWindowInterface::TYPE_POPUP, + *profile_, user_gesture_); + if (popup_bounds_.has_value()) { +diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.h b/chrome/browser/extensions/api/identity/web_auth_flow.h +--- a/chrome/browser/extensions/api/identity/web_auth_flow.h ++++ b/chrome/browser/extensions/api/identity/web_auth_flow.h +@@ -149,7 +149,7 @@ class WebAuthFlow : public content::WebContentsObserver, + void MaybeStartTimeout(); + void OnTimeout(); + +-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) ++#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) + void OnBrowserWindowInterfaceInitialized(BrowserWindowInterface* browser); + #endif + +@@ -195,7 +195,7 @@ class WebAuthFlow : public content::WebContentsObserver, + // the error code when the flow times out. + bool initial_url_loaded_ = false; + base::ScopedObservation profile_observation_{this}; +-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) ++#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) + base::WeakPtrFactory weak_factory_{this}; + #endif + }; diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc --- a/chrome/browser/extensions/extension_management.cc +++ b/chrome/browser/extensions/extension_management.cc diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index c6556e20..503e08f8 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -63,7 +63,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../user_scripts/UserScriptsBridge.java | 212 +++++ .../user_scripts/UserScriptsPreferences.java | 122 +++ .../user_scripts/android/java_sources.gni | 18 + - .../android/user_scripts_bridge.cc | 173 ++++ + .../android/user_scripts_bridge.cc | 174 ++++ .../android/user_scripts_bridge.h | 31 + ...Allow-playing-videos-in-background.user.js | 25 + .../assets/Dont-track-me-Google.user.js | 826 ++++++++++++++++++ @@ -136,7 +136,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../strings/userscripts_strings.grdp | 54 ++ .../Experimental-user-scripts-support.inc | 13 + tools/gritsettings/resource_ids.spec | 6 + - 109 files changed, 10494 insertions(+), 3 deletions(-) + 109 files changed, 10495 insertions(+), 3 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -250,7 +250,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/variations:variations_java", "//components/variations/android:variations_java", "//components/viz/service:service_java", -@@ -1704,6 +1709,7 @@ if (_is_default_toolchain) { +@@ -1692,6 +1697,7 @@ if (_is_default_toolchain) { java_group("chrome_public_non_pak_assets") { deps = [ "//chrome/android/webapk/libs/runtime_library:runtime_library_assets", @@ -2070,7 +2070,7 @@ new file mode 100644 + } + + @NativeMethods -+ interface Natives { ++ public interface Natives { + boolean isEnabled(); + void setEnabled(boolean enabled); + @@ -2241,7 +2241,7 @@ diff --git a/components/user_scripts/android/user_scripts_bridge.cc b/components new file mode 100644 --- /dev/null +++ b/components/user_scripts/android/user_scripts_bridge.cc -@@ -0,0 +1,173 @@ +@@ -0,0 +1,174 @@ +/* + This file is part of Bromite. + @@ -2281,7 +2281,6 @@ new file mode 100644 +using base::android::ConvertJavaStringToUTF8; +using base::android::ConvertUTF16ToJavaString; +using base::android::ConvertUTF8ToJavaString; -+using base::android::JavaParamRef; +using base::android::JavaRef; +using base::android::ScopedJavaGlobalRef; +using base::android::ScopedJavaLocalRef; @@ -2342,7 +2341,7 @@ new file mode 100644 + +static void JNI_UserScriptsBridge_RemoveScript( + JNIEnv* env, -+ const JavaParamRef& jscript_key) { ++ const JavaRef& jscript_key) { + user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient(); + if (client == NULL) return; + @@ -2352,7 +2351,7 @@ new file mode 100644 + +static void JNI_UserScriptsBridge_SetScriptEnabled( + JNIEnv* env, -+ const JavaParamRef& jscript_key, ++ const JavaRef& jscript_key, + jboolean is_enabled) { + user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient(); + if (client == NULL) return; @@ -2372,7 +2371,7 @@ new file mode 100644 + +static void JNI_UserScriptsBridge_SelectAndAddScriptFromFile( + JNIEnv* env, -+ const JavaParamRef& jwindow_android) { ++ const JavaRef& jwindow_android) { + user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient(); + if (client == NULL) return; + @@ -2381,7 +2380,7 @@ new file mode 100644 +} + +static void JNI_UserScriptsBridge_TryToInstall(JNIEnv* env, -+ const JavaParamRef& jscript_path) { ++ const JavaRef& jscript_path) { + user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient(); + if (client == NULL) return; + @@ -2414,6 +2413,8 @@ new file mode 100644 + Java_UserScriptsBridge_onUserScriptLoaded(env, result, j_error); +} + ++DEFINE_JNI(UserScriptsBridge) ++ +} diff --git a/components/user_scripts/android/user_scripts_bridge.h b/components/user_scripts/android/user_scripts_bridge.h new file mode 100644 @@ -6004,11 +6005,11 @@ new file mode 100755 + +bool IsStandardScheme(std::string_view scheme) { + // "*" gets the same treatment as a standard scheme. -+ if (scheme == "*") ++ if (scheme == "*") { + return true; ++ } + -+ return url::IsStandard(scheme.data(), -+ url::Component(0, static_cast(scheme.length()))); ++ return url::IsStandard(scheme); +} + +bool IsValidPortForScheme(std::string_view scheme, std::string_view port) { diff --git a/build/patches/Eyeo-Adblock-for-Cromite.patch b/build/patches/Eyeo-Adblock-for-Cromite.patch index 6e3c5f7d..78f92dee 100644 --- a/build/patches/Eyeo-Adblock-for-Cromite.patch +++ b/build/patches/Eyeo-Adblock-for-Cromite.patch @@ -40,8 +40,8 @@ suit Cromite logic. chrome/browser/ui/tab_helpers.cc | 3 +- .../extensions/api/_permission_features.json | 14 - .../common/extensions/api/adblock_private.idl | 8 + - .../adblock/android/adblock_controller_jni.cc | 79 +- - .../components/adblock/AdblockController.java | 51 +- + .../adblock/android/adblock_controller_jni.cc | 85 +- + .../components/adblock/AdblockController.java | 53 +- components/adblock/content/browser/BUILD.gn | 24 +- .../content/browser/adblock_blocking_page.cc | 183 + .../content/browser/adblock_blocking_page.h | 75 + @@ -131,7 +131,7 @@ suit Cromite logic. .../renderer/core/exported/web_document.cc | 13 +- .../blink/renderer/core/html/html_element.cc | 8 +- .../definitions/adblock_private.d.ts | 14 + - 126 files changed, 9342 insertions(+), 687 deletions(-) + 126 files changed, 9347 insertions(+), 690 deletions(-) rename chrome/browser/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (59%) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts @@ -1947,6 +1947,15 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a #include "base/logging.h" #include "components/adblock/android/jni_headers/AdblockController_jni.h" #include "components/adblock/content/browser/factories/subscription_service_factory.h" +@@ -34,7 +36,7 @@ + using base::android::CheckException; + using base::android::ConvertUTF8ToJavaString; + using base::android::GetClass; +-using base::android::JavaParamRef; ++using base::android::JavaRef; + using base::android::MethodID; + using base::android::ScopedJavaLocalRef; + using base::android::ToJavaArrayOfObjects; @@ -48,6 +50,9 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, const std::string& url, const std::string& title, @@ -1971,7 +1980,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a std::vector> CSubscriptionsToJObjects( JNIEnv* env, -+ const base::android::JavaParamRef& jbrowser_context_handle, ++ const base::android::JavaRef& jbrowser_context_handle, const std::vector>& subscriptions) { + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( @@ -2013,13 +2022,13 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a false)); } } -@@ -104,6 +129,52 @@ std::vector> CSubscriptionsToJObjects( +@@ -104,10 +129,56 @@ std::vector> CSubscriptionsToJObjects( } // namespace +static void +JNI_AdblockController_StartUpdate(JNIEnv* env, -+ const base::android::JavaParamRef& jbrowser_context_handle) { ++ const base::android::JavaRef& jbrowser_context_handle) { + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( + content::BrowserContextFromJavaHandle(jbrowser_context_handle)); @@ -2028,7 +2037,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a + +static base::android::ScopedJavaLocalRef +JNI_AdblockController_GetCustomSubscriptions(JNIEnv* env, -+ const base::android::JavaParamRef& jbrowser_context_handle) { ++ const base::android::JavaRef& jbrowser_context_handle) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( @@ -2046,7 +2055,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a + +static jboolean JNI_AdblockController_IsPrivilegedFiltersEnabled( + JNIEnv* env, -+ const base::android::JavaParamRef& jbrowser_context_handle) { ++ const base::android::JavaRef& jbrowser_context_handle) { + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( + content::BrowserContextFromJavaHandle(jbrowser_context_handle)); @@ -2055,7 +2064,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a + +static void JNI_AdblockController_SetPrivilegedFiltersEnabled( + JNIEnv* env, -+ const base::android::JavaParamRef& jbrowser_context_handle, ++ const base::android::JavaRef& jbrowser_context_handle, + jboolean j_enabled) { + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( @@ -2066,6 +2075,11 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a static base::android::ScopedJavaLocalRef JNI_AdblockController_GetInstalledSubscriptions( JNIEnv* env, +- const base::android::JavaParamRef& jbrowser_context_handle) { ++ const base::android::JavaRef& jbrowser_context_handle) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( @@ -119,7 +190,7 @@ JNI_AdblockController_GetInstalledSubscriptions( return ToJavaArrayOfObjects( @@ -2075,6 +2089,12 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a subscription_service->GetFilteringConfiguration( adblock::kAdblockFilteringConfigurationName)))); } +@@ -131,3 +202,5 @@ JNI_AdblockController_GetRecommendedSubscriptions(JNIEnv* env) { + auto list = adblock::config::GetKnownSubscriptions(); + return ToJavaArrayOfObjects(env, CSubscriptionsToJObjects(env, list)); + } ++ ++DEFINE_JNI(AdblockController) diff --git a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java --- a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java +++ b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java @@ -2167,10 +2187,12 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock @UiThread public List getInstalledSubscriptions() { return (List) -@@ -276,6 +321,10 @@ public class AdblockController { +@@ -275,7 +320,11 @@ public class AdblockController { + } @NativeMethods - interface Natives { +- interface Natives { ++ public interface Natives { + void startUpdate(BrowserContextHandle contextHandle); + boolean isPrivilegedFiltersEnabled(BrowserContextHandle contextHandle); + void setPrivilegedFiltersEnabled(BrowserContextHandle contextHandle, boolean enabled); diff --git a/build/patches/History-number-of-days-privacy-setting.patch b/build/patches/History-number-of-days-privacy-setting.patch index 60d91f17..82ccc2a0 100644 --- a/build/patches/History-number-of-days-privacy-setting.patch +++ b/build/patches/History-number-of-days-privacy-setting.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../layout/preference_spinner_single_line.xml | 7 +++ .../settings/SpinnerPreference.java | 7 +++ ...istory-number-of-days-privacy-setting.grdp | 18 ++++++ - .../core/browser/browsing_history_service.cc | 2 +- + .../core/browser/browsing_history_service.cc | 4 +- .../core/browser/expire_history_backend.cc | 13 +++- .../core/browser/expire_history_backend.h | 2 + .../history/core/browser/history_backend.cc | 17 +++++ @@ -35,7 +35,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/history/core/common/pref_names.h | 1 + components/history_embeddings/sql_database.cc | 2 +- .../omnibox/browser/shortcuts_backend.cc | 4 +- - 25 files changed, 263 insertions(+), 15 deletions(-) + 25 files changed, 264 insertions(+), 16 deletions(-) create mode 100644 components/cromite_components_strings_grd/History-number-of-days-privacy-setting.grdp diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml @@ -425,6 +425,15 @@ new file mode 100644 diff --git a/components/history/core/browser/browsing_history_service.cc b/components/history/core/browser/browsing_history_service.cc --- a/components/history/core/browser/browsing_history_service.cc +++ b/components/history/core/browser/browsing_history_service.cc +@@ -682,7 +682,7 @@ void BrowsingHistoryService::QueryComplete( + // Exhausted the local results; continue querying to get remote results. + // Start querying at the point where local history ends. + base::Time expiry_treshold = +- clock_->Now() - base::Days(HistoryBackend::kExpireDaysThreshold); ++ clock_->Now() - base::Days(90); // no matter + if (state->remote_end_time_for_continuation.is_null()) { + state->remote_end_time_for_continuation = base::Time::Max(); + } @@ -758,7 +758,7 @@ void BrowsingHistoryService::RecordResultsMetrics( // Count the number of local, remote, and combined entries, each split by // entries before vs after the local expiry threshold (90 days). diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index ca7d08c3..e929166a 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -17,8 +17,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html cc/base/features.h | 2 + cc/input/browser_controls_offset_manager.cc | 6 + cc/trees/layer_tree_host_impl.cc | 3 + - .../tab_management/TabGroupUiCoordinator.java | 7 +- - .../tab_management/TabGroupUiMediator.java | 51 +++++- + .../tab_management/TabGroupUiCoordinator.java | 8 +- + .../tab_management/TabGroupUiMediator.java | 52 +++++- .../tab_management/TabGroupUiProperties.java | 5 + .../tab_management/TabGroupUiToolbarView.java | 17 ++ .../tab_management/TabGroupUiViewBinder.java | 3 + @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/feed/FeedSurfaceCoordinator.java | 4 + .../java/res/layout/search_activity.xml | 1 - .../android/java/res/xml/main_preferences.xml | 3 +- - .../chrome/browser/ChromeTabbedActivity.java | 1 + + .../chrome/browser/ChromeTabbedActivity.java | 3 +- .../ChromeAccessibilitySettingsDelegate.java | 70 +++++++++ .../HeadlessBrowserControlsStateProvider.java | 5 + .../compositor/CompositorViewHolder.java | 7 + @@ -104,7 +104,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ .../renderer/core/frame/viewport_data.cc | 1 + - 91 files changed, 1061 insertions(+), 87 deletions(-) + 91 files changed, 1064 insertions(+), 88 deletions(-) create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc @@ -177,7 +177,15 @@ diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -@@ -61,6 +61,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; +@@ -26,6 +26,7 @@ import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.base.supplier.ObservableSupplierImpl; + import org.chromium.base.supplier.ObservableSuppliers; + import org.chromium.base.supplier.OneshotSupplier; ++import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.base.supplier.SettableNonNullObservableSupplier; + import org.chromium.base.supplier.SettableNullableObservableSupplier; + import org.chromium.build.annotations.Initializer; +@@ -61,6 +62,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -185,17 +193,17 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.util.List; import java.util.function.Supplier; -@@ -198,7 +199,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -198,7 +200,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T @Initializer public void initializeWithNative( BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, - Callback onSnapshotTokenChange) { + Callback onSnapshotTokenChange, -+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier tabSupplier) { ++ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier tabSupplier) { ObservableSupplierImpl tabStripTokenSupplier = new ObservableSupplierImpl<>(); var currentTabGroupModelFilterSupplier = -@@ -294,7 +296,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -294,7 +297,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T sharedImageTilesConfigBuilder, mThemeColorProvider, onSnapshotTokenChange, @@ -208,7 +216,15 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -@@ -79,6 +79,12 @@ import java.util.List; +@@ -25,6 +25,7 @@ import org.chromium.base.Token; + import org.chromium.base.metrics.RecordHistogram; + import org.chromium.base.metrics.RecordUserAction; + import org.chromium.base.supplier.LazyOneshotSupplier; ++import org.chromium.base.supplier.NullableObservableSupplier; + import org.chromium.base.supplier.NonNullObservableSupplier; + import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.base.supplier.ObservableSupplierImpl; +@@ -79,6 +80,12 @@ import java.util.List; import java.util.Objects; import java.util.function.Supplier; @@ -221,7 +237,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** A mediator for the TabGroupUi. Responsible for managing the internal state of the component. */ @NullMarked public class TabGroupUiMediator implements BackPressHandler { -@@ -154,6 +160,11 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -154,6 +161,11 @@ public class TabGroupUiMediator implements BackPressHandler { private final Callback mOnSnapshotTokenChange; private final ObservableSupplier mChildTokenSupplier; @@ -233,18 +249,18 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser // These should only be used when regular (non-incognito) tabs are set in the model. private final @Nullable SharedImageTilesCoordinator mSharedImageTilesCoordinator; private final SharedImageTilesConfig.@Nullable Builder mSharedImageTilesConfigBuilder; -@@ -184,7 +195,9 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -184,7 +196,9 @@ public class TabGroupUiMediator implements BackPressHandler { SharedImageTilesConfig.@Nullable Builder sharedImageTilesConfigBuilder, ThemeColorProvider themeColorProvider, Callback onSnapshotTokenChange, - ObservableSupplierImpl childTokenSupplier) { + ObservableSupplierImpl childTokenSupplier, -+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier tabSupplier) { ++ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier tabSupplier) { + mTopUiThemeColorProvider = topUiThemeColorProvider; mResetHandler = resetHandler; mModel = model; mTabModelSelector = tabModelSelector; -@@ -238,11 +251,30 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -238,11 +252,30 @@ public class TabGroupUiMediator implements BackPressHandler { mIsShowingHub = true; } @@ -275,7 +291,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser resetTabStrip(); } -@@ -264,6 +296,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -264,6 +297,8 @@ public class TabGroupUiMediator implements BackPressHandler { @Override public void restoreCompleted() { resetTabStrip(); @@ -284,7 +300,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } @Override -@@ -361,6 +395,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -361,6 +396,8 @@ public class TabGroupUiMediator implements BackPressHandler { mModel.set(TabGroupUiProperties.WIDTH_PX_CALLBACK, mWidthPxSupplier::set); resetTabStrip(); @@ -293,7 +309,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mHandleBackPressChangedSupplier = handleBackPressChangedSupplier; if (mTabGridDialogControllerSupplier != null) { mTabGridDialogControllerSupplier.onAvailable( -@@ -393,6 +429,18 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -393,6 +430,18 @@ public class TabGroupUiMediator implements BackPressHandler { mModel.set(TINT, mThemeColorProvider.getTint()); } @@ -312,7 +328,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser private void setupToolbarButtons() { View.OnClickListener showGroupDialogOnClickListener = view -> { -@@ -584,6 +632,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -584,6 +633,7 @@ public class TabGroupUiMediator implements BackPressHandler { @SuppressWarnings("NullAway") public void destroy() { @@ -758,14 +774,16 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1067,6 +1067,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt +@@ -1067,7 +1067,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mRootUiCoordinator.getBottomSheetController(), mRootUiCoordinator.getShareDelegateSupplier(), mXrSceneCoreSessionManagerSupplier.get(), -+ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager(), - mBackPressManager); +- mBackPressManager); ++ mBackPressManager, ++ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager()); mLayoutStateProviderSupplier.set(mLayoutManager); } + } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java @@ -1714,7 +1732,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar return readAloud != null && readAloud.isRestoringPlayer(); - }); + }, -+ mTopUiThemeColorProvider, mActivityTabProvider); ++ mTopUiThemeColorProvider, mActivityTabProvider.asObservable()); if (mInitializedWithNative) { bottomControlsCoordinator.initializeWithNative(); } @@ -2737,7 +2755,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow +import android.app.Activity; + -+import org.chromium.base.supplier.ObservableSupplier; ++import org.chromium.base.supplier.NullableObservableSupplier; +import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +import org.chromium.chrome.browser.tab.CurrentTabObserver; +import org.chromium.chrome.browser.tab.Tab; @@ -2756,7 +2774,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, - Callback onModelTokenChange); + Callback onModelTokenChange, -+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier tabSupplier); ++ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier tabSupplier); /** Destroy the delegate. */ void destroy(); @@ -2788,7 +2806,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow - Supplier readAloudRestoringSupplier) { + Supplier readAloudRestoringSupplier, + TopUiThemeColorProvider topUiThemeColorProvider, -+ ObservableSupplier tabSupplier) { ++ NullableObservableSupplier tabSupplier) { mRootFrameLayout = root; root.setConstraintsSupplier(constraintsSupplier); PropertyModel model = new PropertyModel(BottomControlsProperties.ALL_KEYS); @@ -2798,7 +2816,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow }, - root::onModelTokenChange); + root::onModelTokenChange, -+ topUiThemeColorProvider, tabSupplier); ++ topUiThemeColorProvider, tabSupplier); mContentDelegateWrapper.set(contentDelegate); }, mContentDelegateSupplier, diff --git a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch index 39c774b6..83e0d3e8 100644 --- a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch +++ b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch @@ -265,7 +265,7 @@ new file mode 100644 --- /dev/null +++ b/cromite_flags/content/public/common/content_features_cc/Partitioning-all-cookies-by-top-frame-domain.inc @@ -0,0 +1 @@ -+SET_CROMITE_FEATURE_DISABLED(kCookieDeprecationFacilitatedTesting); ++// empty file diff --git a/cromite_flags/net/base/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc b/cromite_flags/net/base/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Private-network-access-content-settings.patch b/build/patches/Private-network-access-content-settings.patch index 5216b90b..b48016d4 100644 --- a/build/patches/Private-network-access-content-settings.patch +++ b/build/patches/Private-network-access-content-settings.patch @@ -12,9 +12,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../insecure_private_network.grdp | 18 ++++ .../insecure_private_network.inc | 25 +++++ .../INSECURE_PRIVATE_NETWORK.inc | 3 + + .../private_network_access_util.cc | 6 +- ...rivate-network-access-content-settings.inc | 2 + services/network/public/cpp/features.cc | 2 +- - 7 files changed, 175 insertions(+), 4 deletions(-) + 8 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteInsecurePrivateNetworkContentSetting.java create mode 100644 components/browser_ui/strings/bromite_content_settings/insecure_private_network.grdp create mode 100644 components/content_settings/core/browser/bromite_content_settings/insecure_private_network.inc @@ -236,6 +237,34 @@ new file mode 100644 + // Stores whether to allow insecure websites to make private network requests. + // See also: https://wicg.github.io/cors-rfc1918 + INSECURE_PRIVATE_NETWORK, +diff --git a/content/browser/renderer_host/private_network_access_util.cc b/content/browser/renderer_host/private_network_access_util.cc +--- a/content/browser/renderer_host/private_network_access_util.cc ++++ b/content/browser/renderer_host/private_network_access_util.cc +@@ -121,13 +121,13 @@ Policy DerivePolicyForNonSecureContext( + // Requests from the `unknown` address space are controlled separately + // because it is unclear why they happen in the first place. The goal is + // to reduce instances of this happening before enabling this feature. +- return Policy::kAllow; ++ return Policy::kWarn; + case AddressSpace::kLocal: + // Requests from the non secure contexts in the `local` address space + // to localhost are blocked only if the right feature is enabled. + // This is controlled separately because private network websites face + // additional hurdles compared to public websites. See crbug.com/1234044. +- return Policy::kWarn; ++ return Policy::kBlock; + case AddressSpace::kPublic: + case AddressSpace::kLoopback: + // Private network requests from non secure contexts are blocked if the +@@ -137,7 +137,7 @@ Policy DerivePolicyForNonSecureContext( + // has no effect. Indeed, requests initiated from the local address space + // are never considered private network requests - they cannot target + // more-private address spaces. +- return Policy::kWarn; ++ return Policy::kBlock; + } + } + diff --git a/cromite_flags/services/network/public/cpp/features_cc/Private-network-access-content-settings.inc b/cromite_flags/services/network/public/cpp/features_cc/Private-network-access-content-settings.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Remove-binary-blob-integrations.patch b/build/patches/Remove-binary-blob-integrations.patch index 5ec35eab..e88c9abc 100644 --- a/build/patches/Remove-binary-blob-integrations.patch +++ b/build/patches/Remove-binary-blob-integrations.patch @@ -26,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- ...em_webview_bundle.AndroidManifest.expected | 5 - build/config/android/config.gni | 4 +- - chrome/android/BUILD.gn | 30 +- + chrome/android/BUILD.gn | 18 - chrome/android/chrome_java_sources.gni | 4 - chrome/android/java/AndroidManifest.xml | 33 - .../browser/PlayServicesVersionInfo.java | 12 +- @@ -111,7 +111,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../gms/ChromiumPlayServicesAvailability.java | 17 +- third_party/androidx/customizations.gni | 14 +- third_party/cardboard/BUILD.gn | 4 - - 87 files changed, 146 insertions(+), 2720 deletions(-) + 87 files changed, 134 insertions(+), 2720 deletions(-) create mode 100644 components/webauthn/android/java/src/org/chromium/components/webauthn/ConditionalUiState.java diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected @@ -168,22 +168,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:content_uri_utils_java", "//base:flagged_apis_java", "//base:process_launcher_java", -@@ -741,13 +733,22 @@ if (_is_default_toolchain) { - "//services/shape_detection:shape_detection_java", +@@ -742,12 +734,9 @@ if (_is_default_toolchain) { "//services/shape_detection/public/mojom:mojom_java", "//skia/public/mojom:mojom_java", -+ # added for Bromite in place of binary blobs -+ check if useful # "//third_party/androidx:androidx_annotation_annotation_java", -+ # "//third_party/android_deps:com_airbnb_android_lottie_java", -+ # "//third_party/androidx:androidx_lifecycle_lifecycle_common_java", -+ # "//third_party/androidx:androidx_appcompat_appcompat_java", -+ # "//third_party/androidx:androidx_fragment_fragment_java", -+ # "//third_party/androidx:androidx_core_core_java", -+ # "//third_party/androidx:androidx_media_media_java", -+ # "//third_party/androidx:androidx_recyclerview_recyclerview_java", -+ # "//third_party/androidx:androidx_vectordrawable_vectordrawable_java", -+ # "//base:base_java", -+ # "//third_party/jni_zero:jni_zero_java", "//third_party/android_deps:chromium_play_services_availability_java", - "//third_party/android_deps:com_airbnb_android_lottie_java", - "//third_party/android_deps:com_google_code_findbugs_jsr305_java", @@ -194,7 +181,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/android_media:android_media_java", "//third_party/android_swipe_refresh:android_swipe_refresh_java", -@@ -1903,7 +1904,6 @@ if (_is_default_toolchain) { +@@ -1903,7 +1892,6 @@ if (_is_default_toolchain) { ] deps = [ ":chrome_java", @@ -202,7 +189,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//build/android:build_java", -@@ -2009,7 +2009,6 @@ if (_is_default_toolchain) { +@@ -2009,7 +1997,6 @@ if (_is_default_toolchain) { "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java", "java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java", "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java", @@ -210,7 +197,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java", -@@ -2037,14 +2036,10 @@ if (_is_default_toolchain) { +@@ -2037,14 +2024,10 @@ if (_is_default_toolchain) { "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java", "java/src/org/chromium/chrome/browser/provider/PageContentProvider.java", @@ -225,7 +212,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//chrome/browser/autofill/android:third_party_provider_java", "//chrome/browser/download/android:file_provider_java", -@@ -2063,7 +2058,6 @@ if (_is_default_toolchain) { +@@ -2063,7 +2046,6 @@ if (_is_default_toolchain) { "//components/module_installer/android:module_installer_java", "//components/policy/android:policy_java", "//components/variations/android:variations_java", @@ -661,7 +648,7 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom import org.jni_zero.JniType; import org.jni_zero.NativeMethods; -@@ -489,13 +487,6 @@ public class PasswordManagerHelper { +@@ -490,13 +488,6 @@ public class PasswordManagerHelper { // If the exception is not a Chrome-defined one, it means that the call failed at the // API call level. It could have either failed with a known ApiException or because of a // different error (e.g. a different exception thrown by the implementation of the API). diff --git a/build/patches/Restore-Simplified-NTP-launch.patch b/build/patches/Restore-Simplified-NTP-launch.patch index f5e608bd..c6ca0060 100644 --- a/build/patches/Restore-Simplified-NTP-launch.patch +++ b/build/patches/Restore-Simplified-NTP-launch.patch @@ -515,7 +515,7 @@ new file mode 100644 + android:gravity="center" + android:layout_gravity="center" + android:drawablePadding="8dp" -+ android:drawableStart="@drawable/btn_star_filled" ++ android:drawableStart="@drawable/ic_star_filled_24dp" + android:text="@string/menu_bookmarks" + android:textAppearance="@style/TextAppearance.TextSmall.Secondary" + app:drawableHeight="20sp" diff --git a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch index 4665ceb0..5812084a 100644 --- a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -9,7 +9,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../ReaderModeToolbarButtonController.java | 4 ++-- .../ContextualPageActionController.java | 4 ++++ - .../chrome/browser/settings/MainSettings.java | 2 +- .../segmentation_platform_config.cc | 1 + .../strings/android_chrome_strings.grd | 3 +++ ...tton_group_adaptive_toolbar_preference.xml | 9 +++++++++ @@ -20,7 +19,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../adaptive/AdaptiveToolbarStats.java | 2 ++ ...oButtonGroupAdaptiveToolbarPreference.java | 19 ++++++++++++------- ...ve-button-in-top-toolbar-customization.inc | 1 + - 13 files changed, 43 insertions(+), 14 deletions(-) + 12 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-adaptive-button-in-top-toolbar-customization.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java @@ -54,18 +53,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_pl showDynamicAction(result); }); } -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -343,7 +343,7 @@ public class MainSettings extends ChromeBaseSettingsFragment - getContext(), - getProfile(), - (shouldShow) -> { -- if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); -+ if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); <-- check if needed - }); - - // LINT.IfChange(InitPrefUiTheme) diff --git a/chrome/browser/segmentation_platform/segmentation_platform_config.cc b/chrome/browser/segmentation_platform/segmentation_platform_config.cc --- a/chrome/browser/segmentation_platform/segmentation_platform_config.cc +++ b/chrome/browser/segmentation_platform/segmentation_platform_config.cc diff --git a/build/patches/Restore-chrome-password-store.patch b/build/patches/Restore-chrome-password-store.patch index 18dc2b61..93f38a0c 100644 --- a/build/patches/Restore-chrome-password-store.patch +++ b/build/patches/Restore-chrome-password-store.patch @@ -19,7 +19,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../android/java/res/xml/main_preferences.xml | 3 +- .../AutofillPaymentMethodsFragment.java | 1 + .../settings/AutofillProfilesFragment.java | 1 + - .../settings/PasswordSettings.java | 697 ++++++++++++++++++ + .../settings/PasswordSettings.java | 709 ++++++++++++++++++ .../settings/FragmentDependencyProvider.java | 5 + .../chrome/browser/settings/MainSettings.java | 15 - .../settings/SettingsNavigationImpl.java | 4 + @@ -43,12 +43,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../CredentialEditFragmentView.java | 226 ++++++ .../CredentialEntryFragmentViewBase.java | 135 ++++ .../browser/password_manager/android/BUILD.gn | 23 + - .../PasswordManagerHelper.java | 19 +- + .../PasswordManagerHelper.java | 22 +- .../PasswordManagerUtilBridge.java | 3 +- .../settings/CallbackDelayer.java | 18 + .../settings/DialogManager.java | 168 +++++ .../settings/ExportErrorDialogFragment.java | 110 +++ - .../password_manager/settings/ExportFlow.java | 583 +++++++++++++++ + .../password_manager/settings/ExportFlow.java | 583 ++++++++++++++ .../settings/ExportFlowInterface.java | 90 +++ .../settings/NonCancelableProgressBar.java | 55 ++ .../PasswordAccessReauthenticationHelper.java | 143 ++++ @@ -60,17 +60,17 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../settings/PasswordsPreference.java | 1 + .../settings/ProgressBarDialogFragment.java | 70 ++ .../settings/ReauthenticationManager.java | 198 +++++ - .../settings/SavedPasswordEntry.java | 41 ++ + .../settings/SavedPasswordEntry.java | 41 + .../settings/SingleThreadBarrierClosure.java | 49 ++ .../settings/TimedCallbackDelayer.java | 33 + .../android/password_manager_android_util.cc | 1 + - .../android/password_ui_view_android.cc | 449 +++++++++++ + .../android/password_ui_view_android.cc | 450 +++++++++++ .../android/password_ui_view_android.h | 196 +++++ .../android/pwm_disabled/BUILD.gn | 2 - .../password_store_backend_factory.cc | 14 +- ...ssword_manager_settings_service_factory.cc | 4 +- chrome/browser/prefs/browser_prefs.cc | 7 - - .../strings/android_chrome_strings.grd | 123 +++- + .../strings/android_chrome_strings.grd | 123 ++- .../Import-Password-Android.grdp | 9 + .../autofill/core/common/autofill_features.cc | 1 + .../settings/SettingsNavigation.java | 3 + @@ -87,7 +87,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../core/common/password_manager_pref_names.h | 2 - components/sync/service/sync_prefs.cc | 2 +- .../Restore-chrome-password-store.inc | 1 + - 79 files changed, 5539 insertions(+), 78 deletions(-) + 79 files changed, 5554 insertions(+), 79 deletions(-) create mode 100644 chrome/android/java/res/layout/password_no_result.xml create mode 100644 chrome/android/java/res/menu/save_password_preferences_action_bar_menu.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java @@ -266,14 +266,14 @@ new file mode 100644 + + + + @@ -345,7 +345,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -0,0 +1,697 @@ +@@ -0,0 +1,709 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -353,6 +353,7 @@ new file mode 100644 +package org.chromium.chrome.browser.password_manager.settings; + +import static org.chromium.chrome.browser.password_manager.PasswordMetricsUtil.PASSWORD_SETTINGS_EXPORT_METRICS_ID; ++import static org.chromium.build.NullUtil.assumeNonNull; + +import android.app.Activity; +import android.content.Context; @@ -377,6 +378,7 @@ new file mode 100644 +import org.chromium.base.supplier.ObservableSupplier; +import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.build.annotations.Nullable; ++import org.chromium.build.annotations.MonotonicNonNull; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; +import org.chromium.chrome.browser.password_manager.PasswordManagerHelper; @@ -389,6 +391,7 @@ new file mode 100644 +import org.chromium.components.browser_ui.settings.ChromeBasePreference; +import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; +import org.chromium.components.browser_ui.settings.SearchUtils; ++import org.chromium.components.browser_ui.settings.SearchViewProvider; +import org.chromium.components.browser_ui.settings.TextMessagePreference; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; +import org.chromium.components.prefs.PrefService; @@ -411,7 +414,7 @@ new file mode 100644 + */ +public class PasswordSettings extends ChromeBaseSettingsFragment + implements PasswordListObserver, -+ Preference.OnPreferenceClickListener, ++ Preference.OnPreferenceClickListener, SearchViewProvider, + SyncService.SyncStateChangedListener { + @IntDef({ + TrustedVaultBannerState.NOT_SHOWN, @@ -480,6 +483,7 @@ new file mode 100644 + private final ExportFlow mExportFlow = new ExportFlow(); + private ActivityWindowAndroid mWindowAndroid; + private IntentRequestTracker mIntentRequestTracker; ++ private @MonotonicNonNull SearchViewProvider.Observer mSearchViewObserver; + + @Override + public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { @@ -562,6 +566,11 @@ new file mode 100644 + } + + @Override ++ public void setSearchViewObserver(SearchViewProvider.Observer observer) { ++ mSearchViewObserver = observer; ++ } ++ ++ @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + mMenu = menu; @@ -573,7 +582,8 @@ new file mode 100644 + mHelpItem = menu.findItem(R.id.menu_id_targeted_help); + mHelpItem.setVisible(false); + SearchUtils.initializeSearchView( -+ mSearchItem, mSearchQuery, getActivity(), this::filterPasswords); ++ mSearchItem, mSearchQuery, getActivity(), ++ assumeNonNull(mSearchViewObserver), this::filterPasswords); + } + + @Override @@ -842,6 +852,8 @@ new file mode 100644 + public void onDestroy() { + super.onDestroy(); + ++ if (mSearchViewObserver != null) mSearchViewObserver.onUpdated(false); ++ + if (SyncServiceFactory.getForProfile(getProfile()) != null) { + SyncServiceFactory.getForProfile(getProfile()).removeSyncStateChangedListener(this); + } @@ -2562,7 +2574,7 @@ new file mode 100644 + + & context, + int index, -+ const JavaParamRef& obj) { ++ const JavaRef& obj) { + if (static_cast(index) >= passwords_.size() || + credential_edit_bridge_) { + return; @@ -5618,7 +5643,7 @@ new file mode 100644 + JNIEnv* env, + const base::android::JavaRef& context, + int index, -+ const JavaParamRef& obj) { ++ const JavaRef& obj) { + if (static_cast(index) >= blocked_sites_.size() || + credential_edit_bridge_) { + return; @@ -5675,7 +5700,7 @@ new file mode 100644 +jboolean PasswordUiViewAndroid::StartImporting( + JNIEnv* env, + const base::android::JavaRef& obj, -+ const JavaParamRef& java_window) { ++ const JavaRef& java_window) { + ui::WindowAndroid* window = + ui::WindowAndroid::FromJavaWindowAndroid(java_window); + CHECK(window); @@ -5715,7 +5740,7 @@ new file mode 100644 + +// static +static jlong JNI_PasswordUiView_Init(JNIEnv* env, -+ const JavaParamRef& obj, ++ const JavaRef& obj, + Profile* profile) { + PasswordUiViewAndroid* controller = + new PasswordUiViewAndroid(env, obj, profile); @@ -5776,6 +5801,8 @@ new file mode 100644 + break; + } +} ++ ++DEFINE_JNI(PasswordUiView) diff --git a/chrome/browser/password_manager/android/password_ui_view_android.h b/chrome/browser/password_manager/android/password_ui_view_android.h new file mode 100644 --- /dev/null @@ -5873,12 +5900,12 @@ new file mode 100644 + JNIEnv* env, + const base::android::JavaRef& context, + int index, -+ const base::android::JavaParamRef& obj); ++ const base::android::JavaRef& obj); + void HandleShowBlockedCredentialView( + JNIEnv* env, + const base::android::JavaRef& context, + int index, -+ const base::android::JavaParamRef& obj); ++ const base::android::JavaRef& obj); + jboolean IsWaitingForPasswordStore(JNIEnv* env, + const base::android::JavaRef&); + @@ -5891,7 +5918,7 @@ new file mode 100644 + + jboolean StartImporting(JNIEnv* env, + const base::android::JavaRef& obj, -+ const base::android::JavaParamRef& java_window); ++ const base::android::JavaRef& java_window); + + // Destroy the native implementation. + void Destroy(JNIEnv*, const base::android::JavaRef&); diff --git a/build/patches/Revert-Permit-blocking-of-view-source.patch b/build/patches/Revert-Permit-blocking-of-view-source.patch index f337839a..544d9e61 100644 --- a/build/patches/Revert-Permit-blocking-of-view-source.patch +++ b/build/patches/Revert-Permit-blocking-of-view-source.patch @@ -17,7 +17,7 @@ diff --git a/components/policy/content/policy_blocklist_navigation_throttle.cc b PolicyBlocklistState PolicyBlocklistNavigationThrottle::GetViewSourceNavigationBlocklistState() { - CHECK(IsViewSourceNavigation()); -+ CHECK(false); ++ if ((true)) CHECK(false); GURL view_source_url = GURL(std::string("view-source:") + navigation_handle()->GetURL().spec()); diff --git a/build/patches/Revert-removal-of-execution-context-address-space.patch b/build/patches/Revert-removal-of-execution-context-address-space.patch index 9ba5f0ff..0cf9ab89 100644 --- a/build/patches/Revert-removal-of-execution-context-address-space.patch +++ b/build/patches/Revert-removal-of-execution-context-address-space.patch @@ -17,7 +17,6 @@ This reverts commit 11f6a3e29bee9a6590a4fd56b28e8048200c18d0. Original License: BSD-3-Clause - https://spdx.org/licenses/BSD-3-Clause.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - ...val-of-execution-context-address-space.inc | 2 ++ .../execution_context/execution_context.cc | 9 +++++++ .../execution_context/execution_context.h | 4 +++ .../core/exported/web_shared_worker_impl.cc | 1 + @@ -52,16 +51,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../audio_worklet_global_scope_test.cc | 1 + .../webaudio/audio_worklet_thread_test.cc | 1 + .../worklet/worklet_thread_test_common.cc | 2 +- - 35 files changed, 153 insertions(+), 15 deletions(-) - create mode 100644 cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc + 34 files changed, 151 insertions(+), 15 deletions(-) -diff --git a/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc b/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc -new file mode 100644 ---- /dev/null -+++ b/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc -@@ -0,0 +1,2 @@ -+SET_CROMITE_FEATURE_ENABLED(kBlockInsecurePrivateNetworkRequests); -+SET_CROMITE_FEATURE_ENABLED(kBlockInsecurePrivateNetworkRequestsFromPrivate); diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc diff --git a/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch b/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch index 6bf21b6b..9eb10aac 100644 --- a/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch +++ b/build/patches/Set-the-screen-frame-rate-to-60-Hz.patch @@ -9,23 +9,23 @@ The feature can be disabled using the throttle-main-thread-to-60hz flag (enabled License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - cc/base/features.cc | 9 ++------- - cc/scheduler/scheduler_state_machine.cc | 17 +++++++++++++++++ - .../java/res/xml/privacy_preferences.xml | 6 ++++++ - chrome/browser/about_flags.cc | 6 +++--- - .../browser/chrome_content_browser_client.cc | 11 +++++++++++ - .../Set-the-screen-frame-rate-to-60-Hz.grdp | 9 +++++++++ - components/viz/common/features.cc | 1 + - .../common/frame_sinks/begin_frame_source.cc | 14 +++++++++++++- - .../common/frame_sinks/begin_frame_source.h | 1 + - components/viz/service/display/display.cc | 18 ++++++++++++++++-- - .../external_begin_frame_source_android.cc | 13 +++++++++++++ - .../external_begin_frame_source_android.h | 2 ++ - .../root_compositor_frame_sink_impl.cc | 10 ++++++++-- - .../Set-the-screen-frame-rate-to-60-Hz.inc | 7 +++++++ - .../renderer/core/animation/animation_clock.cc | 11 ++++++++--- - .../core/view_transition/view_transition.cc | 2 ++ - 16 files changed, 119 insertions(+), 18 deletions(-) + cc/base/features.cc | 9 ++------- + cc/scheduler/scheduler_state_machine.cc | 19 ++++++++++++++++++- + .../java/res/xml/privacy_preferences.xml | 6 ++++++ + chrome/browser/about_flags.cc | 6 +++--- + .../browser/chrome_content_browser_client.cc | 11 +++++++++++ + .../Set-the-screen-frame-rate-to-60-Hz.grdp | 9 +++++++++ + components/viz/common/features.cc | 1 + + .../common/frame_sinks/begin_frame_source.cc | 14 +++++++++++++- + .../common/frame_sinks/begin_frame_source.h | 1 + + components/viz/service/display/display.cc | 18 ++++++++++++++++-- + .../external_begin_frame_source_android.cc | 13 +++++++++++++ + .../external_begin_frame_source_android.h | 2 ++ + .../root_compositor_frame_sink_impl.cc | 10 ++++++++-- + .../Set-the-screen-frame-rate-to-60-Hz.inc | 7 +++++++ + .../core/animation/animation_clock.cc | 11 ++++++++--- + .../core/view_transition/view_transition.cc | 2 ++ + 16 files changed, 120 insertions(+), 19 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Set-the-screen-frame-rate-to-60-Hz.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Set-the-screen-frame-rate-to-60-Hz.inc @@ -58,6 +58,15 @@ diff --git a/cc/base/features.cc b/cc/base/features.cc diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc +@@ -34,7 +34,7 @@ const int kMaxPendingSubmitFrames = 1; + bool IsEligibleToThrottleMainFrameRate() { + #if BUILDFLAG(IS_ANDROID) + // Still requires balancing tradeoffs for desktop Android, not enabled yet. +- return !base::android::device_info::is_desktop(); ++ return true; + #else + return true; + #endif @@ -1578,6 +1578,15 @@ void SchedulerStateMachine::FrameIntervalUpdated( // // Apply some slack, so that if for some reason the interval is a bit larger diff --git a/build/patches/Timezone-customization.patch b/build/patches/Timezone-customization.patch index 311d614a..4da099c9 100644 --- a/build/patches/Timezone-customization.patch +++ b/build/patches/Timezone-customization.patch @@ -572,15 +572,15 @@ diff --git a/components/browser_ui/site_settings/android/website_preference_brid +static void JNI_WebsitePreferenceBridge_SetCustomTimezone( + JNIEnv* env, -+ const JavaParamRef& jbrowser_context_handle, -+ const JavaParamRef& custom_timezone) { ++ const JavaRef& jbrowser_context_handle, ++ const JavaRef& custom_timezone) { + std::string new_timezone = ConvertJavaStringToUTF8(env, custom_timezone); + GetHostContentSettingsMap(jbrowser_context_handle)->SetTimezoneOverrideValue(new_timezone); +} + +static base::android::ScopedJavaLocalRef JNI_WebsitePreferenceBridge_GetCustomTimezone( + JNIEnv* env, -+ const JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jbrowser_context_handle) { + std::string custom_timezone; + GetHostContentSettingsMap(jbrowser_context_handle)->GetTimezoneOverrideValue(custom_timezone); + return ConvertUTF8ToJavaString(env, custom_timezone); diff --git a/build/patches/Use-list-mode-for-tab-switcher.patch b/build/patches/Use-list-mode-for-tab-switcher.patch index 8df03cbd..15823121 100644 --- a/build/patches/Use-list-mode-for-tab-switcher.patch +++ b/build/patches/Use-list-mode-for-tab-switcher.patch @@ -1214,7 +1214,7 @@ diff --git a/chrome/browser/android/favicon_helper.cc b/chrome/browser/android/f + Profile* profile, + std::vector& gurls, + jint j_desired_size_in_pixel, -+ const base::android::JavaParamRef& ++ const base::android::JavaRef& + j_composed_favicon_image_callback) { + DCHECK(profile); + if (!profile) { @@ -1351,7 +1351,7 @@ diff --git a/chrome/browser/android/favicon_helper.h b/chrome/browser/android/fa + Profile* profile, + std::vector& gurls, + jint j_desired_size_in_pixel, -+ const base::android::JavaParamRef& j_favicon_image_callback); ++ const base::android::JavaRef& j_favicon_image_callback); bool GetLocalFaviconImageForURL( JNIEnv* env, Profile* profile, diff --git a/build/patches/User-agent-customization.patch b/build/patches/User-agent-customization.patch index 6e3b0f11..e0bbaa09 100644 --- a/build/patches/User-agent-customization.patch +++ b/build/patches/User-agent-customization.patch @@ -24,9 +24,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../settings/UserAgentPreferences.java | 189 ++++++++++++++++++ .../chromium/chrome/browser/tab/TabImpl.java | 64 +++++- .../chromium/chrome/browser/tab/TabUtils.java | 8 +- - .../browser/android/content/content_utils.cc | 32 ++- + .../browser/android/content/content_utils.cc | 29 +++ .../preferences/browser_prefs_android.cc | 7 + - .../privacy_preferences_manager_impl.cc | 127 ++++++++++++ + .../privacy_preferences_manager_impl.cc | 126 ++++++++++++ ...ktop_site_web_contents_observer_android.cc | 11 + ...sktop_site_web_contents_observer_android.h | 2 + .../preferences/ChromePreferenceKeys.java | 2 - @@ -46,7 +46,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/web_contents/web_contents_impl.cc | 6 +- .../framehost/NavigationControllerImpl.java | 17 +- content/renderer/render_thread_impl.cc | 1 - - 36 files changed, 811 insertions(+), 26 deletions(-) + 36 files changed, 808 insertions(+), 25 deletions(-) create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java @@ -690,7 +690,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.ja diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/android/content/content_utils.cc --- a/chrome/browser/android/content/content_utils.cc +++ b/chrome/browser/android/content/content_utils.cc -@@ -8,9 +8,23 @@ +@@ -8,9 +8,22 @@ #include "content/public/browser/web_contents.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" @@ -706,7 +706,6 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an +using base::android::ConvertJavaStringToUTF8; +using base::android::ConvertUTF16ToJavaString; +using base::android::ConvertUTF8ToJavaString; -+using base::android::JavaParamRef; +using base::android::JavaRef; +using base::android::ScopedJavaGlobalRef; +using base::android::ScopedJavaLocalRef; @@ -714,7 +713,7 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an static std::string JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) { return embedder_support::GetUserAgent(); } -@@ -19,6 +33,22 @@ static void JNI_ContentUtils_SetUserAgentOverride( +@@ -19,6 +32,22 @@ static void JNI_ContentUtils_SetUserAgentOverride( JNIEnv* env, const base::android::JavaRef& jweb_contents, bool j_override_in_new_tabs) { @@ -737,15 +736,6 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an constexpr char kLinuxInfoStr[] = "X11; Linux x86_64"; // Note: Any updates to desktop overrides here should also be applied to -@@ -29,7 +59,7 @@ static void JNI_ContentUtils_SetUserAgentOverride( - blink::UserAgentOverride spoofed_ua; - spoofed_ua.ua_string_override = - embedder_support::BuildUserAgentFromOSAndProduct( -- kLinuxInfoStr, embedder_support::GetProductAndVersion()); -+ kLinuxInfoStr, embedder_support::GetProductAndVersion(embedder_support::UserAgentReductionEnterprisePolicyState::kForceEnabled)); - spoofed_ua.ua_metadata_override = metadata; - spoofed_ua.ua_metadata_override->platform = "Linux"; - spoofed_ua.ua_metadata_override->platform_version = diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrome/browser/android/preferences/browser_prefs_android.cc --- a/chrome/browser/android/preferences/browser_prefs_android.cc +++ b/chrome/browser/android/preferences/browser_prefs_android.cc @@ -773,7 +763,7 @@ diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrom diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc --- a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc +++ b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc -@@ -12,9 +12,35 @@ +@@ -12,9 +12,34 @@ #include "components/policy/core/common/features.h" #include "components/prefs/pref_service.h" @@ -801,7 +791,6 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl +using base::android::ConvertJavaStringToUTF8; +using base::android::ConvertUTF16ToJavaString; +using base::android::ConvertUTF8ToJavaString; -+using base::android::JavaParamRef; +using base::android::JavaRef; +using base::android::ScopedJavaGlobalRef; +using base::android::ScopedJavaLocalRef; @@ -809,7 +798,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl static bool JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingEnabled( JNIEnv* env) { PrefService* local_state = g_browser_process->local_state(); -@@ -37,4 +63,105 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy( +@@ -37,4 +62,105 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy( !local_state->GetBoolean(metrics::prefs::kMetricsReportingEnabled); } @@ -877,7 +866,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl + +static void JNI_PrivacyPreferencesManagerImpl_SetOverrideUserAgentValue( + JNIEnv* env, -+ const JavaParamRef& ua, jboolean desktopMode) { ++ const JavaRef& ua, jboolean desktopMode) { + std::string new_ua = ConvertJavaStringToUTF8(env, ua); + if (desktopMode == false) { + g_browser_process->local_state()->SetString(prefs::kOverrideUserAgent, diff --git a/build/patches/Welcome-screen.patch b/build/patches/Welcome-screen.patch index 2de85b7e..21fed1dc 100644 --- a/build/patches/Welcome-screen.patch +++ b/build/patches/Welcome-screen.patch @@ -12,8 +12,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/values/dimens.xml | 11 + chrome/android/java/res/values/styles.xml | 24 ++ .../DefaultSearchEngineFirstRunFragment.java | 3 - - .../browser/firstrun/FirstRunActivity.java | 23 +- + .../browser/firstrun/FirstRunActivity.java | 39 +- .../firstrun/FirstRunFlowSequencer.java | 55 +-- + .../browser/firstrun/FirstRunFragment.java | 3 + .../browser/firstrun/FirstRunUtils.java | 1 + .../firstrun/ToSAndUMAFirstRunFragment.java | 321 +++++++++++++++++ .../firstrun/TosAndUmaFragmentView.java | 336 ++++++++++++++++++ @@ -22,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...creenSigninAndHistorySyncActivityBase.java | 6 +- .../browser/locale/LocaleManagerDelegate.java | 5 +- .../Welcome-screen.grdp | 27 ++ - 16 files changed, 907 insertions(+), 76 deletions(-) + 17 files changed, 926 insertions(+), 76 deletions(-) create mode 100644 chrome/android/java/res/layout/fre_tosanduma.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFragmentView.java @@ -293,7 +294,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/Defaul diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java -@@ -41,8 +41,7 @@ import org.chromium.chrome.browser.feature_engagement.TrackerFactory; +@@ -23,6 +23,7 @@ import androidx.annotation.CallSuper; + import androidx.annotation.ColorInt; + import androidx.annotation.StringRes; + import androidx.annotation.VisibleForTesting; ++import androidx.fragment.app.Fragment; + import androidx.viewpager2.widget.ViewPager2; + + import org.chromium.base.ActivityState; +@@ -41,8 +42,7 @@ import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.metrics.UmaUtils; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; @@ -303,7 +312,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.signin.DialogWhenLargeContentLayout; import org.chromium.chrome.browser.ui.signin.SigninUtils; -@@ -231,7 +230,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -231,7 +231,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa /** Creates first page and sets up adapter. Should result UI being shown on the screen. */ private void createFirstPage() { BooleanSupplier showWelcomePage = () -> !FirstRunStatus.shouldSkipWelcomePage(); @@ -312,7 +321,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR mFreProgressStates.add(MobileFreProgress.WELCOME_SHOWN); mPagerAdapter = new FirstRunPagerAdapter(FirstRunActivity.this, mPages); mPager.setAdapter(mPagerAdapter); -@@ -256,9 +255,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -256,9 +256,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa // // TODO(b/245912657): explicitly sign in supervised users in {@link // FullscreenSigninMediator#handleContinueWithNative} rather than relying on SigninChecker. @@ -322,7 +331,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR assumeNonNull(mFreProperties); mFirstRunFlowSequencer.updateFirstRunProperties(mFreProperties); -@@ -274,16 +270,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -274,16 +271,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa mFreProgressStates.add(MobileFreProgress.DEFAULT_SEARCH_ENGINE_SHOWN); } @@ -339,7 +348,29 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR if (mPagerAdapter != null) { mPagerAdapter.notifyDataSetChanged(); } -@@ -645,11 +631,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -498,6 +485,21 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa + return true; + } + ++ @Override ++ public void onAttachFragment(Fragment fragment) { ++ if (!(fragment instanceof FirstRunFragment)) return; ++ ++ FirstRunFragment page = (FirstRunFragment) fragment; ++ if (mNativeInitializationPromise.isFulfilled()) { ++ page.onNativeInitialized(); ++ } else { ++ mNativeInitializationPromise.then( ++ (ignored) -> { ++ page.onNativeInitialized(); ++ }); ++ } ++ } ++ + // Activity: + @Override + public void onRestoreInstanceState(@Nullable Bundle state) { +@@ -645,11 +647,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa public void acceptTermsOfService(boolean allowMetricsAndCrashUploading) { assert mNativeInitializationPromise.isFulfilled(); @@ -471,6 +502,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR } return true; } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java +@@ -12,6 +12,9 @@ import org.chromium.build.annotations.Nullable; + /** This interface is implemented by FRE fragments. */ + @NullMarked + public interface FirstRunFragment { ++ ++ default void onNativeInitialized() {} ++ + /** + * @see androidx.fragment.app.Fragment#getActivity(). + */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java diff --git a/build/patches/bromite-build-utils.patch b/build/patches/bromite-build-utils.patch index 6085ffb2..d97038fd 100644 --- a/build/patches/bromite-build-utils.patch +++ b/build/patches/bromite-build-utils.patch @@ -14,13 +14,13 @@ Subject: bromite build utils build/config/android/rules.gni | 6 +- .../ChromeAccessibilitySettingsDelegate.java | 5 + chrome/browser/flags/BUILD.gn | 8 +- - .../flags/android/cromite_native_utils.cc | 92 +++++++++++++++ + .../flags/android/cromite_native_utils.cc | 94 +++++++++++++++ .../flags/android/cromite_native_utils.h | 14 +++ .../browser/flags/CromiteNativeUtils.java | 46 ++++++++ mojo/public/tools/mojom/mojom_parser.py | 22 +++- tools/grit/grit/grd_reader.py | 27 ++++- tools/grit/preprocess_if_expr.py | 32 +++++- - 17 files changed, 536 insertions(+), 19 deletions(-) + 17 files changed, 538 insertions(+), 19 deletions(-) create mode 100644 build/bromite/bromite_utils.gni create mode 100644 build/bromite/gyp/cpp_bromite_include.py create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps @@ -504,7 +504,7 @@ diff --git a/chrome/browser/flags/android/cromite_native_utils.cc b/chrome/brows new file mode 100755 --- /dev/null +++ b/chrome/browser/flags/android/cromite_native_utils.cc -@@ -0,0 +1,92 @@ +@@ -0,0 +1,94 @@ +#include "chrome/browser/flags/android/cromite_native_utils.h" + +#include "chrome/browser/browser_process.h" @@ -514,10 +514,10 @@ new file mode 100755 + +#include "base/android/jni_string.h" + -+using base::android::JavaParamRef; ++using base::android::JavaRef; + +static void JNI_CromiteNativeUtils_SetEnabled(JNIEnv* env, -+ const JavaParamRef& featureName, jboolean isEnabled) { ++ const JavaRef& featureName, bool isEnabled) { + flags_ui::PrefServiceFlagsStorage flags_storage( + g_browser_process->local_state()); + std::set entries = flags_storage.GetFlags(); @@ -560,7 +560,7 @@ new file mode 100755 +} + +static jboolean JNI_CromiteNativeUtils_IsFlagEnabled(JNIEnv* env, -+ const JavaParamRef& featureName) { ++ const JavaRef& featureName) { + auto internal_name = base::android::ConvertJavaStringToUTF8(env, featureName); + + flags_ui::PrefServiceFlagsStorage flags_storage( @@ -597,6 +597,8 @@ new file mode 100755 + + return false; +} ++ ++DEFINE_JNI(CromiteNativeUtils) diff --git a/chrome/browser/flags/android/cromite_native_utils.h b/chrome/browser/flags/android/cromite_native_utils.h new file mode 100755 --- /dev/null @@ -662,7 +664,7 @@ new file mode 100755 + } + + @NativeMethods -+ interface Natives { ++ public interface Natives { + void setEnabled(String featureName, boolean newValue); + boolean isFlagEnabled(String featureName); + } diff --git a/build/patches/eyeo-133.0.6943.49-android_api.patch b/build/patches/eyeo-133.0.6943.49-android_api.patch index 2590d2ec..c70f221f 100644 --- a/build/patches/eyeo-133.0.6943.49-android_api.patch +++ b/build/patches/eyeo-133.0.6943.49-android_api.patch @@ -10,11 +10,11 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module chrome/android/chrome_java_sources.gni | 4 + .../browser/adblock/TabIdTranslator.java | 36 ++ chrome/browser/BUILD.gn | 4 + - .../android/adblock/tab_id_translator_jni.cc | 41 ++ + .../android/adblock/tab_id_translator_jni.cc | 43 ++ chrome/browser/ui/BUILD.gn | 6 + components/adblock/android/BUILD.gn | 107 ++++ .../adblock/android/adblock_controller_jni.cc | 133 +++++ - .../filtering_configuration_android.cc | 244 ++++++++ + .../filtering_configuration_android.cc | 246 ++++++++ .../android/filtering_configuration_android.h | 94 +++ .../components/adblock/AdblockController.java | 283 +++++++++ .../components/adblock/AdblockSwitches.java | 22 + @@ -44,9 +44,9 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module .../TestPagesWildcardDomainTestBase.java | 116 ++++ .../TestResourceFilteringObserver.java | 180 ++++++ .../adblock/TestVerificationUtils.java | 220 +++++++ - ...esource_classification_notifier_android.cc | 163 +++++ + ...esource_classification_notifier_android.cc | 165 ++++++ ...resource_classification_notifier_android.h | 72 +++ - 40 files changed, 5609 insertions(+) + 40 files changed, 5615 insertions(+) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/adblock/TabIdTranslator.java create mode 100644 chrome/browser/android/adblock/tab_id_translator_jni.cc create mode 100644 components/adblock/android/BUILD.gn @@ -105,7 +105,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/android_autofill/browser:features_java", "//components/android_autofill/browser:java", "//components/autofill/android:autofill_features_java", -@@ -1472,6 +1476,7 @@ if (_is_default_toolchain) { +@@ -1460,6 +1464,7 @@ if (_is_default_toolchain) { "//chrome/test/data/translate/", "//chrome/test/data/webauthn/", "//chrome/test/media_router/resources/", @@ -113,7 +113,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/test/data/autofill/", "//components/test/data/payments/", "//content/test/data/browsing_data/", -@@ -3066,6 +3071,12 @@ if (_is_default_toolchain) { +@@ -3054,6 +3059,12 @@ if (_is_default_toolchain) { sources += [ "java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java" ] } @@ -126,7 +126,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn # Used for testing only, should not be shipped to end users. if (enable_offline_pages_harness) { sources += [ "java/src/org/chromium/chrome/browser/offlinepages/evaluation/OfflinePageEvaluationBridge.java" ] -@@ -3158,6 +3169,7 @@ if (_is_default_toolchain) { +@@ -3146,6 +3157,7 @@ if (_is_default_toolchain) { "//chrome/browser/ui/plus_addresses/android:jni_headers", "//chrome/browser/util:jni_headers", "//chrome/browser/webauthn/android:jni_headers", @@ -214,7 +214,7 @@ diff --git a/chrome/browser/android/adblock/tab_id_translator_jni.cc b/chrome/br new file mode 100644 --- /dev/null +++ b/chrome/browser/android/adblock/tab_id_translator_jni.cc -@@ -0,0 +1,41 @@ +@@ -0,0 +1,43 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -256,6 +256,8 @@ new file mode 100644 + + return tab->GetAndroidId(); +} ++ ++DEFINE_JNI(TabIdTranslator) 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 @@ -526,7 +528,7 @@ diff --git a/components/adblock/android/filtering_configuration_android.cc b/com new file mode 100644 --- /dev/null +++ b/components/adblock/android/filtering_configuration_android.cc -@@ -0,0 +1,244 @@ +@@ -0,0 +1,246 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -563,7 +565,7 @@ new file mode 100644 +using base::android::AttachCurrentThread; +using base::android::ConvertJavaStringToUTF8; +using base::android::ConvertUTF8ToJavaString; -+using base::android::JavaParamRef; ++using base::android::JavaRef; +using base::android::ScopedJavaLocalRef; +using base::android::ToJavaArrayOfStrings; + @@ -571,7 +573,7 @@ new file mode 100644 + +FilteringConfigurationAndroid::FilteringConfigurationAndroid( + JNIEnv* env, -+ const JavaParamRef& jcontroller, ++ const JavaRef& jcontroller, + const std::string& configuration_name, + SubscriptionService* subscription_service, + PrefService* pref_service) @@ -657,14 +659,14 @@ new file mode 100644 + +void FilteringConfigurationAndroid::AddAllowedDomain( + JNIEnv* env, -+ const JavaParamRef& allowed_domain) { ++ const JavaRef& allowed_domain) { + filtering_configuration_ptr->AddAllowedDomain( + ConvertJavaStringToUTF8(allowed_domain)); +} + +void FilteringConfigurationAndroid::RemoveAllowedDomain( + JNIEnv* env, -+ const JavaParamRef& allowed_domain) { ++ const JavaRef& allowed_domain) { + filtering_configuration_ptr->RemoveAllowedDomain( + ConvertJavaStringToUTF8(allowed_domain)); +} @@ -677,14 +679,14 @@ new file mode 100644 + +void FilteringConfigurationAndroid::AddCustomFilter( + JNIEnv* env, -+ const JavaParamRef& custom_filter) { ++ const JavaRef& custom_filter) { + filtering_configuration_ptr->AddCustomFilter( + ConvertJavaStringToUTF8(custom_filter)); +} + +void FilteringConfigurationAndroid::RemoveCustomFilter( + JNIEnv* env, -+ const JavaParamRef& custom_filter) { ++ const JavaRef& custom_filter) { + filtering_configuration_ptr->RemoveCustomFilter( + ConvertJavaStringToUTF8(custom_filter)); +} @@ -697,14 +699,14 @@ new file mode 100644 + +void FilteringConfigurationAndroid::AddFilterList( + JNIEnv* env, -+ const JavaParamRef& url) { ++ const JavaRef& url) { + filtering_configuration_ptr->AddFilterList( + GURL{ConvertJavaStringToUTF8(url)}); +} + +void FilteringConfigurationAndroid::RemoveFilterList( + JNIEnv* env, -+ const JavaParamRef& url) { ++ const JavaRef& url) { + filtering_configuration_ptr->RemoveFilterList( + GURL{ConvertJavaStringToUTF8(url)}); +} @@ -726,9 +728,9 @@ new file mode 100644 + +static jlong JNI_FilteringConfiguration_Create( + JNIEnv* env, -+ const JavaParamRef& jcontroller, -+ const JavaParamRef& jstring, -+ const JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jcontroller, ++ const JavaRef& jstring, ++ const JavaRef& jbrowser_context_handle) { + DCHECK(!jcontroller.is_null()); + DCHECK(!jbrowser_context_handle.is_null()); + auto* context = @@ -742,7 +744,7 @@ new file mode 100644 +static ScopedJavaLocalRef +JNI_FilteringConfiguration_GetConfigurations( + JNIEnv* env, -+ const JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jbrowser_context_handle) { + std::vector configurations; + std::ranges::transform( + adblock::SubscriptionServiceFactory::GetForBrowserContext( @@ -755,7 +757,7 @@ new file mode 100644 + +static jboolean JNI_FilteringConfiguration_IsAutoInstallEnabled( + JNIEnv* env, -+ const JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jbrowser_context_handle) { + return adblock::SubscriptionServiceFactory::GetForBrowserContext( + content::BrowserContextFromJavaHandle(jbrowser_context_handle)) + ->IsAutoInstallEnabled() @@ -766,11 +768,13 @@ new file mode 100644 +static void JNI_FilteringConfiguration_SetAutoInstallEnabled( + JNIEnv* env, + jboolean j_enabled, -+ const JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jbrowser_context_handle) { + adblock::SubscriptionServiceFactory::GetForBrowserContext( + content::BrowserContextFromJavaHandle(jbrowser_context_handle)) + ->SetAutoInstallEnabled(j_enabled == JNI_TRUE); +} ++ ++DEFINE_JNI(FilteringConfiguration) diff --git a/components/adblock/android/filtering_configuration_android.h b/components/adblock/android/filtering_configuration_android.h new file mode 100644 --- /dev/null @@ -813,7 +817,7 @@ new file mode 100644 + public: + explicit FilteringConfigurationAndroid( + JNIEnv* env, -+ const base::android::JavaParamRef& jcontroller, ++ const base::android::JavaRef& jcontroller, + const std::string& configuration_name, + adblock::SubscriptionService* subscription_service, + PrefService* pref_service); @@ -823,21 +827,21 @@ new file mode 100644 + void SetEnabled(JNIEnv* env, jboolean j_enabled); + jboolean IsEnabled(JNIEnv* env) const; + void AddFilterList(JNIEnv* env, -+ const base::android::JavaParamRef& url); ++ const base::android::JavaRef& url); + void RemoveFilterList(JNIEnv* env, -+ const base::android::JavaParamRef& url); ++ const base::android::JavaRef& url); + base::android::ScopedJavaLocalRef GetFilterLists( + JNIEnv* env) const; + void AddAllowedDomain(JNIEnv* env, -+ const base::android::JavaParamRef& domain); ++ const base::android::JavaRef& domain); + void RemoveAllowedDomain(JNIEnv* env, -+ const base::android::JavaParamRef& domain); ++ const base::android::JavaRef& domain); + base::android::ScopedJavaLocalRef GetAllowedDomains( + JNIEnv* env) const; + void AddCustomFilter(JNIEnv* env, -+ const base::android::JavaParamRef& filter); ++ const base::android::JavaRef& filter); + void RemoveCustomFilter(JNIEnv* env, -+ const base::android::JavaParamRef& filter); ++ const base::android::JavaRef& filter); + base::android::ScopedJavaLocalRef GetCustomFilters( + JNIEnv* env) const; + @@ -1641,7 +1645,7 @@ new file mode 100644 + } + + @NativeMethods -+ interface Natives { ++ public interface Natives { + void destroy(long nativeFilteringConfigurationAndroid); + + void setEnabled(long nativeFilteringConfigurationAndroid, boolean enabled); @@ -5707,7 +5711,7 @@ diff --git a/components/adblock/android/resource_classification_notifier_android new file mode 100644 --- /dev/null +++ b/components/adblock/android/resource_classification_notifier_android.cc -@@ -0,0 +1,163 @@ +@@ -0,0 +1,165 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -5740,7 +5744,7 @@ new file mode 100644 + +using base::android::AttachCurrentThread; +using base::android::ConvertUTF8ToJavaString; -+using base::android::JavaParamRef; ++using base::android::JavaRef; +using base::android::ScopedJavaLocalRef; +using base::android::ToJavaArrayOfStrings; + @@ -5748,7 +5752,7 @@ new file mode 100644 + +ResourceClassificationNotifierAndroid::ResourceClassificationNotifierAndroid( + JNIEnv* env, -+ const JavaParamRef& jcontroller, ++ const JavaRef& jcontroller, + ResourceClassificationRunner* classification_runner) + : classification_runner_(classification_runner), + java_weak_controller_(env, jcontroller) { @@ -5861,8 +5865,8 @@ new file mode 100644 + +static jlong JNI_ResourceClassificationNotifier_Create( + JNIEnv* env, -+ const JavaParamRef& jcontroller, -+ const base::android::JavaParamRef& jbrowser_context_handle) { ++ const JavaRef& jcontroller, ++ const base::android::JavaRef& jbrowser_context_handle) { + DCHECK(!jcontroller.is_null()); + DCHECK(!jbrowser_context_handle.is_null()); + return reinterpret_cast( @@ -5871,6 +5875,8 @@ new file mode 100644 + adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( + content::BrowserContextFromJavaHandle(jbrowser_context_handle)))); +} ++ ++DEFINE_JNI(ResourceClassificationNotifier) diff --git a/components/adblock/android/resource_classification_notifier_android.h b/components/adblock/android/resource_classification_notifier_android.h new file mode 100644 --- /dev/null @@ -5910,7 +5916,7 @@ new file mode 100644 + public: + ResourceClassificationNotifierAndroid( + JNIEnv* env, -+ const base::android::JavaParamRef& jcontroller, ++ const base::android::JavaRef& jcontroller, + ResourceClassificationRunner* classification_runner); + ~ResourceClassificationNotifierAndroid() override; + diff --git a/build/patches/ungoogled-chromium-Disable-translate-integration.patch b/build/patches/ungoogled-chromium-Disable-translate-integration.patch index 3a3fb861..609d1216 100644 --- a/build/patches/ungoogled-chromium-Disable-translate-integration.patch +++ b/build/patches/ungoogled-chromium-Disable-translate-integration.patch @@ -6,13 +6,13 @@ Remove translate offer License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../xml/languages_detailed_preferences.xml | 41 --------------- - .../java/res/xml/languages_preferences.xml | 4 -- - .../language/settings/LanguageSettings.java | 50 +------------------ - .../strings/android_chrome_strings.grd | 3 -- - .../core/browser/translate_manager.cc | 5 +- - .../core/browser/translate_script.cc | 17 ++----- - 6 files changed, 10 insertions(+), 110 deletions(-) + .../xml/languages_detailed_preferences.xml | 41 ----- + .../java/res/xml/languages_preferences.xml | 4 - + .../language/settings/LanguageSettings.java | 153 ------------------ + .../strings/android_chrome_strings.grd | 3 - + .../core/browser/translate_manager.cc | 5 +- + .../core/browser/translate_script.cc | 17 +- + 6 files changed, 8 insertions(+), 215 deletions(-) diff --git a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml b/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml --- a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml @@ -144,25 +144,103 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse } /** Setup the App Language section with a title and preference to choose the app language. */ -@@ -186,7 +148,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment - * @param contentLanguagesPreference ContentLanguagesPreference reference to update about state - * changes. - */ -- private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) { -+/* private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) { - // Setup expandable advanced settings section. - PreferenceCategory translationAdvancedSection = - (PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION); -@@ -266,7 +228,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment - return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED); - } - }); -- } -+ } */ +@@ -179,95 +141,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment + mAppLanguageDelegate.setup(this, appLanguagePreference, getProfile()); + } +- /** +- * Setup the translate preferences section. A switch preferences controls if translate is +- * enabled/disabled and will hide all advanced settings when disabled. +- * +- * @param contentLanguagesPreference ContentLanguagesPreference reference to update about state +- * changes. +- */ +- private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) { +- // Setup expandable advanced settings section. +- PreferenceCategory translationAdvancedSection = +- (PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION); +- translationAdvancedSection.setOnExpandButtonClickListener( +- () -> { +- // Lambda for PreferenceGroup.OnExpandButtonClickListener. +- LanguagesManager.recordImpression( +- LanguagesManager.LanguageSettingsPageType.ADVANCED_LANGUAGE_SETTINGS); +- }); +- translationAdvancedSection.setVisible( +- getPrefService().getBoolean(Pref.OFFER_TRANSLATE_ENABLED)); +- +- // Setup target language preference. +- LanguageItemPickerPreference targetLanguagePreference = +- (LanguageItemPickerPreference) findPreference(TARGET_LANGUAGE_KEY); +- targetLanguagePreference.setLanguageItem( +- getProfile(), TranslateBridge.getTargetLanguageForChromium(getProfile())); +- setSelectLanguageLauncher( +- targetLanguagePreference, +- LanguagesManager.LanguageListType.TARGET_LANGUAGES, +- REQUEST_CODE_CHANGE_TARGET_LANGUAGE, +- LanguagesManager.LanguageSettingsPageType.CHANGE_TARGET_LANGUAGE); +- mPrefChangeRegistrar.addObserver( +- Pref.PREF_TRANSLATE_RECENT_TARGET, +- () -> { +- targetLanguagePreference.setLanguageItem( +- getProfile(), +- TranslateBridge.getTargetLanguageForChromium(getProfile())); +- }); +- +- // Setup always translate preference. +- LanguageItemListPreference alwaysTranslatePreference = +- (LanguageItemListPreference) findPreference(ALWAYS_LANGUAGES_KEY); +- alwaysTranslatePreference.setFragmentListDelegate( +- new AlwaysTranslateListFragment.ListDelegate(getProfile())); +- mPrefChangeRegistrar.addObserver( +- Pref.PREF_ALWAYS_TRANSLATE_LIST, alwaysTranslatePreference); +- setLanguageListPreferenceClickListener(alwaysTranslatePreference); +- +- // Setup never translate preference. +- LanguageItemListPreference neverTranslatePreference = +- (LanguageItemListPreference) findPreference(NEVER_LANGUAGES_KEY); +- neverTranslatePreference.setFragmentListDelegate( +- new NeverTranslateListFragment.ListDelegate(getProfile())); +- mPrefChangeRegistrar.addObserver(Pref.BLOCKED_LANGUAGES, neverTranslatePreference); +- setLanguageListPreferenceClickListener(neverTranslatePreference); +- +- // Setup translate switch to toggle advanced section on and off. +- ChromeSwitchPreference translateSwitch = +- (ChromeSwitchPreference) findPreference(TRANSLATE_SWITCH_KEY); +- boolean isTranslateEnabled = getPrefService().getBoolean(Pref.OFFER_TRANSLATE_ENABLED); +- translateSwitch.setChecked(isTranslateEnabled); +- +- translateSwitch.setOnPreferenceChangeListener( +- new Preference.OnPreferenceChangeListener() { +- @Override +- public boolean onPreferenceChange(Preference preference, Object newValue) { +- boolean enabled = (boolean) newValue; +- getPrefService().setBoolean(Pref.OFFER_TRANSLATE_ENABLED, enabled); +- updateTranslateAdvancedSectionIndex(enabled, /* refreshResult= */ true); +- contentLanguagesPreference.notifyPrefChanged(); +- translationAdvancedSection.setVisible(enabled); +- notifyPreferencesUpdated(); +- LanguagesManager.recordAction( +- enabled +- ? LanguagesManager.LanguageSettingsActionType +- .ENABLE_TRANSLATE_GLOBALLY +- : LanguagesManager.LanguageSettingsActionType +- .DISABLE_TRANSLATE_GLOBALLY); +- return true; +- } +- }); +- translateSwitch.setManagedPreferenceDelegate( +- new ChromeManagedPreferenceDelegate(getProfile()) { +- @Override +- public boolean isPreferenceControlledByPolicy(Preference preference) { +- return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED); +- } +- }); +- } +- @Override public void onStart() { -@@ -321,17 +283,9 @@ public class LanguageSettings extends ChromeBaseSettingsFragment + super.onStart(); +@@ -321,17 +194,9 @@ public class LanguageSettings extends ChromeBaseSettingsFragment // Get the actual default system language to set as target language. code = GlobalAppLocaleController.getInstance().getOriginalSystemLocale().getLanguage(); } @@ -180,6 +258,30 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse } /** +@@ -479,23 +344,5 @@ public class LanguageSettings extends ChromeBaseSettingsFragment + + private static void updateTranslateAdvancedSectionIndex( + boolean enabled, boolean refreshResult) { +- var indexData = SettingsIndexData.getInstance(); +- if (indexData == null) return; +- +- String prefFrag = LanguageSettings.class.getName(); +- if (enabled) { +- indexData.addEntryForKey( +- prefFrag, TARGET_LANGUAGE_KEY, R.string.languages_settings_target); +- indexData.addEntryForKey( +- prefFrag, ALWAYS_LANGUAGES_KEY, R.string.languages_settings_automatic); +- indexData.addEntryForKey( +- prefFrag, NEVER_LANGUAGES_KEY, R.string.languages_settings_dont_offer_langs); +- indexData.resolveIndex(); // Restores the header of the added entries. +- } else { +- indexData.removeEntryForKey(prefFrag, TARGET_LANGUAGE_KEY); +- indexData.removeEntryForKey(prefFrag, ALWAYS_LANGUAGES_KEY); +- indexData.removeEntryForKey(prefFrag, NEVER_LANGUAGES_KEY); +- } +- if (refreshResult) indexData.setRefreshResult(true); + } + } 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