From 5a30f6fe3a6476bafa7b2462328afa90f059fe06 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Mon, 29 Sep 2025 11:51:24 +0200 Subject: [PATCH] Patches for 141 (need works) --- .../Add-an-always-incognito-mode.patch | 253 ++++++------- build/patches/Add-cromite-flags-support.patch | 28 +- .../Add-option-to-force-tablet-UI.patch | 71 ++-- ...roid-fonts-fingerprinting-mitigation.patch | 159 ++++---- ...ioBuffer-AnalyserNode-fp-mitigations.patch | 58 +-- .../Content-settings-infrastructure.patch | 289 ++++++++------- build/patches/Disable-safety-check.patch | 103 ++---- .../Enable-native-Android-autofill.patch | 320 ++++++---------- ...le-search-engine-settings-desktop-ui.patch | 48 +-- .../Move-navigation-bar-to-bottom.patch | 350 +++++++++--------- ...ning-all-cookies-by-top-frame-domain.patch | 36 +- ...t-for-device-memory-and-cpu-recovery.patch | 45 +-- ...tings-for-cookies-javascript-and-ads.patch | 33 +- build/patches/kill-Auth.patch | 136 +------ 14 files changed, 838 insertions(+), 1091 deletions(-) diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index e769bce3..a546fdaf 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -28,11 +28,11 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 7 +- .../ChromeContextMenuPopulator.java | 6 +- - .../CustomTabActivityLifecycleUmaTracker.java | 39 ---- + .../CustomTabActivityLifecycleUmaTracker.java | 31 ---- .../CustomTabAppMenuPropertiesDelegate.java | 4 + .../CustomTabIntentDataProvider.java | 10 + .../browser/download/DownloadUtils.java | 13 +- - .../history/HistoryContentManager.java | 7 +- + .../history/HistoryContentManager.java | 9 +- .../browser/history/HistoryManager.java | 27 ++- .../chrome/browser/history/HistoryPage.java | 16 ++ .../native_page/NativePageFactory.java | 4 +- @@ -42,7 +42,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../HistoricalTabModelObserver.java | 5 +- .../tab/tab_restore/HistoricalTabSaver.java | 2 +- .../tab_restore/HistoricalTabSaverImpl.java | 17 +- - .../TabbedAppMenuPropertiesDelegate.java | 6 +- + .../TabbedAppMenuPropertiesDelegate.java | 4 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +- .../browser/tabmodel/ChromeTabCreator.java | 5 +- .../tabmodel/TabModelSelectorImpl.java | 3 + @@ -71,7 +71,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/ui/native_page/NativePage.java | 22 ++- .../browser/omnibox/LocationBarMediator.java | 8 + .../strings/android_chrome_strings.grd | 25 +++ - .../browser/toolbar/LocationBarModel.java | 5 +- + .../browser/toolbar/LocationBarModel.java | 4 +- chrome/browser/ui/messages/android/BUILD.gn | 1 + .../snackbar/INeedSnackbarManager.java | 28 +++ .../search_engine_tab_helper.cc | 6 + @@ -88,7 +88,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../add-an-always-incognito-mode.inc | 1 + .../add-an-always-incognito-mode.inc | 3 + .../add-an-always-incognito-mode.inc | 1 + - 69 files changed, 797 insertions(+), 111 deletions(-) + 69 files changed, 794 insertions(+), 105 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -101,8 +101,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -620,6 +620,7 @@ chrome_java_resources = [ - "java/res/xml/main_preferences_legacy.xml", +@@ -624,6 +624,7 @@ chrome_java_resources = [ + "java/res/xml/main_preferences.xml", "java/res/xml/manage_sync_preferences.xml", "java/res/xml/personalize_google_services_preferences.xml", + "java/res/xml/incognito_preferences.xml", @@ -120,8 +120,8 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -908,6 +909,7 @@ chrome_java_sources = [ - "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", +@@ -916,6 +917,7 @@ chrome_java_sources = [ + "java/src/org/chromium/chrome/browser/privacy/settings/PasswordEchoSettingHandlerFactory.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", + "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java", @@ -247,7 +247,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -74,6 +74,10 @@ import org.chromium.build.annotations.Nullable; +@@ -73,6 +73,10 @@ import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.UsedByReflection; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; @@ -258,7 +258,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.IntentHandler.ExternalAppId; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; -@@ -794,14 +798,19 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -803,14 +807,19 @@ public class ChromeTabbedActivity extends ChromeActivity { Profile profile = mTabModelSelector.getCurrentModel().getProfile(); // For saving non-incognito tab closures for Recent Tabs. @@ -285,9 +285,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct // Defer creation of this helper so it triggers after TabGroupModelFilter observers. mUndoRefocusHelper = new UndoRefocusHelper( -@@ -3137,7 +3146,7 @@ public class ChromeTabbedActivity extends ChromeActivity { - } +@@ -3228,7 +3237,7 @@ public class ChromeTabbedActivity extends ChromeActivity { + // We determine SupportedProfileType in onPreCreate(). // We determine the model as soon as possible so every systems get initialized coherently. - boolean startIncognito = + boolean startIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() || @@ -297,7 +297,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -95,6 +95,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH +@@ -98,6 +98,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.devtools.DevToolsWindowAndroid; @@ -305,7 +305,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.download.DownloadManagerService; -@@ -2000,6 +2001,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2028,6 +2029,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -318,16 +318,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -88,6 +88,8 @@ import java.lang.annotation.RetentionPolicy; - import java.util.Iterator; +@@ -91,6 +91,8 @@ import java.util.Iterator; import java.util.List; + import java.util.function.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu * items based on activity state. -@@ -606,8 +608,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties +@@ -620,8 +622,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !isNativePage && !isFileScheme && !isContentScheme @@ -342,7 +342,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java -@@ -41,6 +41,7 @@ import org.chromium.base.supplier.Supplier; +@@ -39,6 +39,7 @@ import org.chromium.base.shared_preferences.SharedPreferencesManager; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; @@ -350,7 +350,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ContextMenuItemType; -@@ -420,6 +421,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -425,6 +426,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { mShowEphemeralTabNewLabel = null; mCustomActionMap.clear(); @@ -372,21 +372,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java -@@ -63,45 +63,6 @@ public class CustomTabActivityLifecycleUmaTracker +@@ -62,37 +62,6 @@ public class CustomTabActivityLifecycleUmaTracker private boolean mIsInitialResume = true; private void recordIncognitoLaunchReason() { - // TODO(crbug.com/352525607): Separate Ephemeral and Incognito CCT metrics. -- @IntentHandler.IncognitoCctCallerId int incognitoCctCallerId; -- if (mIntentDataProvider.getCustomTabMode() == CustomTabProfileType.INCOGNITO) { -- incognitoCctCallerId = -- ((IncognitoCustomTabIntentDataProvider) mIntentDataProvider) -- .getFeatureIdForMetricsCollection(); -- } else { -- incognitoCctCallerId = -- ((EphemeralCustomTabIntentDataProvider) mIntentDataProvider) -- .getFeatureIdForMetricsCollection(); -- } +- /*@IncognitoCctCallerId*/ int incognitoCctCallerId = +- mIntentDataProvider.getFeatureIdForMetricsCollection(); - - RecordHistogram.recordEnumeratedHistogram( - "CustomTabs.IncognitoCctCallerId", @@ -421,7 +413,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -21,6 +21,7 @@ import org.chromium.base.supplier.Supplier; +@@ -20,6 +20,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -442,7 +434,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -101,6 +101,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -104,6 +104,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.net.NetId; @@ -452,7 +444,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -1260,6 +1263,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1263,6 +1266,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return getInitialActivityWidth() > 0; } @@ -488,8 +480,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo /** A class containing some utility static methods. */ @NullMarked public class DownloadUtils { -@@ -313,7 +318,13 @@ public class DownloadUtils { - public static boolean isAllowedToDownloadPage(Tab tab) { +@@ -314,7 +319,13 @@ public class DownloadUtils { + public static boolean isAllowedToDownloadPage(@Nullable Tab tab) { if (tab == null) return false; - if (tab.isIncognito() @@ -506,22 +498,24 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java -@@ -307,7 +307,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -308,8 +308,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.generateFooterItems(); // Listen to changes in sign in state. -- IdentityServicesProvider.get().getSigninManager(profile).addSignInStateObserver(this); +- assumeNonNull(IdentityServicesProvider.get().getSigninManager(profile)) +- .addSignInStateObserver(this); + // getSigninManager is null in incognito + if (IdentityServicesProvider.get().getSigninManager(profile) != null) + IdentityServicesProvider.get().getSigninManager(profile).addSignInStateObserver(this); // Create PrefChangeRegistrar to receive notifications on preference changes. mPrefChangeRegistrar = PrefServiceUtil.createFor(profile); -@@ -383,7 +385,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -386,8 +387,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.onDestroyed(); mLargeIconBridge.destroy(); mLargeIconBridge = null; -- IdentityServicesProvider.get().getSigninManager(mProfile).removeSignInStateObserver(this); +- assumeNonNull(IdentityServicesProvider.get().getSigninManager(mProfile)) +- .removeSignInStateObserver(this); + if (IdentityServicesProvider.get().getSigninManager(mProfile) != null) + IdentityServicesProvider.get().getSigninManager(mProfile).removeSignInStateObserver(this); mPrefChangeRegistrar.destroy(); @@ -530,9 +524,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java -@@ -57,6 +57,14 @@ import org.chromium.ui.base.Clipboard; - import java.util.List; +@@ -61,6 +61,14 @@ import java.util.List; import java.util.function.Function; + import java.util.function.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; +import org.chromium.chrome.browser.profiles.Profile; @@ -543,9 +537,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History +import org.chromium.chrome.browser.preferences.Pref; + /** Combines and manages the different UI components of browsing history. */ + @NullMarked public class HistoryManager - implements OnMenuItemClickListener, -@@ -162,7 +170,7 @@ public class HistoryManager +@@ -166,7 +174,7 @@ public class HistoryManager mUmaRecorder.recordOpenHistory(); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -554,7 +548,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -415,9 +423,22 @@ public class HistoryManager +@@ -451,9 +459,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -578,7 +572,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // If Incognito placeholder is shown no need to call any destroy method. return; } -@@ -477,7 +498,7 @@ public class HistoryManager +@@ -514,7 +535,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -590,9 +584,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java -@@ -17,6 +17,14 @@ import org.chromium.chrome.browser.ui.native_page.NativePageHost; - import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; - import org.chromium.components.embedder_support.util.UrlConstants; +@@ -20,6 +20,14 @@ import org.chromium.components.embedder_support.util.UrlConstants; + + import java.util.function.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; +import org.chromium.chrome.browser.profiles.Profile; @@ -603,9 +597,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History +import org.chromium.chrome.browser.preferences.Pref; + /** Native page for managing browsing history. */ + @NullMarked public class HistoryPage extends BasicNativePage { - private HistoryManager mHistoryManager; -@@ -45,6 +53,14 @@ public class HistoryPage extends BasicNativePage { +@@ -49,6 +57,14 @@ public class HistoryPage extends BasicNativePage { String url) { super(host); @@ -618,21 +612,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History + } + Uri uri = Uri.parse(url); - assert uri.getHost().equals(UrlConstants.HISTORY_HOST); + assert UrlConstants.HISTORY_HOST.equals(uri.getHost()); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -19,6 +19,7 @@ import org.chromium.base.supplier.ObservableSupplier; - import org.chromium.base.supplier.OneshotSupplier; - import org.chromium.base.supplier.Supplier; +@@ -20,6 +20,7 @@ import org.chromium.base.supplier.OneshotSupplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; -@@ -371,7 +372,8 @@ public class NativePageFactory { - String url, NativePage candidatePage, Tab tab, boolean isIncognito, PdfInfo pdfInfo) { +@@ -379,7 +380,8 @@ public class NativePageFactory { + @Nullable PdfInfo pdfInfo) { NativePage page; - switch (NativePage.nativePageType(url, candidatePage, isIncognito, pdfInfo != null)) { @@ -876,7 +870,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -49,6 +49,7 @@ import org.chromium.chrome.browser.sync.settings.AccountManagementFragment; +@@ -50,6 +50,7 @@ import org.chromium.chrome.browser.sync.settings.AccountManagementFragment; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; @@ -897,9 +891,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java -@@ -32,6 +32,8 @@ import java.util.HashMap; - import java.util.List; +@@ -32,6 +32,8 @@ import java.util.List; import java.util.Set; + import java.util.function.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + @@ -933,9 +927,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java -@@ -30,6 +30,8 @@ import java.util.Arrays; - import java.util.Collections; +@@ -30,6 +30,8 @@ import java.util.Collections; import java.util.List; + import java.util.function.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + @@ -991,7 +985,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore // Check the secondary tab model to see if the tab was moved instead of deleted. if (tabIdExistsInSecondaryModel(tab.getId())) return false; -@@ -293,7 +296,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -294,7 +297,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { @NativeMethods interface Natives { @@ -1003,30 +997,28 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java -@@ -27,6 +27,7 @@ import org.chromium.base.supplier.Supplier; - import org.chromium.build.annotations.Contract; +@@ -27,6 +27,7 @@ import org.chromium.build.annotations.Contract; + import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ai.AiAssistantService; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; -@@ -220,7 +221,10 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm - } +@@ -221,7 +222,8 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm - // New Tab -- modelList.add(buildNewTabItem()); + // When the feature is enabled, show either "New Incognito tab" in incognito mode + // or "New tab" in normal mode. When the feature is disabled, show both. +- if (!IncognitoUtils.shouldOpenIncognitoAsWindow() || !isIncognitoShowing()) { + boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -+ if (!always_incognito) { -+ modelList.add(buildNewTabItem()); -+ } - - // New Incognito Tab - modelList.add(buildNewIncognitoTabItem()); ++ if (!always_incognito || !IncognitoUtils.shouldOpenIncognitoAsWindow() || !isIncognitoShowing()) { + modelList.add(buildNewTabItem()); + } + if (!IncognitoUtils.shouldOpenIncognitoAsWindow() || isIncognitoShowing()) { 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 -@@ -212,6 +212,8 @@ import org.chromium.content_public.common.ContentSwitches; +@@ -210,6 +210,8 @@ import org.chromium.content_public.common.ContentSwitches; import org.chromium.ui.UiUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.DeviceFormFactor; @@ -1035,7 +1027,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.display.DisplayUtil; -@@ -1247,7 +1249,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1270,7 +1272,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1047,9 +1039,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -53,6 +53,10 @@ import org.chromium.ui.base.PageTransition; - import org.chromium.ui.base.WindowAndroid; - import org.chromium.url.GURL; +@@ -55,6 +55,10 @@ import org.chromium.url.GURL; + import java.util.Collections; + import java.util.function.Supplier; +import org.chromium.base.ContextUtils; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; @@ -1058,7 +1050,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome /** This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ @NullMarked public class ChromeTabCreator extends TabCreator -@@ -580,7 +584,6 @@ public class ChromeTabCreator extends TabCreator +@@ -584,7 +588,6 @@ public class ChromeTabCreator extends TabCreator // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. public @Nullable Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1069,15 +1061,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java -@@ -17,6 +17,7 @@ import org.chromium.build.annotations.EnsuresNonNull; - import org.chromium.build.annotations.Initializer; +@@ -20,6 +20,7 @@ import org.chromium.build.annotations.Initializer; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.browser.ntp.RecentlyClosedBridge; -@@ -127,6 +128,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod + import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; +@@ -139,6 +140,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ProfileProvider profileProvider = mProfileProviderSupplier.get(); assert profileProvider != null; @@ -1115,7 +1107,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -50,6 +50,7 @@ import org.chromium.base.supplier.Supplier; +@@ -49,6 +49,7 @@ import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -1123,12 +1115,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -859,7 +860,7 @@ public class ToolbarManager - TraceEvent.end("isOfflinePage"); +@@ -866,7 +867,7 @@ public class ToolbarManager return ret; } -- }); -+ }, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); + }, +- mToolbarPositionSupplier); ++ mToolbarPositionSupplier, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1142,9 +1134,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** Stores info about a web app. */ + @NullMarked public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider { - private final Drawable mCloseButtonIcon; -@@ -46,6 +48,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -47,6 +49,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider private final ColorProviderImpl mDarkColorProvider; private @DisplayMode.EnumType int mResolvedDisplayMode = DisplayMode.UNDEFINED; @@ -1153,7 +1145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI /** Returns the toolbar color to use if a custom color is not specified by the webapp. */ public static int getDefaultToolbarColor() { return Color.WHITE; -@@ -81,6 +85,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -82,6 +86,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider mWebappExtras = webappExtras; mWebApkExtras = webApkExtras; mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP; @@ -1164,7 +1156,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI } @Override -@@ -176,6 +184,13 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -177,6 +185,13 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider return mWebApkExtras; } @@ -1229,7 +1221,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and DCHECK_EQ(tab_group_ids.size(), group_titles.size()); DCHECK_EQ(tab_group_ids.size(), group_colors.size()); DCHECK_EQ(tab_group_ids.size(), tab_group_ids.size()); -@@ -291,11 +302,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( +@@ -292,11 +303,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( JNIEnv* env, const JavaParamRef& jtab_android, const JavaParamRef& state, @@ -1247,7 +1239,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -427,6 +427,15 @@ ChromeAutocompleteProviderClient::GetAimEligibilityService() const { +@@ -460,6 +460,15 @@ ChromeAutocompleteProviderClient::GetAimEligibilityService() const { return AimEligibilityServiceFactory::GetForProfile(profile_); } @@ -1374,7 +1366,7 @@ diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.c diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/history/history_tab_helper.cc --- a/chrome/browser/history/history_tab_helper.cc +++ b/chrome/browser/history/history_tab_helper.cc -@@ -45,6 +45,9 @@ +@@ -48,6 +48,9 @@ #include "components/feed/core/v2/public/feed_api.h" // nogncheck #include "components/feed/core/v2/public/feed_service.h" // nogncheck #include "content/public/browser/web_contents.h" @@ -1384,7 +1376,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -@@ -598,6 +601,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -612,6 +615,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -1398,7 +1390,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return nullptr; -@@ -605,6 +615,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -619,6 +629,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -1482,7 +1474,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrom diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc b/chrome/browser/offline_pages/android/offline_page_model_factory.cc --- a/chrome/browser/offline_pages/android/offline_page_model_factory.cc +++ b/chrome/browser/offline_pages/android/offline_page_model_factory.cc -@@ -24,6 +24,9 @@ +@@ -23,6 +23,9 @@ #include "components/keyed_service/core/simple_dependency_manager.h" #include "components/offline_pages/core/model/offline_page_model_taskified.h" #include "components/offline_pages/core/offline_page_metadata_store.h" @@ -1492,7 +1484,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc namespace offline_pages { -@@ -55,13 +58,15 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -54,13 +57,15 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( scoped_refptr background_task_runner = base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}); @@ -1510,7 +1502,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc // If base::PathService::Get returns false, the temporary_archives_dir will be // empty, and no temporary pages will be saved during this chrome lifecycle. base::FilePath temporary_archives_dir; -@@ -70,7 +75,6 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -69,7 +74,6 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( temporary_archives_dir.Append(chrome::kOfflinePageArchivesDirname); } @@ -1518,7 +1510,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc auto archive_manager = std::make_unique( temporary_archives_dir, persistent_archives_dir, DownloadPrefs::GetDefaultDownloadDirectory(), background_task_runner, -@@ -88,4 +92,14 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -87,4 +91,14 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( return model; } @@ -1755,7 +1747,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" #include "chrome/browser/android/oom_intervention/oom_intervention_decider.h" #include "chrome/browser/android/preferences/browser_prefs_android.h" -@@ -2061,6 +2062,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2138,6 +2139,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1860,12 +1852,12 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -209,11 +212,12 @@ public interface NativePage { - */ - // TODO(crbug.com/40549331) - Convert to using GURL. - static @NativePageType int nativePageType( -- String url, NativePage candidatePage, boolean isIncognito, boolean hasPdfDownload) { -+ String url, NativePage candidatePage, boolean isIncognito, boolean hasPdfDownload, +@@ -212,11 +215,12 @@ public interface NativePage { + String url, + @Nullable NativePage candidatePage, + boolean isIncognito, +- boolean hasPdfDownload) { ++ boolean hasPdfDownload, + boolean isAlwaysIncognito) { if (url == null) return NativePageType.NONE; @@ -1875,7 +1867,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -227,7 +231,8 @@ public interface NativePage { +@@ -230,7 +234,8 @@ public interface NativePage { GURL url, @Nullable NativePage candidatePage, boolean isIncognito, @@ -1885,7 +1877,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ if (hasPdfDownload) { // For navigation with associated pdf download (e.g. open a pdf link), pdf page should // be created. -@@ -245,7 +250,7 @@ public interface NativePage { +@@ -248,7 +253,7 @@ public interface NativePage { // created after the pdf document is re-downloaded in other parts of the code. return NativePageType.NONE; } else { @@ -1894,7 +1886,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } } -@@ -257,7 +262,7 @@ public interface NativePage { +@@ -260,7 +265,7 @@ public interface NativePage { * which do not have chrome or chrome-native scheme. */ private static @NativePageType int chromePageType( @@ -1903,7 +1895,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ String host = url.getHost(); String scheme = url.getScheme(); if (!UrlConstants.CHROME_NATIVE_SCHEME.equals(scheme) -@@ -277,7 +282,8 @@ public interface NativePage { +@@ -280,7 +285,8 @@ public interface NativePage { return NativePageType.DOWNLOADS; } else if (UrlConstants.HISTORY_HOST.equals(host)) { return NativePageType.HISTORY; @@ -1916,8 +1908,8 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -92,6 +92,11 @@ import org.chromium.ui.base.WindowAndroid; - import org.chromium.ui.interpolators.Interpolators; +@@ -97,6 +97,11 @@ import org.chromium.ui.interpolators.Interpolators; + import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; +import org.chromium.components.user_prefs.UserPrefs; @@ -1928,7 +1920,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; -@@ -419,6 +424,9 @@ class LocationBarMediator +@@ -437,6 +442,9 @@ class LocationBarMediator if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) return; Tab tab = mLocationBarDataProvider.getTab(); if (tab == null) return; @@ -1941,7 +1933,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -6675,6 +6675,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6627,6 +6627,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -1976,7 +1968,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java -@@ -165,6 +165,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -168,6 +168,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro protected GURL mVisibleGurl = GURL.emptyGURL(); protected String mFormattedFullUrl; protected String mUrlForDisplay; @@ -1984,14 +1976,13 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow // notifyUrlChanged and notifySecurityStateChanged are usually called 3 times across a same // document navigation. The first call is usually necessary, which updates the UrlBar to reflect -@@ -188,7 +189,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro - Context context, +@@ -192,7 +193,8 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro NewTabPageDelegate newTabPageDelegate, UrlFormatter urlFormatter, -- OfflineStatus offlineStatus) { -+ OfflineStatus offlineStatus, + OfflineStatus offlineStatus, +- ObservableSupplier<@ControlsPosition Integer> toolbarPositionSupplier) { ++ ObservableSupplier<@ControlsPosition Integer> toolbarPositionSupplier, + boolean isAlwaysIncognito) { -+ mIsAlwaysIncognito = isAlwaysIncognito; // (uazo) to do, check mContext = context; mNtpDelegate = newTabPageDelegate; mUrlFormatter = urlFormatter; @@ -2065,7 +2056,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -4108,6 +4108,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4095,6 +4095,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2131,7 +2122,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc --- a/components/content_settings/core/browser/host_content_settings_map.cc +++ b/components/content_settings/core/browser/host_content_settings_map.cc -@@ -287,6 +287,7 @@ struct ContentSettingEntry { +@@ -288,6 +288,7 @@ struct ContentSettingEntry { HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, bool is_off_the_record, @@ -2139,7 +2130,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics) -@@ -296,6 +297,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -297,6 +298,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, #endif prefs_(prefs), is_off_the_record_(is_off_the_record), @@ -2147,7 +2138,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. store_last_modified_(store_last_modified), allow_invalid_secondary_pattern_for_testing_(false), clock_(base::DefaultClock::GetInstance()) { -@@ -309,7 +311,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -310,7 +312,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, policy_provider->AddObserver(this); auto pref_provider_ptr = std::make_unique( @@ -2167,7 +2158,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics); -@@ -544,6 +545,8 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -551,6 +552,8 @@ class HostContentSettingsMap : public content_settings::Observer, // Whether this settings map is for an incognito or guest session. bool is_off_the_record_; @@ -2179,7 +2170,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/components/omnibox/browser/autocomplete_provider_client.cc --- a/components/omnibox/browser/autocomplete_provider_client.cc +++ b/components/omnibox/browser/autocomplete_provider_client.cc -@@ -66,3 +66,7 @@ base::WeakPtr +@@ -74,3 +74,7 @@ base::WeakPtr AutocompleteProviderClient::GetWeakPtr() { return nullptr; } @@ -2213,7 +2204,7 @@ diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omn diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc --- a/components/omnibox/browser/search_provider.cc +++ b/components/omnibox/browser/search_provider.cc -@@ -916,7 +916,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( +@@ -921,7 +921,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( // is required. // Request for suggestions in OTR contexts is not allowed; except for the Lens // searchboxes. diff --git a/build/patches/Add-cromite-flags-support.patch b/build/patches/Add-cromite-flags-support.patch index d012f919..4699cfae 100644 --- a/build/patches/Add-cromite-flags-support.patch +++ b/build/patches/Add-cromite-flags-support.patch @@ -17,7 +17,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html base/android/feature_map.cc | 5 + .../base/cached_flags/ValuesReturned.java | 2 +- base/feature_list.cc | 76 ++++++++ - base/feature_list.h | 80 +++++++- + base/feature_list.h | 98 +++++++++- build/android/gyp/java_cpp_features.py | 17 ++ chrome/android/java/res/values/values.xml | 3 + .../java/res/xml/privacy_preferences.xml | 4 + @@ -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, 832 insertions(+), 32 deletions(-) + 93 files changed, 850 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 @@ -326,7 +326,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h // Some characters are not allowed to appear in feature names or the // associated field trial names, as they are used as special characters for // command-line serialization. This function checks that the strings are ASCII -@@ -815,4 +825,70 @@ class BASE_EXPORT FeatureList { +@@ -815,4 +825,88 @@ class BASE_EXPORT FeatureList { } // namespace base @@ -388,13 +388,31 @@ diff --git a/base/feature_list.h b/base/feature_list.h + _Pragma("clang diagnostic pop") \ + static_assert(true, "") /* for a semicolon requirement */ + -+#define BASE_FEATURE_DISABLED(feature, name, default_state) \ ++#define BASE_FEATURE_DISABLED_3_ARGS(feature, name, default_state) \ + BASE_FEATURE(feature, name, default_state); \ + static_assert(default_state == base::FEATURE_DISABLED_BY_DEFAULT, "Check default state") + -+#define BASE_FEATURE_ENABLED(feature, name, default_state) \ ++#define BASE_FEATURE_DISABLED_2_ARGS(name, default_state) \ ++ BASE_FEATURE(name, default_state); \ ++ static_assert(default_state == base::FEATURE_DISABLED_BY_DEFAULT, "Check default state") ++ ++#define GET_BASE_FEATURE_DISABLED_MACRO(_1, _2, _3, NAME, ...) NAME ++#define BASE_FEATURE_DISABLED(...) \ ++ GET_BASE_FEATURE_DISABLED_MACRO(__VA_ARGS__, BASE_FEATURE_DISABLED_3_ARGS, \ ++ BASE_FEATURE_DISABLED_2_ARGS)(__VA_ARGS__) ++ ++#define BASE_FEATURE_ENABLED_3_ARGS(feature, name, default_state) \ + BASE_FEATURE(feature, name, default_state); \ + static_assert(default_state == base::FEATURE_ENABLED_BY_DEFAULT, "Check default state") ++ ++#define BASE_FEATURE_ENABLED_2_ARGS(name, default_state) \ ++ BASE_FEATURE(name, default_state); \ ++ static_assert(default_state == base::FEATURE_ENABLED_BY_DEFAULT, "Check default state") ++ ++#define GET_BASE_FEATURE_ENABLED_MACRO(_1, _2, _3, NAME, ...) NAME ++#define BASE_FEATURE_ENABLED(...) \ ++ GET_BASE_FEATURE_ENABLED_MACRO(__VA_ARGS__, BASE_FEATURE_ENABLED_3_ARGS, \ ++ BASE_FEATURE_ENABLED_2_ARGS)(__VA_ARGS__) + #endif // BASE_FEATURE_LIST_H_ diff --git a/build/android/gyp/java_cpp_features.py b/build/android/gyp/java_cpp_features.py diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index 77221faa..8976f1cf 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -99,15 +99,15 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java -@@ -63,6 +63,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; +@@ -62,6 +62,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerCreator; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeFieldTrialImpl; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; +import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.chrome.browser.ui.edge_to_edge.SimpleEdgeToEdgeController; - import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeManager; - import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; -@@ -145,6 +146,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity + import org.chromium.components.browser_ui.styles.SemanticColorUtils; + import org.chromium.components.browser_ui.util.AutomotiveUtils; +@@ -142,6 +143,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -119,15 +119,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java -@@ -69,6 +69,7 @@ import org.chromium.content_public.browser.WebContents; - import org.chromium.content_public.browser.WebContentsObserver; - import org.chromium.net.NetId; +@@ -63,6 +63,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; + import org.chromium.components.embedder_support.util.UrlConstants; + import org.chromium.content_public.browser.WebContents; import org.chromium.ui.LayoutInflaterUtils; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayUtil; import org.chromium.url.GURL; -@@ -491,7 +492,9 @@ public class WarmupManager { +@@ -472,7 +473,9 @@ public class WarmupManager { ControlContainer controlContainer = mainView.findViewById(R.id.control_container); if (toolbarId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -170,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -791,7 +791,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -803,7 +803,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity // Inflate the correct toolbar layout for the device. int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -184,7 +184,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -127,6 +127,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; +@@ -130,6 +130,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; import org.chromium.components.tab_group_sync.TriggerSource; import org.chromium.components.tab_groups.TabGroupColorId; import org.chromium.ui.accessibility.AccessibilityState; @@ -192,7 +192,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.util.ColorUtils; -@@ -4955,8 +4956,13 @@ public class StripLayoutHelper +@@ -5147,8 +5148,13 @@ public class StripLayoutHelper mCloseButtonMenu.setAnchorView(tabView); // 3. Set the vertical offset to align the close button menu with bottom of the tab strip int tabHeight = mManagerHost.getHeight(); @@ -219,7 +219,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; -@@ -495,7 +496,10 @@ public class StripLayoutHelperManager +@@ -498,7 +499,10 @@ public class StripLayoutHelperManager mIsLayoutOptimizationsEnabled = ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled( /* isTablet= */ true, DisplayUtil.isContextInDefaultDisplay(mContext)); @@ -234,7 +234,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java -@@ -111,6 +111,14 @@ public class TabStripSceneLayer extends SceneOverlayLayer { +@@ -120,6 +120,14 @@ public class TabStripSceneLayer extends SceneOverlayLayer { if (mNativePtr == 0) return; final boolean visible = yOffset > -layoutHelper.getHeight(); @@ -252,15 +252,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java -@@ -16,6 +16,7 @@ import org.chromium.base.library_loader.LibraryProcessType; - import org.chromium.base.task.ChainedTasks; - import org.chromium.base.task.TaskTraits; +@@ -18,6 +18,7 @@ import org.chromium.base.task.TaskTraits; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.chrome.browser.profiles.ProfileManager; import org.chromium.chrome.browser.signin.SigninCheckerProvider; import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory; -@@ -106,6 +107,7 @@ public class ChromeBrowserInitializer { +@@ -109,6 +110,7 @@ public class ChromeBrowserInitializer { public void handlePreNativeStartupAndLoadLibraries(final BrowserParts parts) { ThreadUtils.checkUiThread(); if (parts.isActivityFinishingOrDestroyed()) return; @@ -271,7 +271,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrow diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -747,7 +747,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -762,7 +762,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @Override public int getControlContainerHeightResource() { @@ -285,7 +285,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/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 -@@ -108,6 +108,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; +@@ -107,6 +107,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.pdf.PdfPage; @@ -319,7 +319,7 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -317,6 +317,7 @@ public final class ChromePreferenceKeys { +@@ -321,6 +321,7 @@ public final class ChromePreferenceKeys { /** Whether the app-specific history info text was already seen by users. */ public static final String HISTORY_APP_SPECIFIC_INFO_SEEN = "Chrome.History.AppSpecificInfoSeen"; @@ -371,8 +371,8 @@ diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/c --- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java +++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java @@ -42,6 +42,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa - import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; import org.chromium.ui.display.DisplayUtil; + import org.chromium.ui.edge_to_edge.EdgeToEdgeStateProvider; import org.chromium.ui.insets.CaptionBarInsetsRectProvider; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.insets.InsetObserver; @@ -389,7 +389,7 @@ diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/c diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -833,7 +833,7 @@ public class LocationBarCoordinator +@@ -862,7 +862,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -401,7 +401,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1531,6 +1531,13 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1483,6 +1483,13 @@ Your Google account may have other forms of browsing history like searches and a Privacy guide explanation closed @@ -422,24 +422,25 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/control_container android:id="@+id/control_container" android:layout_width="match_parent" android:layout_height="wrap_content" -- android:minHeight="@dimen/control_container_height" > -+ android:minHeight="@dimen/control_container_height_cromite" > +- android:minHeight="@dimen/control_container_height"> ++ android:minHeight="@dimen/control_container_height_cromite"> - + app:layout_anchorGravity="bottom" +- /> + android:layout_marginTop="@dimen/control_container_height_cromite" /> 2dp 64dp - + 72dp diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java -@@ -27,7 +27,7 @@ public interface ControlContainer { +@@ -26,7 +26,7 @@ public interface ControlContainer { * * @param toolbarLayoutId The ID of the toolbar layout to use. */ @@ -515,7 +516,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PorterDuff; -@@ -163,8 +164,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -165,8 +166,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout @Override @Initializer @@ -545,7 +546,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java -@@ -66,6 +66,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; +@@ -64,6 +64,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; import org.chromium.components.feature_engagement.Tracker; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.util.MotionEventUtils; @@ -553,7 +554,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.ui.util.TokenHolder; import org.chromium.url.GURL; -@@ -594,7 +595,9 @@ public abstract class ToolbarLayout extends FrameLayout +@@ -581,7 +582,9 @@ public abstract class ToolbarLayout extends FrameLayout * not have a tab strip. */ protected int getTabStripHeightFromResource() { diff --git a/build/patches/Android-fonts-fingerprinting-mitigation.patch b/build/patches/Android-fonts-fingerprinting-mitigation.patch index 8c0991d0..10c3c43d 100644 --- a/build/patches/Android-fonts-fingerprinting-mitigation.patch +++ b/build/patches/Android-fonts-fingerprinting-mitigation.patch @@ -38,11 +38,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../skia/src/ports/SkFontConfigInterface.cpp | 4 + .../ports/SkFontConfigInterface_direct.cpp | 5 + .../src/ports/SkFontConfigInterface_direct.h | 1 + - .../skia/src/ports/SkFontMgr_android.cpp | 279 ++- + .../skia/src/ports/SkFontMgr_android.cpp | 277 ++- .../skia/src/ports/SkFontMgr_android_data.cpp | 1640 +++++++++++++++++ .../src/ports/SkFontMgr_android_parser.cpp | 49 +- .../skia/src/ports/SkFontMgr_android_parser.h | 5 +- - 36 files changed, 2415 insertions(+), 76 deletions(-) + 36 files changed, 2414 insertions(+), 75 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Android-fonts-fingerprinting-mitigation.grdp create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.cc create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.h @@ -54,7 +54,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java -@@ -1007,6 +1007,9 @@ public final class ProductionSupportedFlagList { +@@ -1009,6 +1009,9 @@ public final class ProductionSupportedFlagList { "Hides user preference on the system keyboard by setting the standard " + "eng layout and removing the layout information from the " + "javascript keyboard events."), @@ -106,7 +106,7 @@ diff --git a/chrome/android/java/res/xml/developer_preferences.xml b/chrome/andr diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -7951,6 +7951,13 @@ static_library("browser") { +@@ -8005,6 +8005,13 @@ static_library("browser") { } } @@ -161,7 +161,7 @@ new file mode 100644 diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -258,6 +258,10 @@ static_library("renderer") { +@@ -264,6 +264,10 @@ static_library("renderer") { deps += [ "//components/strings" ] } @@ -615,7 +615,7 @@ diff --git a/components/services/font/public/mojom/font_service.mojom b/componen diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn -@@ -2600,6 +2600,17 @@ source_set("browser") { +@@ -2614,6 +2614,17 @@ source_set("browser") { ] } @@ -633,7 +633,7 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn if (is_linux || is_chromeos) { sources -= [ "file_system_access/file_path_watcher/file_path_watcher_stub.cc" ] -@@ -2645,6 +2656,13 @@ source_set("browser") { +@@ -2659,6 +2670,13 @@ source_set("browser") { ] } @@ -696,7 +696,7 @@ diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn -@@ -346,6 +346,10 @@ target(link_target_type, "renderer") { +@@ -347,6 +347,10 @@ target(link_target_type, "renderer") { deps += [ "//services/screen_ai/public/mojom" ] } @@ -734,7 +734,7 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer using blink::Platform; using blink::WebAudioDevice; using blink::WebAudioLatencyHint; -@@ -180,6 +197,37 @@ gpu::ContextType ToGpuContextType(blink::Platform::ContextType type) { +@@ -174,6 +191,37 @@ gpu::ContextType ToGpuContextType(blink::Platform::ContextType type) { NOTREACHED(); } @@ -772,7 +772,7 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer } // namespace //------------------------------------------------------------------------------ -@@ -193,18 +241,21 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( +@@ -187,18 +235,21 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( is_locked_to_site_(false), main_thread_scheduler_(main_thread_scheduler), next_frame_sink_id_(uint32_t{std::numeric_limits::max()} + 1) { @@ -838,7 +838,7 @@ new file mode 100644 diff --git a/skia/BUILD.gn b/skia/BUILD.gn --- a/skia/BUILD.gn +++ b/skia/BUILD.gn -@@ -463,6 +463,18 @@ component("skia") { +@@ -467,6 +467,18 @@ component("skia") { sources += skia_ports_fci_sources } @@ -1257,7 +1257,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia : fScanner(std::move(scanner)) { + custom_ = std::move(custom_in); + auto* custom = custom_.get(); - SkTDArray families; + std::vector> families; if (custom && SkFontMgr_Android_CustomFonts::kPreferSystem != custom->fSystemFontUse) { SkString base(custom->fBasePath); SkFontMgr_Android_Parser::GetCustomFontFamilies( @@ -1278,22 +1278,24 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia } this->buildNameToFamilyMap(families, custom ? custom->fIsolated : false); this->findDefaultStyleSet(); -@@ -309,33 +449,53 @@ protected: - return sset->matchStyle(style); +@@ -306,12 +446,12 @@ protected: } + enum class NameType { Self, Fallback }; - static sk_sp find_family_style_character( + sk_sp find_family_style_character( const SkString& familyName, - const TArray& fallbackNameToFamilyMap, + const TArray& nameToFamilyMap, + NameType nameType, const SkFontStyle& style, bool elegant, - const SkString& langTag, SkUnichar character) + const SkString& langTag, SkUnichar character) const { - for (int i = 0; i < fallbackNameToFamilyMap.size(); ++i) { - SkFontStyleSet_Android* family = fallbackNameToFamilyMap[i].styleSet; - if (familyName != family->fFallbackFor) { - continue; + for (auto&& nameToFamily : nameToFamilyMap) { + SkFontStyleSet_Android* family = nameToFamily.styleSet; +@@ -322,22 +462,42 @@ protected: + continue; + } } - sk_sp face(family->matchAStyle(style)); + if (custom_) { @@ -1334,38 +1336,29 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia + { + continue; + } -+ -+ if (SkToBool(face->fVariantStyle & kElegant_FontVariant) != elegant) { -+ continue; -+ } - if (face->unicharToGlyph(character) != 0) { - return face; ++ if (SkToBool(face->fVariantStyle & kElegant_FontVariant) != elegant) { ++ continue; ++ } ++ + if (face->unicharToGlyph(character) != 0) { + return face; + } } } return nullptr; -@@ -358,7 +518,7 @@ protected: - for (int bcp47Index = bcp47Count; bcp47Index --> 0;) { - SkLanguage lang(bcp47[bcp47Index]); - while (!lang.getTag().isEmpty()) { -- sk_sp matchingTypeface = -+ sk_sp matchingTypeface = - find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, - style, SkToBool(elegant), - lang.getTag(), character); -@@ -369,7 +529,7 @@ protected: - lang = lang.getParent(); - } - } -- sk_sp matchingTypeface = -+ sk_sp matchingTypeface = - find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, - style, SkToBool(elegant), - SkString(), character); -@@ -420,6 +580,7 @@ protected: +@@ -352,7 +512,7 @@ protected: + // The variant 'default' means 'compact and elegant'. + // As a result, it is not possible to know the variant context from the font alone. + // TODO: add 'is_elegant' and 'is_compact' bits to 'style' request. +- sk_sp matchingTypeface; ++ sk_sp matchingTypeface; + SkString familyNameString(familyName); + for (const SkString& currentFamilyName : { familyNameString, SkString() }) { + // The first time match anything elegant, second time anything not elegant. +@@ -432,6 +592,7 @@ protected: private: std::unique_ptr fScanner; @@ -1373,7 +1366,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia TArray> fStyleSets; sk_sp fDefaultStyleSet; -@@ -441,7 +602,7 @@ private: +@@ -453,7 +614,7 @@ private: } sk_sp newSet = @@ -1382,7 +1375,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia if (0 == newSet->count()) { return; } -@@ -486,7 +647,11 @@ static char const * const gSystemFontUseStrings[] = { +@@ -499,7 +660,11 @@ static char const * const gSystemFontUseStrings[] = { } // namespace @@ -1395,7 +1388,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia if (custom) { SkASSERT(0 <= custom->fSystemFontUse); SkASSERT(custom->fSystemFontUse < std::size(gSystemFontUseStrings)); -@@ -496,5 +661,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust +@@ -509,5 +674,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust custom->fFontsXml, custom->fFallbackFontsXml); } @@ -3050,10 +3043,10 @@ new file mode 100644 diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.cpp b/third_party/skia/src/ports/SkFontMgr_android_parser.cpp --- a/third_party/skia/src/ports/SkFontMgr_android_parser.cpp +++ b/third_party/skia/src/ports/SkFontMgr_android_parser.cpp -@@ -652,14 +652,27 @@ static const XML_Memory_Handling_Suite sk_XML_alloc = { - * families array. Returns the version of the file, negative if the file does not exist. +@@ -654,14 +654,27 @@ static const XML_Memory_Handling_Suite sk_XML_alloc = { */ - static int parse_config_file(const char* filename, SkTDArray& families, + static int parse_config_file(const char* filename, + std::vector>& families, - const SkString& basePath, bool isFallback) + const SkString& basePath, bool isFallback, + const SkFontMgr_Android_CustomFonts* custom = nullptr) @@ -3084,7 +3077,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.cpp b/third_par return -1; } -@@ -691,8 +704,8 @@ static int parse_config_file(const char* filename, SkTDArray& famil +@@ -693,8 +706,8 @@ static int parse_config_file(const char* filename, SkDebugf(SK_FONTMGR_ANDROID_PARSER_PREFIX "could not buffer enough to continue\n"); return -1; } @@ -3095,57 +3088,59 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.cpp b/third_par XML_Status status = XML_ParseBuffer(parser, len, done); if (XML_STATUS_ERROR == status) { XML_Error error = XML_GetErrorCode(parser); -@@ -765,8 +778,10 @@ static void append_fallback_font_families_for_locale(SkTDArray& fal - } +@@ -768,8 +781,10 @@ static void append_fallback_font_families_for_locale( - static void append_system_fallback_font_families(SkTDArray& fallbackFonts, -- const SkString& basePath) -+ const SkString& basePath, + static void append_system_fallback_font_families( + std::vector>& fallbackFonts, +- const SkString& basePath) ++ const SkString& basePath, + const SkFontMgr_Android_CustomFonts* custom) { + if (custom) return; parse_config_file(FALLBACK_FONTS_FILE, fallbackFonts, basePath, true); append_fallback_font_families_for_locale(fallbackFonts, LOCALE_FALLBACK_FONTS_SYSTEM_DIR, -@@ -774,8 +789,10 @@ static void append_system_fallback_font_families(SkTDArray& fallbac - } +@@ -778,8 +793,10 @@ static void append_system_fallback_font_families( - static void mixin_vendor_fallback_font_families(SkTDArray& fallbackFonts, -- const SkString& basePath) -+ const SkString& basePath, + static void mixin_vendor_fallback_font_families( + std::vector>& fallbackFonts, +- const SkString& basePath) ++ const SkString& basePath, + const SkFontMgr_Android_CustomFonts* custom) { + if (custom) return; - SkTDArray vendorFonts; + std::vector> vendorFonts; parse_config_file(VENDOR_FONTS_FILE, vendorFonts, basePath, true); append_fallback_font_families_for_locale(vendorFonts, -@@ -806,7 +823,8 @@ static void mixin_vendor_fallback_font_families(SkTDArray& fallback - } +@@ -811,7 +828,8 @@ static void mixin_vendor_fallback_font_families( } --void SkFontMgr_Android_Parser::GetSystemFontFamilies(SkTDArray& fontFamilies) { -+void SkFontMgr_Android_Parser::GetSystemFontFamilies(SkTDArray& fontFamilies, -+ const SkFontMgr_Android_CustomFonts* custom) { + void SkFontMgr_Android_Parser::GetSystemFontFamilies( +- std::vector>& fontFamilies) ++ std::vector>& fontFamilies, ++ const SkFontMgr_Android_CustomFonts* custom) + { // Version 21 of the system font configuration does not need any fallback configuration files. SkString basePath(getenv("ANDROID_ROOT")); - basePath.append(SK_FONT_FILE_PREFIX, sizeof(SK_FONT_FILE_PREFIX) - 1); -@@ -817,22 +835,23 @@ void SkFontMgr_Android_Parser::GetSystemFontFamilies(SkTDArray& fon +@@ -823,8 +841,8 @@ void SkFontMgr_Android_Parser::GetSystemFontFamilies( // Append all the fallback fonts to system fonts - SkTDArray fallbackFonts; + std::vector> fallbackFonts; - append_system_fallback_font_families(fallbackFonts, basePath); - mixin_vendor_fallback_font_families(fallbackFonts, basePath); + append_system_fallback_font_families(fallbackFonts, basePath, custom); + mixin_vendor_fallback_font_families(fallbackFonts, basePath, custom); - fontFamilies.append(fallbackFonts.size(), fallbackFonts.begin()); - } - - void SkFontMgr_Android_Parser::GetCustomFontFamilies(SkTDArray& fontFamilies, - const SkString& basePath, -+ const SkFontMgr_Android_CustomFonts* custom, - const char* fontsXml, - const char* fallbackFontsXml, - const char* langFallbackFontsDir) + fontFamilies.insert(fontFamilies.end(), + std::make_move_iterator(fallbackFonts.begin()), + std::make_move_iterator(fallbackFonts.end())); +@@ -833,15 +851,16 @@ void SkFontMgr_Android_Parser::GetSystemFontFamilies( + void SkFontMgr_Android_Parser::GetCustomFontFamilies( + std::vector>& fontFamilies, + const SkString& basePath, ++ const SkFontMgr_Android_CustomFonts* custom, + const char* fontsXml, + const char* fallbackFontsXml, + const char* langFallbackFontsDir) { if (fontsXml) { - parse_config_file(fontsXml, fontFamilies, basePath, false); @@ -3160,7 +3155,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.cpp b/third_par diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.h b/third_party/skia/src/ports/SkFontMgr_android_parser.h --- a/third_party/skia/src/ports/SkFontMgr_android_parser.h +++ b/third_party/skia/src/ports/SkFontMgr_android_parser.h -@@ -15,6 +15,7 @@ +@@ -17,6 +17,7 @@ #include "include/private/base/SkTArray.h" #include "include/private/base/SkTDArray.h" #include "src/core/SkTHash.h" @@ -3168,16 +3163,16 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android_parser.h b/third_party #include #include -@@ -105,11 +106,13 @@ struct FontFamily { +@@ -109,11 +110,13 @@ struct FontFamily { namespace SkFontMgr_Android_Parser { /** Parses system font configuration files and appends result to fontFamilies. */ --void GetSystemFontFamilies(SkTDArray& fontFamilies); -+void GetSystemFontFamilies(SkTDArray& fontFamilies, +-void GetSystemFontFamilies(std::vector>& fontFamilies); ++void GetSystemFontFamilies(std::vector>& fontFamilies, + const SkFontMgr_Android_CustomFonts* custom); /** Parses font configuration files and appends result to fontFamilies. */ - void GetCustomFontFamilies(SkTDArray& fontFamilies, + void GetCustomFontFamilies(std::vector>& fontFamilies, const SkString& basePath, + const SkFontMgr_Android_CustomFonts* custom, const char* fontsXml, diff --git a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index 14c90d4c..294881ed 100644 --- a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -88,7 +88,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.h b/third_ diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc --- a/third_party/blink/renderer/modules/webaudio/audio_context.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc -@@ -16,6 +16,7 @@ +@@ -17,6 +17,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/mediastream/media_devices.h" #include "third_party/blink/public/platform/browser_interface_broker_proxy.h" @@ -96,7 +96,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/thir #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/web_audio_latency_hint.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" -@@ -678,7 +679,9 @@ double AudioContext::baseLatency() const { +@@ -850,7 +851,9 @@ double AudioContext::baseLatency() const { DCHECK_CALLED_ON_VALID_SEQUENCE(main_thread_sequence_checker_); DCHECK(destination()); @@ -118,7 +118,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h" #include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h" #include "third_party/blink/public/platform/platform.h" -@@ -710,6 +711,17 @@ LocalDOMWindow* BaseAudioContext::GetWindow() const { +@@ -774,6 +775,17 @@ LocalDOMWindow* BaseAudioContext::GetWindow() const { return To(GetExecutionContext()); } @@ -170,25 +170,18 @@ diff --git a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc b/ #include "third_party/blink/renderer/platform/audio/audio_bus.h" #include "third_party/blink/renderer/platform/audio/audio_utilities.h" #include "third_party/blink/renderer/platform/audio/vector_math.h" -@@ -156,6 +157,7 @@ void RealtimeAnalyser::GetFloatTimeDomainData( - input_buffer[(i + write_index - fft_size + kInputBufferSize) % - kInputBufferSize]); - -+ value = BaseAudioContext::ShuffleAudioData(value, i); - UNSAFE_TODO(destination[i]) = value; +@@ -117,7 +118,8 @@ void RealtimeAnalyser::GetFloatFrequencyData(DOMFloat32Array* destination_array, + for (unsigned i = 0; i < len; ++i) { + const float linear_value = UNSAFE_TODO(source[i]); + const double db_mag = audio_utilities::LinearToDecibels(linear_value); +- UNSAFE_TODO(destination[i]) = static_cast(db_mag); ++ auto v = static_cast(db_mag); ++ UNSAFE_TODO(destination[i]) = BaseAudioContext::ShuffleAudioData(v, i); } } -@@ -183,6 +185,8 @@ void RealtimeAnalyser::GetByteTimeDomainData(DOMUint8Array* destination_array) { - input_buffer[(i + write_index - fft_size + kInputBufferSize) % - kInputBufferSize]); - -+ value = BaseAudioContext::ShuffleAudioData(value, i); -+ - // Scale from nominal -1 -> +1 to unsigned byte. - double scaled_value = 128 * (value + 1); - -@@ -306,6 +310,8 @@ void RealtimeAnalyser::ConvertToByteData(DOMUint8Array* destination_array) { - double scaled_value = + } +@@ -158,6 +160,8 @@ void RealtimeAnalyser::GetByteFrequencyData(DOMUint8Array* destination_array, + const double scaled_value = UCHAR_MAX * (db_mag - min_decibels) * range_scale_factor; + scaled_value = BaseAudioContext::ShuffleAudioData(scaled_value, i); @@ -196,20 +189,27 @@ diff --git a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc b/ // Clip to valid range. UNSAFE_TODO(destination[i]) = static_cast(ClampTo(scaled_value, 0, UCHAR_MAX)); -@@ -324,7 +330,8 @@ void RealtimeAnalyser::ConvertFloatToDb(DOMFloat32Array* destination_array) { - for (unsigned i = 0; i < len; ++i) { - float linear_value = UNSAFE_TODO(source[i]); - double db_mag = audio_utilities::LinearToDecibels(linear_value); -- UNSAFE_TODO(destination[i]) = static_cast(db_mag); -+ auto v = static_cast(db_mag); -+ UNSAFE_TODO(destination[i]) = BaseAudioContext::ShuffleAudioData(v, i); +@@ -188,6 +192,7 @@ void RealtimeAnalyser::GetFloatTimeDomainData( + input_buffer[(i + write_index - fft_size + kInputBufferSize) % + kInputBufferSize]); + ++ value = BaseAudioContext::ShuffleAudioData(value, i); + UNSAFE_TODO(destination[i]) = value; } } - } +@@ -215,6 +220,8 @@ void RealtimeAnalyser::GetByteTimeDomainData(DOMUint8Array* destination_array) { + input_buffer[(i + write_index - fft_size + kInputBufferSize) % + kInputBufferSize]); + ++ value = BaseAudioContext::ShuffleAudioData(value, i); ++ + // Scale from nominal -1 -> +1 to unsigned byte. + const double scaled_value = 128 * (value + 1); + diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -575,9 +575,8 @@ +@@ -594,9 +594,8 @@ { // AudioContext.playoutStats interface. // https://chromestatus.com/feature/5172818344148992 diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index 9f79dd07..a86f6a38 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -109,9 +109,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C +import android.net.Uri; + /** A SiteSettingsDelegate instance that contains Chrome-specific Site Settings logic. */ + @NullMarked public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { - private final Context mContext; -@@ -247,7 +251,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -243,7 +247,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { @Override public boolean isHelpAndFeedbackEnabled() { @@ -120,7 +120,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C } @Override -@@ -385,6 +389,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -381,6 +385,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { return mPrivacySandboxBridge.getRelatedWebsiteSetOwner(memberOrigin); } @@ -141,7 +141,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C diff --git a/chrome/browser/content_settings/page_specific_content_settings_delegate.cc b/chrome/browser/content_settings/page_specific_content_settings_delegate.cc --- a/chrome/browser/content_settings/page_specific_content_settings_delegate.cc +++ b/chrome/browser/content_settings/page_specific_content_settings_delegate.cc -@@ -190,7 +190,7 @@ namespace { +@@ -191,7 +191,7 @@ namespace { void GetGuestViewDefaultContentSettingRules( bool incognito, RendererContentSettingRules* rules) { @@ -153,7 +153,7 @@ diff --git a/chrome/browser/content_settings/page_specific_content_settings_dele diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn --- a/chrome/browser/resources/settings/BUILD.gn +++ b/chrome/browser/resources/settings/BUILD.gn -@@ -312,6 +312,7 @@ build_webui("build") { +@@ -319,6 +319,7 @@ build_webui("build") { "privacy_sandbox/privacy_sandbox_browser_proxy.ts", "relaunch_mixin.ts", "reset_page/reset_browser_proxy.ts", @@ -161,7 +161,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc "route.ts", "router.ts", "safety_hub/safety_hub_browser_proxy.ts", -@@ -326,7 +327,6 @@ build_webui("build") { +@@ -333,7 +334,6 @@ build_webui("build") { "site_settings/constants.ts", "site_settings/site_settings_mixin.ts", "site_settings/site_settings_prefs_browser_proxy.ts", @@ -172,16 +172,16 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html -@@ -1342,4 +1342,5 @@ - +@@ -982,4 +982,5 @@ + - + +
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts -@@ -55,6 +55,7 @@ import {SiteSettingsPrefsBrowserProxyImpl} from '../site_settings/site_settings_ +@@ -54,6 +54,7 @@ import {SiteSettingsPrefsBrowserProxyImpl} from '../site_settings/site_settings_ import {PrivacyGuideAvailabilityMixin} from './privacy_guide/privacy_guide_availability_mixin.js'; import {getTemplate} from './privacy_page.html.js'; @@ -189,7 +189,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/ch interface BlockAutoplayStatus { enabled: boolean; -@@ -78,8 +79,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { +@@ -77,8 +78,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { return 'settings-privacy-page'; } @@ -284,9 +284,9 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc /** * Add all of the child routes that originate from the privacy route, -@@ -156,6 +157,7 @@ function addPrivacyChildRoutes(r: Partial) { - r.SITE_SETTINGS_LOCAL_NETWORK_ACCESS = +@@ -175,6 +176,7 @@ function addPrivacyChildRoutes(r: Partial) { r.SITE_SETTINGS.createChild('localNetworkAccess'); + r.SITE_SETTINGS_LOCAL_NETWORK_ACCESS.hasMigratedToPlugin = true; } + setupContentSettingsRoutes(r); } @@ -391,7 +391,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/settings_category_d diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b/chrome/browser/resources/settings/site_settings/site_details.html --- a/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chrome/browser/resources/settings/site_settings/site_details.html -@@ -334,4 +334,5 @@ +@@ -331,4 +331,5 @@ label="$i18n{siteSettingsLocalNetworkAccess}"> @@ -676,7 +676,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_settings_util. diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts -@@ -47,7 +47,7 @@ function getCategoryItemMap(): Map { +@@ -50,7 +50,7 @@ function getCategoryItemMap(): Map { } // The following list is ordered alphabetically by |id|. The order in which // these appear in the UI is determined elsewhere in this file. @@ -685,7 +685,7 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ { route: routes.SITE_SETTINGS_ADS, id: Id.ADS, -@@ -450,10 +450,36 @@ function getCategoryItemMap(): Map { +@@ -451,10 +451,36 @@ function getCategoryItemMap(): Map { icon: 'privacy:cookie', }, ]; @@ -722,7 +722,7 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ function buildItemListFromIds(orderedIdList: ContentSettingsTypes[]): CategoryListItem[] { const map = getCategoryItemMap(); -@@ -543,7 +569,7 @@ export class SettingsSiteSettingsPageElement extends +@@ -545,7 +571,7 @@ export class SettingsSiteSettingsPageElement extends Id.IMAGES, Id.POPUPS, ]), @@ -734,15 +734,15 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1634,6 +1634,7 @@ static_library("ui") { +@@ -1542,6 +1542,7 @@ static_library("ui") { "//components/commerce/core/mojom:mojo_bindings", "//components/commerce/core/webui", "//components/endpoint_fetcher", + "//components/content_settings/core/browser:browser", "//components/enterprise/common:files_scan_data", "//components/feedback/proto", - "//components/headless/policy", -@@ -4821,6 +4822,7 @@ static_library("ui") { + "//components/headless/console_message_logger", +@@ -4672,6 +4673,7 @@ static_library("ui") { "//components/power_bookmarks/core", "//components/power_bookmarks/storage", "//components/prefs", @@ -770,7 +770,7 @@ diff --git a/chrome/browser/ui/views/controls/rich_controls_container_view.h b/c diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc -@@ -256,7 +256,7 @@ void PageInfoBubbleView::OpenMainPage(base::OnceClosure initialized_callback) { +@@ -231,7 +231,7 @@ void PageInfoBubbleView::OpenMainPage(base::OnceClosure initialized_callback) { auto* close_button = page_container_->GetViewByID( PageInfoViewFactory::VIEW_ID_PAGE_INFO_CLOSE_BUTTON); @@ -790,7 +790,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b #include "ui/views/view_class_properties.h" #if BUILDFLAG(FULL_SAFE_BROWSING) -@@ -282,8 +283,20 @@ void PageInfoMainView::SetPermissionInfo( +@@ -284,8 +285,20 @@ void PageInfoMainView::SetPermissionInfo( scroll_view->SetDrawOverflowIndicator(false); auto* content_view = scroll_view->SetContents(std::make_unique()); @@ -813,7 +813,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b content_view->SetID(PageInfoViewFactory::VIEW_ID_PAGE_INFO_PERMISSION_VIEW); content_view->SetProperty(views::kElementIdentifierKey, kPermissionsElementId); -@@ -298,11 +311,16 @@ void PageInfoMainView::SetPermissionInfo( +@@ -300,11 +313,16 @@ void PageInfoMainView::SetPermissionInfo( } } @@ -830,7 +830,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b toggle_row->SetProperty(views::kCrossAxisAlignmentKey, views::LayoutAlignment::kStretch); syncable_permission_rows_.emplace(permission.type, toggle_row); -@@ -310,6 +328,8 @@ void PageInfoMainView::SetPermissionInfo( +@@ -312,6 +330,8 @@ void PageInfoMainView::SetPermissionInfo( } for (auto& object : chosen_object_info_list) { @@ -839,7 +839,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b // The view takes ownership of the object info. auto object_view = std::make_unique( std::move(object), -@@ -320,6 +340,10 @@ void PageInfoMainView::SetPermissionInfo( +@@ -322,6 +342,10 @@ void PageInfoMainView::SetPermissionInfo( content_view->AddChildView(std::move(object_view))); } @@ -853,8 +853,8 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/b diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrome/browser/ui/views/page_info/page_info_view_factory.cc --- a/chrome/browser/ui/views/page_info/page_info_view_factory.cc +++ b/chrome/browser/ui/views/page_info/page_info_view_factory.cc -@@ -28,6 +28,8 @@ - #include "chrome/browser/ui/views/page_info/page_info_security_content_view.h" +@@ -30,6 +30,8 @@ + #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/cookie_controls_state.h" +#include "components/content_settings/core/browser/website_settings_info.h" @@ -862,22 +862,22 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom #include "components/page_info/core/features.h" #include "components/page_info/core/proto/about_this_site_metadata.pb.h" #include "components/page_info/page_info.h" -@@ -290,7 +292,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( - ContentSetting setting = info.setting == CONTENT_SETTING_DEFAULT - ? info.default_setting - : info.setting; +@@ -291,7 +293,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( + bool blocked_on_system_level) { + PermissionSetting setting = + permission.setting.value_or(permission.default_setting); + return GetPermissionIcon(info, blocked_on_system_level, setting); +} +// static +const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( -+ const PageInfo::PermissionInfo& info, ++ const PageInfo::PermissionInfo& permission, + bool blocked_on_system_level, + ContentSetting setting) { + auto* info = content_settings::PermissionSettingsRegistry::GetInstance()->Get( + permission.type); // For guard content settings and Automatic Picture-in-Picture, ASK is treated - // as an "on" state. - const bool show_blocked_badge = -@@ -591,6 +600,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -595,6 +604,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( icon = &vector_icons::kPrinterIcon; break; default: @@ -945,8 +945,8 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c namespace { -@@ -75,17 +100,12 @@ PermissionToggleRowView::PermissionToggleRowView( - // instead of adding it as the only child. +@@ -73,17 +98,12 @@ PermissionToggleRowView::PermissionToggleRowView( + navigation_handler_(navigation_handler) { SetUseDefaultFillLayout(true); row_view_ = AddChildView(std::make_unique()); + row_view_->SetCrossAxisAlignment(views::LayoutAlignment::kCenter); @@ -964,7 +964,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c if (permission.requesting_origin.has_value()) { std::u16string requesting_origin_string; switch (permission.type) { -@@ -183,6 +203,90 @@ void PermissionToggleRowView::UpdatePermission( +@@ -181,6 +201,90 @@ void PermissionToggleRowView::UpdatePermission( UpdateUiOnPermissionChanged(); } @@ -1055,7 +1055,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c void PermissionToggleRowView::OnToggleButtonPressed() { PageInfoUI::ToggleBetweenAllowAndBlock(permission_); PermissionChanged(); -@@ -191,27 +295,19 @@ void PermissionToggleRowView::OnToggleButtonPressed() { +@@ -189,27 +293,19 @@ void PermissionToggleRowView::OnToggleButtonPressed() { void PermissionToggleRowView::AddToggleButton( const std::u16string& toggle_accessible_name, int icon_label_spacing) { @@ -1090,7 +1090,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c } void PermissionToggleRowView::InitForUserSource( -@@ -253,12 +349,6 @@ void PermissionToggleRowView::InitForUserSource( +@@ -251,12 +347,6 @@ void PermissionToggleRowView::InitForUserSource( auto spacer_view = std::make_unique(); spacer_view->SetPreferredSize(gfx::Size(icon_size, icon_size)); spacer_view_ = row_view_->AddControl(std::move(spacer_view)); @@ -1103,7 +1103,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c } } } -@@ -284,6 +374,14 @@ void PermissionToggleRowView::InitForManagedSource( +@@ -282,6 +372,14 @@ void PermissionToggleRowView::InitForManagedSource( } void PermissionToggleRowView::UpdateUiOnPermissionChanged() { @@ -1116,9 +1116,9 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c + } + if (blocked_on_system_level_label_) { - if (permission_.setting == CONTENT_SETTING_DEFAULT) { + if (!permission_.setting) { permission_blocked_on_system_level_ = false; -@@ -329,6 +427,37 @@ void PermissionToggleRowView::UpdateUiOnPermissionChanged() { +@@ -326,6 +424,37 @@ void PermissionToggleRowView::UpdateUiOnPermissionChanged() { } } } @@ -1226,7 +1226,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide #include "components/password_manager/core/browser/leak_detection_dialog_utils.h" #include "components/password_manager/core/browser/manage_passwords_referrer.h" #include "components/password_manager/core/common/password_manager_features.h" -@@ -3912,6 +3916,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3855,6 +3859,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -1381,7 +1381,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b diff --git a/components/browser_ui/settings/android/BUILD.gn b/components/browser_ui/settings/android/BUILD.gn --- a/components/browser_ui/settings/android/BUILD.gn +++ b/components/browser_ui/settings/android/BUILD.gn -@@ -88,6 +88,7 @@ android_resources("java_resources") { +@@ -92,6 +92,7 @@ android_resources("java_resources") { "java/res/layout/managed_disclaimer_preference_for_radio_groups.xml", "java/res/layout/preference_chrome_image_view.xml", "java/res/layout/preference_spinner.xml", @@ -1544,7 +1544,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -156,6 +156,23 @@ android_library("java") { +@@ -153,6 +153,23 @@ android_library("java") { ":site_settings_jni_headers", "//components/content_settings/android:java_pref_names_srcjar", ] @@ -1568,7 +1568,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b } android_library("javatests") { -@@ -205,6 +222,7 @@ robolectric_library("junit") { +@@ -202,6 +219,7 @@ robolectric_library("junit") { } android_resources("java_resources") { @@ -1579,7 +1579,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml --- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml +++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml -@@ -193,4 +193,11 @@ The order of the following items is from: http://crbug.com/610358. +@@ -197,4 +197,11 @@ The order of the following items is from: http://crbug.com/610358. android:title="@string/safety_hub_autorevocation_toggle_title" android:summary="@string/safety_hub_autorevocation_toggle_summary" /> @@ -2260,7 +2260,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + public ResourceItem( int icon, int title, - @ContentSettingValues @Nullable Integer defaultEnabledValue, + @ContentSetting @Nullable Integer defaultEnabledValue, @@ -662,6 +683,8 @@ public class ContentSettingsResources { R.string.website_settings_window_management_ask, R.string.website_settings_window_management_block); @@ -2270,8 +2270,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c assert false; // NOTREACHED return assumeNonNull(null); } -@@ -820,6 +843,14 @@ public class ContentSettingsResources { - return getResourceItem(contentType).getDefaultDisabledValue(); +@@ -824,6 +847,14 @@ public class ContentSettingsResources { + return getCategorySummary(value, isOneTime, /* isApproximateGeolocation= */ false); } + public static int getCategorySummary(int contentType, @@ -2285,7 +2285,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** * Returns the string resource id for a given ContentSetting to show with a permission category. * -@@ -994,6 +1025,8 @@ public class ContentSettingsResources { +@@ -1002,6 +1033,8 @@ public class ContentSettingsResources { */ public static int @Nullable [] getTriStateSettingDescriptionIDs( int contentType, boolean isPermissionSiteSettingsRadioButtonFeatureEnabled) { @@ -2297,18 +2297,18 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java -@@ -344,6 +344,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment - website.site() - .getContentSetting( - browserContextHandle, mCategory.getContentSettingsType()); -+ if (contentSetting != null && -+ BromiteCustomContentSettingImpl.processOnBlockList(contentSetting, contentSetting)) { -+ return BromiteCustomContentSettingImpl.isOnBlockList(contentSetting, website, contentSetting); -+ } - if (contentSetting != null) { - return ContentSettingValues.BLOCK == contentSetting; - } -@@ -532,6 +536,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -349,6 +349,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + } else { + @ContentSetting + Integer contentSetting = website.site().getContentSetting(browserContextHandle, type); ++ if (contentSetting != null && ++ BromiteCustomContentSettingImpl.processOnBlockList(type, contentSetting)) { ++ return BromiteCustomContentSettingImpl.isOnBlockList(type, website, contentSetting); ++ } + if (contentSetting != null) { + return ContentSetting.BLOCK == contentSetting; + } +@@ -540,6 +544,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? new HashSet<>(getArguments().getStringArrayList(EXTRA_SELECTED_DOMAINS)) : null; @@ -2316,7 +2316,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c configureGlobalToggles(); if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) { RecordUserAction.record("DesktopSiteContentSetting.SettingsPage.Entered"); -@@ -567,7 +572,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -575,7 +580,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment if (queryHasChanged) getInfoForOrigins(); }); @@ -2326,7 +2326,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c MenuItem help = menu.add( Menu.NONE, -@@ -579,12 +585,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -587,12 +593,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getResources(), R.drawable.ic_help_and_feedback, getContext().getTheme())); @@ -2347,9 +2347,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) { getSiteSettingsDelegate() .launchProtectedContentHelpAndFeedbackActivity(getActivity()); -@@ -664,6 +678,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment - BrowserContextHandle browserContextHandle = - getSiteSettingsDelegate().getBrowserContextHandle(); +@@ -671,6 +685,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + public boolean onPreferenceChange(Preference preference, Object newValue) { + BrowserContextHandle browserContextHandle = getBrowserContextHandle(); PrefService prefService = UserPrefs.get(browserContextHandle); + if (BromiteCustomContentSettingImpl.onPreferenceChange(mCategory, + browserContextHandle, preference, newValue) == true) { @@ -2359,7 +2359,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (BINARY_RADIO_BUTTON_KEY.equals(preference.getKey()) || BINARY_TOGGLE_KEY.equals(preference.getKey())) { assert !mCategory.isManaged(); -@@ -842,7 +861,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -845,7 +864,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? R.string.website_settings_add_site_description_javascript_optimizer_block : R.string.website_settings_add_site_description_javascript_optimizer_allow; } @@ -2412,10 +2412,10 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c TriStateSiteSettingsPreference triStateToggle = getPreferenceScreen().findPreference(TRI_STATE_TOGGLE_KEY); + if (triStateToggle == null) return true; - return (triStateToggle.getCheckedSetting() == ContentSettingValues.BLOCK); + return (triStateToggle.getCheckedSetting() == ContentSetting.BLOCK); case GlobalToggleLayout.TRI_STATE_COOKIE_TOGGLE: TriStateCookieSettingsPreference triStateCookieToggle = -@@ -1320,7 +1345,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1322,7 +1347,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else if (res_id != -1) { infoText.setSummary(res_id); } else { @@ -2428,7 +2428,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // Hide the anti-abuse text preferences, as needed. -@@ -1359,6 +1388,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1361,6 +1390,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else { screen.removePreference(mLocationTriStatePref); } @@ -2436,7 +2436,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c maybeShowReasonToggleDisabled(screen); -@@ -1571,6 +1601,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1569,6 +1599,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment iconIds = ContentSettingsResources.getTriStateSettingIconIDs(contentType); } triStateToggle.initialize( @@ -2444,9 +2444,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c setting, descriptionIds, iconIds, -@@ -1730,6 +1761,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment - @ContentSettingValues - Integer value = site.getContentSetting(browserContextHandle, contentSettingsType); +@@ -1743,6 +1774,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + value = site.getContentSetting(browserContextHandle, contentSettingsType); + } + AlertDialog.Builder alertDialogBuilder = + BromiteCustomContentSettingImpl.buildPreferenceDialog(site, contentSettingsType, @@ -2462,7 +2462,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -59,6 +59,7 @@ import java.util.Collection; +@@ -56,6 +56,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -2470,7 +2470,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** Shows the permissions and other settings for a particular website. */ @NullMarked -@@ -192,7 +193,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -196,7 +197,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment case ContentSettingsType.WINDOW_MANAGEMENT: return "window_management_permission_list"; default: @@ -2479,7 +2479,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -598,14 +599,27 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -596,14 +597,27 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setupContentSettingsPreferences() { Preference permissionsHeaderPref = findPreference(PREF_PERMISSIONS_HEADER); mMaxPermissionOrder = permissionsHeaderPref.getOrder(); @@ -2508,8 +2508,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c preference.setKey(getPreferenceKey(type)); if (type == ContentSettingsType.ADS) { -@@ -1290,7 +1304,16 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - @ContentSettingValues @Nullable Integer value, +@@ -1199,7 +1213,16 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + @ContentSetting @Nullable Integer value, boolean isEmbargoed, boolean isOneTime) { - if (value == null) return; @@ -2526,16 +2526,16 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c setUpPreferenceCommon(preference, value); preference.setOnPreferenceChangeListener(this); @ContentSettingsType.EnumType -@@ -1298,7 +1321,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - preference.setSummary( +@@ -1211,7 +1234,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment isEmbargoed ? getString(R.string.automatically_blocked) -- : getString(ContentSettingsResources.getCategorySummary(value, isOneTime))); -+ : getString(ContentSettingsResources.getCategorySummary(content_type, value, isOneTime))); + : getString( +- ContentSettingsResources.getCategorySummary( ++ ContentSettingsResources.getCategorySummary(content_type, + value, isOneTime, isApproximateGeolocation))); if (preference instanceof ChromeImageViewPreference) { ChromeImageViewPreference oneTimePreference = (ChromeImageViewPreference) preference; - oneTimePreference.setImageView( -@@ -1313,10 +1336,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1237,10 +1260,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment oneTimePreference.setBackgroundColor(mHighlightColor); } } else { @@ -2554,9 +2554,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } -@@ -1542,14 +1569,20 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1532,7 +1559,13 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment if (newValue instanceof Boolean) { - permission = (Boolean) newValue ? getEnabledValue(type) : ContentSettingValues.BLOCK; + permission = (Boolean) newValue ? getEnabledValue(type) : ContentSetting.BLOCK; } else { - permission = (Integer) newValue; + Integer newPermission = @@ -2568,19 +2568,20 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + permission = (Integer) newValue; } - assumeNonNull(mSite).setContentSetting(browserContextHandle, type, permission); - // In Clank, one time grants are only possible via prompt, not via page + if (type == ContentSettingsType.GEOLOCATION_WITH_OPTIONS) { +@@ -1553,7 +1586,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment // info. preference.setSummary( -- getString(ContentSettingsResources.getCategorySummary(permission, false))); -+ getString(ContentSettingsResources.getCategorySummary(type, permission, false))); - preference.setIcon(getContentSettingsIcon(type, permission)); - - if (mWebsiteSettingsObserver != null) { + getString( +- ContentSettingsResources.getCategorySummary( ++ ContentSettingsResources.getCategorySummary(type, + permission, + false, + type == ContentSettingsType.GEOLOCATION_WITH_OPTIONS diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java -@@ -57,6 +57,7 @@ public class SiteSettings extends BaseSiteSettingsFragment +@@ -55,6 +55,7 @@ public class SiteSettings extends BaseSiteSettingsFragment SettingsUtils.addPreferencesFromResource(this, R.xml.site_settings_preferences); mPageTitle.set(getContext().getString(R.string.prefs_site_settings)); @@ -2588,7 +2589,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c configurePreferences(); updatePreferenceStates(); } -@@ -87,7 +88,7 @@ public class SiteSettings extends BaseSiteSettingsFragment +@@ -85,7 +86,7 @@ public class SiteSettings extends BaseSiteSettingsFragment // Remove unsupported settings categories. for (@SiteSettingsCategory.Type int type = 0; @@ -2597,7 +2598,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c type++) { if (!getSiteSettingsDelegate().isCategoryVisible(type)) { Preference pref = findPreference(type); -@@ -113,7 +114,7 @@ public class SiteSettings extends BaseSiteSettingsFragment +@@ -102,7 +103,7 @@ public class SiteSettings extends BaseSiteSettingsFragment @CookieControlsMode int cookieControlsMode = UserPrefs.get(browserContextHandle).getInteger(COOKIE_CONTROLS_MODE); @@ -2606,7 +2607,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c Preference p = findPreference(prefCategory); int contentType = SiteSettingsCategory.contentSettingsType(prefCategory); // p can be null if the Preference was removed in configurePreferences. -@@ -191,20 +192,22 @@ public class SiteSettings extends BaseSiteSettingsFragment +@@ -176,20 +177,22 @@ public class SiteSettings extends BaseSiteSettingsFragment } else if (Type.ZOOM == prefCategory) { // Don't want to set a summary for Zoom because we don't want any message to display // under the Zoom row on site settings. @@ -2615,7 +2616,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c - ContentSettingsResources.getCategorySummary( - setting, /* isOneTime= */ false)); } else { -- @ContentSettingValues +- @ContentSetting - Integer defaultForToggle = - checked - ? ContentSettingsResources.getDefaultEnabledValue(contentType) @@ -2629,7 +2630,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + if (summary != 0) { + p.setSummary(summary); + } else { -+ @ContentSettingValues ++ @ContentSetting + Integer defaultForToggle = + checked + ? ContentSettingsResources.getDefaultEnabledValue(contentType) @@ -2645,25 +2646,25 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/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 -@@ -80,7 +80,7 @@ public class SiteSettingsCategory { - Type.SERIAL_PORT, +@@ -82,7 +82,7 @@ public class SiteSettingsCategory { Type.LOCAL_NETWORK_ACCESS, Type.WINDOW_MANAGEMENT, + Type.AUTO_PICTURE_IN_PICTURE, - Type.NUM_ENTRIES + Type.NUM_ENTRIES_CHROMIUM }) @Retention(RetentionPolicy.SOURCE) public @interface Type { -@@ -125,7 +125,7 @@ public class SiteSettingsCategory { - int WINDOW_MANAGEMENT = 36; +@@ -128,7 +128,7 @@ public class SiteSettingsCategory { + int AUTO_PICTURE_IN_PICTURE = 37; /** Number of handled categories used for calculating array sizes. */ -- int NUM_ENTRIES = 37; -+ int NUM_ENTRIES_CHROMIUM = 37; +- int NUM_ENTRIES = 38; ++ int NUM_ENTRIES_CHROMIUM = 38; } private final BrowserContextHandle mBrowserContextHandle; -@@ -176,6 +176,9 @@ public class SiteSettingsCategory { +@@ -179,6 +179,9 @@ public class SiteSettingsCategory { } else { permission = ""; } @@ -2673,7 +2674,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return new SiteSettingsCategory(browserContextHandle, type, permission); } -@@ -184,7 +187,7 @@ public class SiteSettingsCategory { +@@ -187,7 +190,7 @@ public class SiteSettingsCategory { @ContentSettingsType.EnumType int contentSettingsType) { assert contentSettingsType != -1; assert Type.ALL_SITES == 0; @@ -2682,7 +2683,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (contentSettingsType(i) == contentSettingsType) { return createFromType(browserContextHandle, i); } -@@ -195,7 +198,7 @@ public class SiteSettingsCategory { +@@ -198,7 +201,7 @@ public class SiteSettingsCategory { public static @Nullable SiteSettingsCategory createFromPreferenceKey( BrowserContextHandle browserContextHandle, String preferenceKey) { assert Type.ALL_SITES == 0; @@ -2691,7 +2692,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (preferenceKey(i).equals(preferenceKey)) { return createFromType(browserContextHandle, i); } -@@ -278,8 +281,7 @@ public class SiteSettingsCategory { +@@ -283,8 +286,7 @@ public class SiteSettingsCategory { case Type.TRACKING_PROTECTION: return ContentSettingsType.DEFAULT; // Conversion unavailable. } @@ -2701,7 +2702,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } /** -@@ -378,8 +380,12 @@ public class SiteSettingsCategory { +@@ -385,8 +387,12 @@ public class SiteSettingsCategory { case Type.ZOOM: return "zoom"; default: @@ -2717,7 +2718,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java -@@ -208,6 +208,8 @@ public interface SiteSettingsDelegate { +@@ -203,6 +203,8 @@ public interface SiteSettingsDelegate { */ String getRelatedWebsiteSetOwner(String memberOrigin); @@ -2732,7 +2733,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c @@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; - import org.chromium.components.content_settings.ContentSettingValues; + import org.chromium.components.content_settings.ContentSetting; +import org.chromium.components.content_settings.ContentSettingsType; /** A 3-state Allowed/Ask/Blocked radio group Preference used for SiteSettings. */ @@ -2750,7 +2751,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c */ public void initialize( + @ContentSettingsType.EnumType int contentType, - @ContentSettingValues int setting, + @ContentSetting int setting, int @Nullable [] descriptionIds, int @Nullable [] iconIds, boolean isPermissionSiteSettingsRadioButtonFeatureEnabled, @@ -2759,7 +2760,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c mSetting = setting; mDescriptionIds = descriptionIds; mIconIds = iconIds; -@@ -92,6 +96,13 @@ public class TriStateSiteSettingsPreference extends Preference +@@ -94,6 +98,13 @@ public class TriStateSiteSettingsPreference extends Preference mRadioGroup = (RadioGroup) holder.findViewById(R.id.radio_button_layout); mRadioGroup.setOnCheckedChangeListener(this); @@ -2776,7 +2777,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -344,7 +344,11 @@ public final class Website implements WebsiteEntry { +@@ -361,7 +361,11 @@ public final class Website implements WebsiteEntry { RecordUserAction.record("SoundContentSetting.UnmuteBy.SiteSettings"); } } @@ -2792,7 +2793,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java -@@ -124,7 +124,7 @@ public class WebsitePermissionsFetcher { +@@ -128,7 +128,7 @@ public class WebsitePermissionsFetcher { } break; default: @@ -2804,7 +2805,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -@@ -317,7 +317,7 @@ public class WebsitePreferenceBridge { +@@ -318,7 +318,7 @@ public class WebsitePreferenceBridge { case ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER: return true; default: @@ -2813,7 +2814,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -333,7 +333,6 @@ public class WebsitePreferenceBridge { +@@ -334,7 +334,6 @@ public class WebsitePreferenceBridge { public static boolean isCategoryEnabled( BrowserContextHandle browserContextHandle, @ContentSettingsType.EnumType int contentSettingsType) { @@ -2931,7 +2932,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. namespace content_settings { -@@ -872,6 +873,7 @@ void ContentSettingsRegistry::Init() { +@@ -879,6 +880,7 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::PLATFORM_CHROMEOS, ContentSettingsInfo::INHERIT_IN_INCOGNITO, PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); @@ -3165,7 +3166,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h -@@ -100,10 +100,22 @@ std::ostream& operator<<(std::ostream& os, +@@ -98,10 +98,22 @@ std::ostream& operator<<(std::ostream& os, typedef std::vector ContentSettingsForOneType; @@ -3398,7 +3399,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.h diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoPermissionsController.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoPermissionsController.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoPermissionsController.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoPermissionsController.java -@@ -193,6 +193,15 @@ public class PageInfoPermissionsController extends PageInfoPreferenceSubpageCont +@@ -203,6 +203,15 @@ public class PageInfoPermissionsController extends PageInfoPreferenceSubpageCont : perm1.nameMidSentence.toString()); } @@ -3417,10 +3418,10 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java -@@ -109,6 +109,14 @@ public class PermissionParamsListBuilder { +@@ -100,6 +100,14 @@ public class PermissionParamsListBuilder { + nameStringMidSentence.setSpan( span, 0, nameStringMidSentence.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); - boolean allowed = permission.setting != ContentSettingValues.BLOCK; + if (permission.setting == ContentSettingValues.ASK) { + allowed = false; + } @@ -3435,15 +3436,15 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc --- a/components/page_info/android/page_info_controller_android.cc +++ b/components/page_info/android/page_info_controller_android.cc -@@ -14,6 +14,7 @@ - #include "base/feature_list.h" +@@ -15,6 +15,7 @@ #include "base/notimplemented.h" #include "components/content_settings/core/browser/host_content_settings_map.h" + #include "components/content_settings/core/browser/permission_settings_registry.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" - #include "components/page_info/android/page_info_client.h" -@@ -184,6 +185,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( + #include "components/content_settings/core/common/features.h" +@@ -197,6 +198,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( permissions_to_display.push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -3456,10 +3457,10 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp + } + } + - std::map + std::map user_specified_settings_to_display; std::map -@@ -243,6 +253,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( +@@ -259,6 +269,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( return permission.setting; } @@ -3477,7 +3478,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -22,6 +22,7 @@ +@@ -23,6 +23,7 @@ #include "base/values.h" #include "build/build_config.h" #include "components/browsing_data/content/browsing_data_helper.h" @@ -3485,8 +3486,8 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. #include "components/content_settings/browser/ui/cookie_controls_controller.h" #include "components/content_settings/core/browser/content_settings_registry.h" #include "components/content_settings/core/browser/content_settings_uma_util.h" -@@ -1317,6 +1318,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, - // applies to permissions listed in |kPermissionType|. +@@ -1367,6 +1368,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, + // via `HasContentSettingChangedViaPageInfo(type)`. bool PageInfo::ShouldShowPermission( const PageInfo::PermissionInfo& info) const { + content_settings::WebsiteSettingsRegistry* website_settings = @@ -3500,7 +3501,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. // Note |ContentSettingsType::ADS| will show up regardless of its default // value when it has been activated on the current origin. if (info.type == ContentSettingsType::ADS) { -@@ -1433,7 +1442,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1494,7 +1503,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -3524,15 +3525,15 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc --- a/components/page_info/page_info_ui.cc +++ b/components/page_info/page_info_ui.cc -@@ -18,6 +18,7 @@ - #include "build/build_config.h" +@@ -16,6 +16,7 @@ + #include "components/content_settings/core/browser/permission_settings_registry.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/page_info/core/features.h" #include "components/page_info/page_info.h" - #include "components/page_info/page_info_ui_delegate.h" -@@ -317,6 +318,13 @@ void CreateOppositeToDefaultSiteException( + #include "components/page_info/page_info_ui.h" +@@ -252,6 +253,13 @@ void CreateOppositeToDefaultSiteException( std::u16string GetPermissionAskStateString(ContentSettingsType type) { int message_id = kInvalidResourceID; @@ -3546,7 +3547,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in switch (type) { case ContentSettingsType::GEOLOCATION: message_id = IDS_PAGE_INFO_STATE_TEXT_LOCATION_ASK; -@@ -615,6 +623,12 @@ PageInfoUI::~PageInfoUI() = default; +@@ -550,6 +558,12 @@ PageInfoUI::~PageInfoUI() = default; // static std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { @@ -3559,7 +3560,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id); -@@ -625,6 +639,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { +@@ -560,6 +574,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { // static std::u16string PageInfoUI::PermissionTypeToUIStringMidSentence( ContentSettingsType type) { @@ -3572,7 +3573,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id_mid_sentence); -@@ -1051,6 +1071,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { +@@ -948,6 +968,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { if (info.type == type) return true; } diff --git a/build/patches/Disable-safety-check.patch b/build/patches/Disable-safety-check.patch index 33dd341a..5b75c189 100644 --- a/build/patches/Disable-safety-check.patch +++ b/build/patches/Disable-safety-check.patch @@ -6,25 +6,23 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/BUILD.gn | 5 ---- chrome/android/chrome_java_sources.gni | 1 - - .../android/java/res/xml/main_preferences.xml | 3 +- + .../android/java/res/xml/main_preferences.xml | 2 +- .../PasswordCheckupLauncher.java | 25 ---------------- .../settings/FragmentDependencyProvider.java | 30 ------------------- .../chrome/browser/settings/MainSettings.java | 2 +- - .../settings/SettingsNavigationImpl.java | 13 ++------ + .../settings/SettingsNavigationImpl.java | 3 +- chrome/browser/BUILD.gn | 1 - chrome/browser/safety_check/android/BUILD.gn | 2 -- .../safety_check/SafetyCheckBridge.java | 4 +-- .../suggestions/action/OmniboxPedal.java | 3 -- - chrome/browser/ui/tab_helpers.cc | 2 +- - .../site_settings/SiteSettings.java | 2 +- .../Disable-safety-check.inc | 1 + - 14 files changed, 10 insertions(+), 84 deletions(-) + 12 files changed, 6 insertions(+), 73 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 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -459,7 +459,6 @@ if (_is_default_toolchain) { +@@ -457,7 +457,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:java", "//chrome/browser/regional_capabilities/android:java", "//chrome/browser/safe_browsing/android:java", @@ -32,7 +30,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/safety_hub/android:java", "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", -@@ -1136,8 +1135,6 @@ if (_is_default_toolchain) { +@@ -1138,8 +1137,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:junit", "//chrome/browser/recent_tabs/internal:junit", "//chrome/browser/safe_browsing/android:junit", @@ -41,7 +39,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", -@@ -1425,8 +1422,6 @@ if (_is_default_toolchain) { +@@ -1426,8 +1423,6 @@ if (_is_default_toolchain) { "//chrome/browser/quick_delete:javatests", "//chrome/browser/renderer_host/android:javatests", "//chrome/browser/safe_browsing/android:javatests", @@ -53,7 +51,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -942,7 +942,6 @@ chrome_java_sources = [ +@@ -950,7 +950,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingPasswordReuseDialogBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingReferringAppBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingSettingsNavigation.java", @@ -64,20 +62,19 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -58,7 +58,8 @@ for the previous order (main_preferences_legacy). --> - android:fragment="org.chromium.chrome.browser.safety_check.SafetyCheckSettingsFragment" - android:key="safety_check" - android:order="9" -- android:title="@string/prefs_safety_check"/> -+ android:title="@string/prefs_safety_check" -+ app:isPreferenceVisible="false" /> - ++ android:title="@string/prefs_safety_check" app:isPreferenceVisible="false"/> + + windowAndroid.getModalDialogManager(), - accountEmail, - new SettingsCustomTabLauncherImpl()); } @@ -122,12 +119,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage - SettingsNavigationFactory.createSettingsNavigation() - .startSettings(windowAndroid.getContext().get(), SettingsFragment.SAFETY_CHECK); } - - private static ObservableSupplier getModalDialogManagerSupplier( + } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -34,13 +34,6 @@ import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDeleg +@@ -35,13 +35,6 @@ import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDeleg import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsBaseFragment; import org.chromium.chrome.browser.privacy_sandbox.TopicsManageFragment; import org.chromium.chrome.browser.profiles.Profile; @@ -187,48 +183,31 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -306,7 +306,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -312,7 +312,7 @@ public class MainSettings extends ChromeBaseSettingsFragment removePreferenceIfPresent(PREF_UI_THEME); } -- if (BuildInfo.getInstance().isAutomotive) { -+ if (((true)) || BuildInfo.getInstance().isAutomotive) { - getPreferenceScreen().removePreference(findPreference(PREF_SAFETY_CHECK)); +- if (DeviceInfo.isAutomotive()) { ++ if (((true)) || isAutomotive()) { getPreferenceScreen().removePreference(findPreference(PREF_SAFETY_HUB)); - } else if (!ChromeFeatureList.sSafetyHub.isEnabled()) { + } else { + findPreference(PREF_SAFETY_HUB) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java -@@ -18,8 +18,6 @@ import org.chromium.chrome.browser.autofill.settings.FinancialAccountsManagement +@@ -18,7 +18,6 @@ import org.chromium.chrome.browser.autofill.settings.AutofillPaymentMethodsFragm + import org.chromium.chrome.browser.autofill.settings.FinancialAccountsManagementFragment; import org.chromium.chrome.browser.autofill.settings.NonCardPaymentMethodsManagementFragment; import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment; - import org.chromium.chrome.browser.flags.ChromeFeatureList; --import org.chromium.chrome.browser.safety_check.SafetyCheckSettingsFragment; -import org.chromium.chrome.browser.safety_hub.SafetyHubFragment; import org.chromium.chrome.browser.password_manager.settings.PasswordSettings; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; -@@ -47,10 +45,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { - ClearBrowsingDataFragment.createFragmentArgs(context.getClass().getName()); - break; - case SettingsFragment.SAFETY_CHECK: -- if (!ChromeFeatureList.sSafetyHub.isEnabled()) { -- fragmentArgs = SafetyCheckSettingsFragment.createBundle(true); -- } -- break; -+ return; - case SettingsFragment.MAIN: - case SettingsFragment.PAYMENT_METHODS: - case SettingsFragment.SITE: -@@ -110,11 +105,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { +@@ -106,7 +105,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { case SettingsFragment.PAYMENT_METHODS: return AutofillPaymentMethodsFragment.class; case SettingsFragment.SAFETY_CHECK: -- if (ChromeFeatureList.sSafetyHub.isEnabled()) { -- return SafetyHubFragment.class; -- } else { -- return SafetyCheckSettingsFragment.class; -- } +- return SafetyHubFragment.class; + return null; case SettingsFragment.SITE: return SiteSettings.class; @@ -236,7 +215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3458,7 +3458,6 @@ static_library("browser") { +@@ -3449,7 +3449,6 @@ static_library("browser") { "//chrome/browser/recent_tabs:jni_headers", "//chrome/browser/regional_capabilities", "//chrome/browser/safe_browsing/android:safe_browsing_enums", @@ -297,30 +276,6 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow case OmniboxPedalId.MANAGE_SITE_SETTINGS: delegate.openSettingsPage(SettingsFragment.SITE); break; -diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc ---- a/chrome/browser/ui/tab_helpers.cc -+++ b/chrome/browser/ui/tab_helpers.cc -@@ -571,7 +571,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { - tpcd::trial::ValidityService::MaybeCreateForWebContents(web_contents); - TrustedVaultEncryptionKeysTabHelper::CreateForWebContents(web_contents); - #if BUILDFLAG(IS_ANDROID) -- if (base::FeatureList::IsEnabled(features::kSafetyHub)) { -+ if (((true)) || base::FeatureList::IsEnabled(features::kSafetyHub)) { - auto* service = RevokedPermissionsServiceFactory::GetForProfile(profile); - if (service) { - RevokedPermissionsService::TabHelper::CreateForWebContents(web_contents, -diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java ---- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java -+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java -@@ -96,7 +96,7 @@ public class SiteSettings extends BaseSiteSettingsFragment - } - - // Remove the permission autorevocation preference if Safety Hub is not enabled. -- if (!getSiteSettingsDelegate().isSafetyHubEnabled()) { -+ if (((false)) && !getSiteSettingsDelegate().isSafetyHubEnabled()) { - Preference autorevocationPref = - findPreference(PERMISSION_AUTOREVOCATION_PREF); - getPreferenceScreen().removePreference(autorevocationPref); diff --git a/cromite_flags/chrome/common/chrome_features_cc/Disable-safety-check.inc b/cromite_flags/chrome/common/chrome_features_cc/Disable-safety-check.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index 7d4b78c7..21de9951 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -15,41 +15,38 @@ See also: https://github.com/bromite/bromite/issues/547 Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../settings/PasswordSettings.java | 83 +++++++++++- - .../chrome/browser/settings/MainSettings.java | 2 +- - .../chromium/chrome/browser/tab/TabImpl.java | 41 +++++- - chrome/browser/about_flags.cc | 33 ----- - chrome/browser/android/tab_android.cc | 3 +- - chrome/browser/autofill/android/BUILD.gn | 2 +- - .../autofill/AutofillClientProviderUtils.java | 2 +- - ...AutofillThirdPartyModeContentProvider.java | 1 + - chrome/browser/flag_descriptions.cc | 6 - - chrome/browser/flag_descriptions.h | 3 - - .../strings/android_chrome_strings.grd | 6 + - .../ui/autofill/autofill_client_provider.cc | 124 +----------------- - .../ui/autofill/autofill_client_provider.h | 6 - - chrome/browser/ui/tab_helpers.cc | 4 +- - components/android_autofill/browser/BUILD.gn | 1 + - .../browser/android_autofill_manager.cc | 2 + - .../browser/android_autofill_manager.h | 2 + - .../autofill/AutofillManagerWrapper.java | 5 +- - .../components/autofill/AutofillProvider.java | 7 + - .../BrowserSelectionActionMenuDelegate.java | 68 ++++++++++ - .../browser/content_autofill_driver.cc | 11 ++ - .../content/browser/content_autofill_driver.h | 10 ++ - .../content_autofill_driver_factory.cc | 12 ++ - .../content/renderer/autofill_agent.cc | 5 + - .../renderer/password_autofill_agent.cc | 5 +- - .../browser/foundations/autofill_driver.h | 2 + - .../foundations/autofill_driver_factory.cc | 4 + - .../browser/foundations/autofill_manager.h | 2 + - .../foundations/browser_autofill_manager.cc | 2 + - .../foundations/browser_autofill_manager.h | 2 + - .../autofill/core/common/autofill_features.cc | 2 +- - .../autofill/core/common/autofill_features.h | 22 ---- - .../autofill/core/common/autofill_prefs.cc | 4 +- - .../autofill/core/common/autofill_prefs.h | 5 + - 34 files changed, 277 insertions(+), 212 deletions(-) + .../settings/PasswordSettings.java | 83 +++++++++++++++- + .../chrome/browser/settings/MainSettings.java | 16 +-- + .../chromium/chrome/browser/tab/TabImpl.java | 42 ++++++-- + chrome/browser/about_flags.cc | 3 - + chrome/browser/android/tab_android.cc | 3 +- + chrome/browser/autofill/android/BUILD.gn | 2 +- + .../autofill/AutofillClientProviderUtils.java | 2 +- + ...AutofillThirdPartyModeContentProvider.java | 1 + + .../strings/android_chrome_strings.grd | 6 ++ + .../ui/autofill/autofill_client_provider.cc | 97 +------------------ + .../ui/autofill/autofill_client_provider.h | 6 -- + chrome/browser/ui/tab_helpers.cc | 4 +- + components/android_autofill/browser/BUILD.gn | 1 + + .../browser/android_autofill_manager.cc | 2 + + .../browser/android_autofill_manager.h | 2 + + .../autofill/AutofillManagerWrapper.java | 5 +- + .../components/autofill/AutofillProvider.java | 7 ++ + .../BrowserSelectionActionMenuDelegate.java | 68 +++++++++++++ + .../browser/content_autofill_driver.cc | 11 +++ + .../content/browser/content_autofill_driver.h | 10 ++ + .../content_autofill_driver_factory.cc | 12 +++ + .../content/renderer/autofill_agent.cc | 5 + + .../renderer/password_autofill_agent.cc | 5 +- + .../browser/foundations/autofill_driver.h | 2 + + .../foundations/autofill_driver_factory.cc | 4 + + .../browser/foundations/autofill_manager.h | 2 + + .../foundations/browser_autofill_manager.cc | 2 + + .../foundations/browser_autofill_manager.h | 2 + + .../autofill/core/common/autofill_features.cc | 2 +- + .../autofill/core/common/autofill_prefs.cc | 4 +- + .../autofill/core/common/autofill_prefs.h | 5 + + 31 files changed, 278 insertions(+), 138 deletions(-) create mode 100644 components/android_autofill/browser/java/src/org/chromium/components/autofill/BrowserSelectionActionMenuDelegate.java 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 @@ -190,21 +187,35 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -442,7 +442,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -456,20 +456,8 @@ public class MainSettings extends ChromeBaseSettingsFragment } private void updateAutofillPreferences() { -- if (ChromeFeatureList.isEnabled(AutofillFeatures.AUTOFILL_VIRTUAL_VIEW_STRUCTURE_ANDROID)) { -+ if ((false)) { - addPreferenceIfAbsent(PREF_AUTOFILL_SECTION); - addPreferenceIfAbsent(PREF_AUTOFILL_OPTIONS); - Preference preference = findPreference(PREF_AUTOFILL_OPTIONS); +- addPreferenceIfAbsent(PREF_AUTOFILL_SECTION); +- addPreferenceIfAbsent(PREF_AUTOFILL_OPTIONS); +- Preference autofillOptionsPreference = findPreference(PREF_AUTOFILL_OPTIONS); +- autofillOptionsPreference.setFragment(null); +- autofillOptionsPreference.setOnPreferenceClickListener( +- unused -> { +- SettingsNavigationFactory.createSettingsNavigation() +- .startSettings( +- getContext(), +- AutofillOptionsFragment.class, +- AutofillOptionsFragment.createRequiredArgs( +- AutofillOptionsReferrer.SETTINGS)); +- return true; // Means event is consumed. +- }); ++ removePreferenceIfPresent(PREF_AUTOFILL_SECTION); ++ removePreferenceIfPresent(PREF_AUTOFILL_OPTIONS); + findPreference(PREF_AUTOFILL_PAYMENTS) + .setOnPreferenceClickListener( + preference -> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java -@@ -113,6 +113,13 @@ import java.lang.annotation.RetentionPolicy; - import java.nio.ByteBuffer; +@@ -116,6 +116,13 @@ import java.nio.ByteBuffer; import java.util.Objects; + import java.util.function.Supplier; +import org.chromium.components.autofill.AutofillSelectionMenuItemHelper; +import org.chromium.components.autofill.BrowserSelectionActionMenuDelegate; @@ -216,7 +227,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav /** * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}. This * class is not intended to be extended. -@@ -1133,6 +1140,11 @@ class TabImpl implements Tab { +@@ -1131,6 +1138,11 @@ class TabImpl implements Tab { for (TabObserver observer : mObservers) observer.onDestroyed(this); mObservers.clear(); @@ -228,15 +239,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav mUserDataHost.destroy(); mTabViewManager.destroy(); hideNativePage(false, null); -@@ -1443,6 +1455,7 @@ class TabImpl implements Tab { +@@ -1448,7 +1460,7 @@ class TabImpl implements Tab { * @return iff the AutofillProvider should provide a ViewStructure when prompted. */ boolean providesAutofillStructure() { +- + if ((true)) return true; - if (!ChromeFeatureList.isEnabled( - AutofillFeatures.AUTOFILL_VIRTUAL_VIEW_STRUCTURE_ANDROID)) { + if (mProfile == null || !mProfile.isNativeInitialized()) { return false; -@@ -2249,16 +2262,21 @@ class TabImpl implements Tab { + } +@@ -2251,16 +2263,21 @@ class TabImpl implements Tab { * @return true if the the provider is available for the given WebContents. */ private boolean prepareAutofillProvider(WebContents newWebContents) { @@ -261,10 +273,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav - } else { + assert isInitialized(); + if (mAutofillProvider == null) { + // TODO: crbug.com/432447902 — Provide only an activity context and push changes. mAutofillProvider = new AutofillProvider( - getContext(), -@@ -2267,7 +2285,16 @@ class TabImpl implements Tab { +@@ -2270,7 +2287,16 @@ class TabImpl implements Tab { getContext().getString(R.string.app_name)); TabImplJni.get().initializeAutofillIfNecessary(mNativeTabAndroid); } @@ -285,57 +297,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3990,28 +3990,6 @@ const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { - std::size(kLinkPreviewTriggerTypeLongPress), nullptr}}; +@@ -3984,9 +3984,6 @@ const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { #endif // !BUILDFLAG(IS_ANDROID) --#if BUILDFLAG(IS_ANDROID) --inline constexpr flags_ui::FeatureEntry::FeatureParam -- kAutofillVirtualViewStructureAndroidSkipCompatibilityCheck = { -- autofill::features:: -- kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck.name, -- "skip_all_checks"}; --inline constexpr flags_ui::FeatureEntry::FeatureParam -- kAutofillVirtualViewStructureAndroidOnlySkipAwgCheck = { -- autofill::features:: -- kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck.name, -- "only_skip_awg_check"}; -- --inline constexpr flags_ui::FeatureEntry::FeatureVariation -- kAutofillVirtualViewStructureVariation[] = { -- {" without any compatibility check", -- &kAutofillVirtualViewStructureAndroidSkipCompatibilityCheck, 1, -- nullptr}, -- {" without AwG restriction", -- &kAutofillVirtualViewStructureAndroidOnlySkipAwgCheck, 1, nullptr}}; + #if BUILDFLAG(IS_ANDROID) - -#endif // BUILDFLAG(IS_ANDROID) - const FeatureEntry::FeatureParam kGroupSuggestionEnableRecentlyOpenedOnly[] = { {"group_suggestion_enable_recently_opened", "true"}, {"group_suggestion_enable_switch_between", "false"}, -@@ -6618,17 +6596,6 @@ const FeatureEntry kFeatureEntries[] = { - SINGLE_VALUE_TYPE(ui_devtools::switches::kEnableUiDevTools)}, - #endif // BUILDFLAG(IS_CHROMEOS) - --#if BUILDFLAG(IS_ANDROID) -- {"enable-autofill-virtual-view-structure", -- flag_descriptions::kAutofillVirtualViewStructureAndroidName, -- flag_descriptions::kAutofillVirtualViewStructureAndroidDescription, -- kOsAndroid, -- FEATURE_WITH_PARAMS_VALUE_TYPE( -- autofill::features::kAutofillVirtualViewStructureAndroid, -- kAutofillVirtualViewStructureVariation, -- "Skip AutofillService Check")}, --#endif -- - #if BUILDFLAG(IS_CHROMEOS) - {"enable-touchscreen-calibration", - flag_descriptions::kTouchscreenCalibrationName, diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc --- a/chrome/browser/android/tab_android.cc +++ b/chrome/browser/android/tab_android.cc -@@ -444,8 +444,7 @@ void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) { +@@ -449,8 +449,7 @@ void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) { ->MaybeInitKeyboardSuppressor(); return; } @@ -348,7 +323,7 @@ diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_ diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/android/BUILD.gn --- a/chrome/browser/autofill/android/BUILD.gn +++ b/chrome/browser/autofill/android/BUILD.gn -@@ -164,7 +164,7 @@ android_library("bottom_sheet_utils_java") { +@@ -163,7 +163,7 @@ android_library("bottom_sheet_utils_java") { generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/autofill/AddressNormalizerFactory.java", @@ -360,12 +335,13 @@ diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java --- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java +++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillClientProviderUtils.java -@@ -82,8 +82,8 @@ public class AutofillClientProviderUtils { +@@ -77,9 +77,9 @@ public class AutofillClientProviderUtils { * @return {@link AndroidAutofillAvailabilityStatus.AVAILABLE} if Android Autofill can be used * or a reason why it can't. */ - @CalledByNative - public static int getAndroidAutofillFrameworkAvailability(PrefService prefs) { + public static int getAndroidAutofillFrameworkAvailability( + @JniType("PrefService*") PrefService prefs) { + if ((true)) return AndroidAutofillAvailabilityStatus.AVAILABLE; if (sAndroidAutofillFrameworkAvailabilityForTesting != null) { return sAndroidAutofillFrameworkAvailabilityForTesting; @@ -381,35 +357,6 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse if (createContentUri().equals(uri)) { final String[] columns = {AUTOFILL_THIRD_PARTY_MODE_COLUMN}; MatrixCursor cursor = new MatrixCursor(columns, 1); -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -988,12 +988,6 @@ const char kAutofillVcnEnrollStrikeExpiryTimeDescription[] = - "When enabled, changes the amount of time required for VCN enrollment " - "prompt strikes to expire."; - --const char kAutofillVirtualViewStructureAndroidName[] = -- "Enable the setting to provide a virtual view structure for Autofill"; --const char kAutofillVirtualViewStructureAndroidDescription[] = -- "When enabled, a setting allows to switch to using Android Autofill. Chrome" -- " then provides a virtual view structure but no own suggestions."; -- - const char kAutoPictureInPictureForVideoPlaybackName[] = - "Auto picture in picture for video playback"; - const char kAutoPictureInPictureForVideoPlaybackDescription[] = -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -597,9 +597,6 @@ extern const char kAutofillUploadCardRequestTimeoutDescription[]; - extern const char kAutofillVcnEnrollStrikeExpiryTimeName[]; - extern const char kAutofillVcnEnrollStrikeExpiryTimeDescription[]; - --extern const char kAutofillVirtualViewStructureAndroidName[]; --extern const char kAutofillVirtualViewStructureAndroidDescription[]; -- - extern const char kAutoPictureInPictureForVideoPlaybackName[]; - extern const char kAutoPictureInPictureForVideoPlaybackDescription[]; - 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 @@ -429,18 +376,18 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/browser/ui/autofill/autofill_client_provider.cc --- a/chrome/browser/ui/autofill/autofill_client_provider.cc +++ b/chrome/browser/ui/autofill/autofill_client_provider.cc -@@ -17,123 +17,17 @@ - #include "base/android/jni_string.h" - #include "base/task/thread_pool.h" - #include "chrome/browser/autofill/android/android_autofill_availability_status.h" --#include "chrome/browser/autofill/android/jni_headers/AutofillClientProviderUtils_jni.h" +@@ -20,94 +20,15 @@ #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "components/android_autofill/browser/android_autofill_client.h" + #include "components/prefs/android/pref_service_android.h" +- +-// Must come after all headers that specialize FromJniType() / ToJniType(). +-#include "chrome/browser/autofill/android/jni_headers/AutofillClientProviderUtils_jni.h" #endif // BUILDFLAG(IS_ANDROID) namespace autofill { -namespace { - +- -#if BUILDFLAG(IS_ANDROID) -void RecordAvailabilityStatus(AndroidAutofillAvailabilityStatus availability) { - base::UmaHistogramEnumeration("Autofill.AndroidAutofillAvailabilityStatus", @@ -471,18 +418,15 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro -void SetSharedPrefForDeepLink() { - Java_AutofillClientProviderUtils_setAutofillOptionsDeepLinkPref( - base::android::AttachCurrentThread(), -- base::FeatureList::IsEnabled( -- autofill::features::kAutofillVirtualViewStructureAndroid) && -- base::FeatureList::IsEnabled( -- autofill::features::kAutofillDeepLinkAutofillOptions)); --} - +- base::FeatureList::IsEnabled( +- autofill::features::kAutofillDeepLinkAutofillOptions)); +-} + -// Sets a shared pref that allows external apps to use a ContentResolver to -// figure out whether Chrome is using platform autofill over the default. -void SetSharedPrefForSettingsContentProvider(bool uses_platform_autofill) { - if (base::FeatureList::IsEnabled( -- autofill::features::kAutofillVirtualViewStructureAndroid) && -- base::FeatureList::IsEnabled( - autofill::features::kAutofillThirdPartyModeContentProvider)) { - Java_AutofillClientProviderUtils_setThirdPartyModePref( - base::android::AttachCurrentThread(), uses_platform_autofill); @@ -494,35 +438,9 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro - -AndroidAutofillAvailabilityStatus GetAndroidAutofillAvailabilityStatus( - PrefService& prefs) { -- AndroidAutofillAvailabilityStatus availability = static_cast< -- AndroidAutofillAvailabilityStatus>( +- return static_cast( - Java_AutofillClientProviderUtils_getAndroidAutofillFrameworkAvailability( -- base::android::AttachCurrentThread(), prefs.GetJavaObject())); -- // Check whether the returned availability is affected by feature parameters -- // that skip some checks on this client. -- switch (availability) { -- case AndroidAutofillAvailabilityStatus::kAndroidAutofillServiceIsGoogle: -- if (features::kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck -- .Get() == -- features::VirtualViewStructureSkipChecks::kOnlySkipAwGCheck) { -- availability = AndroidAutofillAvailabilityStatus::kAvailable; -- } -- ABSL_FALLTHROUGH_INTENDED; // No skip-awg-check but skip-all may apply. -- case AndroidAutofillAvailabilityStatus::kAndroidAutofillManagerNotAvailable: -- case AndroidAutofillAvailabilityStatus::kAndroidAutofillNotSupported: -- case AndroidAutofillAvailabilityStatus::kUnknownAndroidAutofillService: -- if (features::kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck -- .Get() == -- features::VirtualViewStructureSkipChecks::kSkipAllChecks) { -- availability = AndroidAutofillAvailabilityStatus::kAvailable; -- } -- return availability; -- case AndroidAutofillAvailabilityStatus::kAvailable: -- case AndroidAutofillAvailabilityStatus::kSettingTurnedOff: -- case AndroidAutofillAvailabilityStatus::kNotAllowedByPolicy: -- return availability; -- } -- NOTREACHED(); +- base::android::AttachCurrentThread(), &prefs)); -} -#endif // BUILDFLAG(IS_ANDROID) - @@ -555,7 +473,7 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro #endif // BUILDFLAG(IS_ANDROID) } -@@ -141,15 +35,7 @@ AutofillClientProvider::~AutofillClientProvider() = default; +@@ -115,15 +36,7 @@ AutofillClientProvider::~AutofillClientProvider() = default; void AutofillClientProvider::CreateClientForWebContents( content::WebContents* web_contents) { @@ -571,7 +489,7 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro } #if BUILDFLAG(IS_ANDROID) -@@ -161,12 +47,6 @@ void AutofillClientProvider::RegisterSyntheticFieldTrialForPackage( +@@ -135,12 +48,6 @@ void AutofillClientProvider::RegisterSyntheticFieldTrialForPackage( } void AutofillClientProvider::DelayRegisteringFieldTrialForA11yDeprecation() { @@ -610,7 +528,7 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.h b/chrome/brow diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -385,9 +385,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -391,9 +391,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents); ChainedBackNavigationTracker::CreateForWebContents(web_contents); chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents); @@ -667,15 +585,15 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component if (event == EVENT_INPUT_SHOWN) manager.notifyInputUiChange(); } } -@@ -129,6 +130,7 @@ public class AutofillManagerWrapper { +@@ -120,6 +121,7 @@ public class AutofillManagerWrapper { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - ComponentName componentName = getAutofillServiceComponentName(autofillManager); + ComponentName componentName = getAutofillServiceComponentName(mAutofillManager); + if (isLoggable()) log("componentName=" + componentName); if (componentName != null) { mPackageName = componentName.getPackageName(); mIsAwGCurrentAutofillService = -@@ -350,7 +352,7 @@ public class AutofillManagerWrapper { +@@ -352,7 +354,7 @@ public class AutofillManagerWrapper { /** Always check isLoggable() before call this method. */ public static void log(String log) { // Log.i() instead of Log.d() is used here because Log.d() is stripped out in release build. @@ -684,7 +602,7 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component } public static boolean isLoggable() { -@@ -364,5 +366,6 @@ public class AutofillManagerWrapper { +@@ -366,5 +368,6 @@ public class AutofillManagerWrapper { // NOTE: See the comment on TAG above for why this is still AwAutofillManager. // Check the system setting directly. sIsLoggable = android.util.Log.isLoggable(TAG, Log.DEBUG); @@ -694,9 +612,9 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProvider.java -@@ -220,6 +220,10 @@ public class AutofillProvider { - - /** @return whether query autofill suggestion. */ +@@ -252,6 +252,10 @@ public class AutofillProvider { + * @return whether query autofill suggestion. + */ public boolean shouldQueryAutofillSuggestion() { + AutofillManagerWrapper.log("---shouldQueryAutofillSuggestion" + + " mRequest != null=" + (mRequest != null) + @@ -705,7 +623,7 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component return mRequest != null && mRequest.getFocusField() != null && !getAutofillManagerWrapper().isAutofillInputUiShowing(); -@@ -228,6 +232,7 @@ public class AutofillProvider { +@@ -260,6 +264,7 @@ public class AutofillProvider { public boolean shouldOfferPasskeyEntry() { if (!AndroidAutofillFeatures.ANDROID_AUTOFILL_VIRTUAL_VIEW_STRUCTURE_PASSKEY_LONG_PRESS .isEnabled()) { @@ -713,7 +631,7 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component return false; } return AutofillProviderJni.get().hasPasskeyRequest(mNativeAutofillProvider); -@@ -240,6 +245,7 @@ public class AutofillProvider { +@@ -272,6 +277,7 @@ public class AutofillProvider { } public void queryAutofillSuggestion() { @@ -721,7 +639,7 @@ diff --git a/components/android_autofill/browser/java/src/org/chromium/component if (shouldQueryAutofillSuggestion()) { FocusField focusField = mRequest.getFocusField(); getAutofillManagerWrapper() -@@ -302,6 +308,7 @@ public class AutofillProvider { +@@ -334,6 +340,7 @@ public class AutofillProvider { float width, float height, boolean hasServerPrediction) { @@ -953,7 +871,7 @@ diff --git a/components/autofill/core/browser/foundations/autofill_driver_factor diff --git a/components/autofill/core/browser/foundations/autofill_manager.h b/components/autofill/core/browser/foundations/autofill_manager.h --- a/components/autofill/core/browser/foundations/autofill_manager.h +++ b/components/autofill/core/browser/foundations/autofill_manager.h -@@ -223,6 +223,8 @@ class AutofillManager +@@ -225,6 +225,8 @@ class AutofillManager LifecycleState new_state, base::PassKey pass_key); @@ -965,7 +883,7 @@ diff --git a/components/autofill/core/browser/foundations/autofill_manager.h b/c diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc -@@ -753,6 +753,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { +@@ -809,6 +809,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } @@ -989,51 +907,19 @@ diff --git a/components/autofill/core/browser/foundations/browser_autofill_manag diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc -@@ -948,7 +948,7 @@ BASE_FEATURE(kAutofillThirdPartyModeContentProvider, - BASE_FEATURE(kAutofillVirtualViewStructureAndroid, - "AutofillVirtualViewStructureAndroid", +@@ -935,7 +935,7 @@ BASE_FEATURE(kAutofillEnableSecurityTouchEventFilteringAndroid, + BASE_FEATURE(kAutofillThirdPartyModeContentProvider, + "AutofillThirdPartyModeContentProvider", base::FEATURE_ENABLED_BY_DEFAULT); - +SET_CROMITE_FEATURE_ENABLED(kAutofillVirtualViewStructureAndroid); #endif // BUILDFLAG(IS_ANDROID) - namespace test { -diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h ---- a/components/autofill/core/common/autofill_features.h -+++ b/components/autofill/core/common/autofill_features.h -@@ -338,28 +338,6 @@ COMPONENT_EXPORT(AUTOFILL) - BASE_DECLARE_FEATURE(kAutofillThirdPartyModeContentProvider); - COMPONENT_EXPORT(AUTOFILL) - BASE_DECLARE_FEATURE(kAutofillVirtualViewStructureAndroid); -- --// Used as param for `kAutofillVirtualViewStructureAndroid` to allow --// skipping certain checks when testing manually. --enum class VirtualViewStructureSkipChecks { -- kDontSkip = 0, -- kSkipAllChecks = 1, -- kOnlySkipAwGCheck = 2, --}; -- --inline constexpr base::FeatureParam::Option -- kVirtualViewStructureSkipChecksOption[] = { -- {VirtualViewStructureSkipChecks::kDontSkip, "dont_skip"}, -- {VirtualViewStructureSkipChecks::kSkipAllChecks, "skip_all_checks"}, -- {VirtualViewStructureSkipChecks::kOnlySkipAwGCheck, -- "only_skip_awg_check"}, --}; --inline constexpr base::FeatureParam -- kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck{ -- &kAutofillVirtualViewStructureAndroid, "skip_compatibility_check", -- VirtualViewStructureSkipChecks::kDontSkip, -- &kVirtualViewStructureSkipChecksOption}; -- - #endif // BUILDFLAG(IS_ANDROID) - - #if BUILDFLAG(IS_APPLE) + // Defines if the "Your Saved Info" page is eligible to be shown in Chrome diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -56,6 +56,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -62,6 +62,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(kAutofillCreditCardFidoAuthOfferCheckboxState, true); #endif @@ -1042,7 +928,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto registry->RegisterIntegerPref(kAutocompleteLastVersionRetentionPolicy, 0); registry->RegisterStringPref(kAutofillUploadEncodingSeed, ""); registry->RegisterDictionaryPref(kAutofillVoteUploadEvents); -@@ -95,7 +97,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -101,7 +103,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -1054,7 +940,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h --- a/components/autofill/core/common/autofill_prefs.h +++ b/components/autofill/core/common/autofill_prefs.h -@@ -110,6 +110,11 @@ inline constexpr char kAutofillUploadEventsLastResetTimestamp[] = +@@ -118,6 +118,11 @@ inline constexpr char kAutofillNameAndEmailProfileNotSelectedCounter[] = // retention policy was run. inline constexpr char kAutocompleteLastVersionRetentionPolicy[] = "autocomplete.retention_policy_last_version"; diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index c0104f48..d9bcd35f 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -91,17 +91,17 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsNavigationImpl.java -@@ -12,6 +12,9 @@ import android.os.Bundle; - import androidx.annotation.Nullable; +@@ -11,6 +11,9 @@ import android.os.Bundle; + import androidx.fragment.app.Fragment; +import org.chromium.base.ContextUtils; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; + import org.chromium.base.IntentUtils; - import org.chromium.chrome.browser.autofill.settings.AutofillPaymentMethodsFragment; - import org.chromium.chrome.browser.autofill.settings.FinancialAccountsManagementFragment; -@@ -31,6 +34,13 @@ public class SettingsNavigationImpl implements SettingsNavigation { + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; +@@ -32,6 +35,13 @@ public class SettingsNavigationImpl implements SettingsNavigation { /** Instantiated through SettingsNavigationFactory. */ SettingsNavigationImpl() {} @@ -130,7 +130,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -509,7 +514,7 @@ are declared in tools/grit/grit_args.gni. +@@ -527,7 +532,7 @@ are declared in tools/grit/grit_args.gni. Disable @@ -142,7 +142,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp -@@ -2236,6 +2236,9 @@ +@@ -2218,6 +2218,9 @@ URL with %s in place of query @@ -420,7 +420,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3698,6 +3698,9 @@ static_library("browser") { +@@ -3706,6 +3706,9 @@ static_library("browser") { "//components/user_scripts/android", ] } @@ -459,7 +459,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h" -@@ -497,6 +503,15 @@ void PopulateChromeWebUIFrameBinders( +@@ -503,6 +509,15 @@ void PopulateChromeWebUIFrameBinders( } #endif @@ -475,7 +475,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b #if !BUILDFLAG(IS_ANDROID) RegisterWebUIControllerInterfaceBinder< actor_internals::mojom::PageHandlerFactory, ActorInternalsUI>(map); -@@ -653,6 +668,9 @@ void PopulateChromeWebUIFrameBinders( +@@ -660,6 +675,9 @@ void PopulateChromeWebUIFrameBinders( RegisterWebUIControllerInterfaceBinder(map); @@ -485,7 +485,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b RegisterWebUIControllerInterfaceBinder< password_manager::mojom::PageHandlerFactory, PasswordManagerUI>(map); -@@ -676,6 +694,9 @@ void PopulateChromeWebUIFrameBinders( +@@ -683,6 +701,9 @@ void PopulateChromeWebUIFrameBinders( CertificateManagerUI>(map); #endif // BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI) @@ -510,7 +510,7 @@ diff --git a/chrome/browser/extensions/extension_util.h b/chrome/browser/extensi diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn -@@ -27,6 +27,13 @@ group("resources") { +@@ -28,6 +28,13 @@ group("resources") { public_deps += [ ":component_extension_resources" ] } @@ -936,7 +936,7 @@ diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -680,7 +680,11 @@ static_library("ui") { +@@ -671,7 +671,11 @@ static_library("ui") { deps += [ "//chrome/browser/ui/android/extensions/windowing/internal" ] } } @@ -949,7 +949,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn # TODO(crbug.com/413572035): Move into build files of the actual # modules depending on this. eg: autofill, user_education. if (is_chrome_branded) { -@@ -969,6 +973,25 @@ static_library("ui") { +@@ -985,6 +989,25 @@ static_library("ui") { "//extensions/browser:extension_action_enums", ] } @@ -1171,7 +1171,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #if BUILDFLAG(ENABLE_WEBUI_CERTIFICATE_VIEWER) #include "chrome/browser/ui/webui/certificate_viewer/certificate_viewer_ui.h" #endif -@@ -439,4 +444,7 @@ void RegisterChromeWebUIConfigs() { +@@ -441,4 +446,7 @@ void RegisterChromeWebUIConfigs() { #if BUILDFLAG(ENTERPRISE_WATERMARK) map.AddWebUIConfig(std::make_unique()); #endif @@ -1388,7 +1388,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.h b/chrome/ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -2571,6 +2571,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { +@@ -2560,6 +2560,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { {"searchEnginesQueryURL", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL}, {"searchEnginesQueryURLExplanation", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL_EXPLANATION}, @@ -1397,7 +1397,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide {"searchEnginesMakeDefault", IDS_SETTINGS_SEARCH_ENGINES_MAKE_DEFAULT}, {"searchEnginesActivate", IDS_SETTINGS_SEARCH_ENGINES_ACTIVATE}, {"searchEnginesDeactivate", IDS_SETTINGS_SEARCH_ENGINES_DEACTIVATE}, -@@ -3906,7 +3908,11 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3849,7 +3851,11 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, AddSiteSettingsStrings(html_source, profile); AddSiteDataPageStrings(html_source, profile); AddStorageAccessStrings(html_source); @@ -1890,7 +1890,7 @@ new file mode 100644 diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni -@@ -190,6 +190,17 @@ template("chrome_extra_paks") { +@@ -189,6 +189,17 @@ template("chrome_extra_paks") { deps += [ "//chrome/browser/resources:component_extension_resources" ] } @@ -1957,7 +1957,7 @@ diff --git a/components/search_engines/search_engines_switches.cc b/components/s diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc -@@ -2079,6 +2079,10 @@ void TemplateURL::SetURL(const std::string& url) { +@@ -2125,6 +2125,10 @@ void TemplateURL::SetURL(const std::string& url) { url_ref().InvalidateCachedValues(); } @@ -1971,7 +1971,7 @@ diff --git a/components/search_engines/template_url.cc b/components/search_engin diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h --- a/components/search_engines/template_url.h +++ b/components/search_engines/template_url.h -@@ -989,6 +989,7 @@ class TemplateURL { +@@ -1007,6 +1007,7 @@ class TemplateURL { bool CreatedByRegulatoryProgram() const; void SetURL(const std::string& url); @@ -2020,7 +2020,7 @@ diff --git a/components/search_engines/template_url_service.cc b/components/sear diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h --- a/components/search_engines/template_url_service.h +++ b/components/search_engines/template_url_service.h -@@ -255,7 +255,8 @@ class TemplateURLService final : public WebDataServiceConsumer, +@@ -259,7 +259,8 @@ class TemplateURLService final : public WebDataServiceConsumer, TemplateURL* AddWithOverrides(std::unique_ptr template_url, const std::u16string& short_name, const std::u16string& keyword, @@ -2030,7 +2030,7 @@ diff --git a/components/search_engines/template_url_service.h b/components/searc // Removes the keyword from the model. This deletes the supplied TemplateURL. // This fails if the supplied template_url is the default search provider. -@@ -341,7 +342,8 @@ class TemplateURLService final : public WebDataServiceConsumer, +@@ -345,7 +346,8 @@ class TemplateURLService final : public WebDataServiceConsumer, void ResetTemplateURL(TemplateURL* url, const std::u16string& title, const std::u16string& keyword, @@ -2136,7 +2136,7 @@ diff --git a/third_party/polymer/v3_0/BUILD.gn b/third_party/polymer/v3_0/BUILD. diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc --- a/ui/base/template_expressions.cc +++ b/ui/base/template_expressions.cc -@@ -20,6 +20,7 @@ +@@ -16,6 +16,7 @@ #include "base/notreached.h" #include "base/strings/escape.h" #include "base/values.h" @@ -2144,7 +2144,7 @@ diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc #if DCHECK_IS_ON() #include "third_party/re2/src/re2/re2.h" // nogncheck -@@ -171,11 +172,25 @@ bool ReplaceTemplateExpressionsInternal( +@@ -168,11 +169,25 @@ bool ReplaceTemplateExpressionsInternal( std::string key(source.substr(current_pos, key_end - current_pos)); CHECK(!key.empty()); diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index c9c21a50..d830fb24 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -118,9 +118,9 @@ diff --git a/cc/base/features.cc b/cc/base/features.cc + "DisableToolbarSwipeUp", + base::FEATURE_DISABLED_BY_DEFAULT); + - BASE_FEATURE(kMainRepaintScrollPrefersNewContent, - "MainRepaintScrollPrefersNewContent", - base::FEATURE_ENABLED_BY_DEFAULT); + BASE_FEATURE(kDeferImplInvalidation, + "DeferImplInvalidation", + base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/cc/base/features.h b/cc/base/features.h --- a/cc/base/features.h +++ b/cc/base/features.h @@ -131,8 +131,8 @@ diff --git a/cc/base/features.h b/cc/base/features.h +CC_BASE_EXPORT BASE_DECLARE_FEATURE(kMoveTopToolbarToBottom); +CC_BASE_EXPORT BASE_DECLARE_FEATURE(kDisableToolbarSwipeUp); - // Sets raster tree priority to NEW_CONTENT_TAKES_PRIORITY when performing a - // unified scroll with main-thread repaint reasons. + // When enabled, the scheduler will allow deferring impl invalidation frames + // for N frames (default 1) to reduce contention with main frames, allowing diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_controls_offset_manager.cc --- a/cc/input/browser_controls_offset_manager.cc +++ b/cc/input/browser_controls_offset_manager.cc @@ -159,7 +159,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -5098,6 +5098,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -5137,6 +5137,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -172,14 +172,14 @@ 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 -@@ -58,6 +58,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; +@@ -57,6 +57,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; +import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; import java.util.List; - + import java.util.function.Supplier; @@ -196,7 +197,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T @Initializer public void initializeWithNative( @@ -203,9 +203,9 @@ 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 -@@ -76,6 +76,12 @@ import org.chromium.url.GURL; - import java.util.List; +@@ -76,6 +76,12 @@ import java.util.List; import java.util.Objects; + import java.util.function.Supplier; +import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +import org.chromium.chrome.browser.tab.CurrentTabObserver; @@ -415,7 +415,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import android.graphics.Rect; import android.util.Size; import android.view.InputDevice; -@@ -75,6 +81,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; +@@ -74,6 +80,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.recyclerview.widget.ItemTouchHelper2; import org.chromium.ui.widget.ViewLookupCachingFrameLayout; @@ -549,7 +549,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Construct a coordinator for UI that shows a list of tabs. * -@@ -415,6 +541,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -416,6 +542,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO checkAwaitingLayout(); } }; @@ -562,7 +562,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -434,6 +566,25 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -435,6 +567,25 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO } }; mRecyclerView.setLayoutManager(layoutManager); @@ -588,7 +588,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -456,7 +607,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -455,7 +606,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO assumeNonNull(mTabListEmptyCoordinator); mTabListEmptyCoordinator = new TabListEmptyCoordinator( @@ -597,7 +597,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mTabListHighlighter = new TabListHighlighter(mModelList); mTabListMergeAnimationManager = new TabListMergeAnimationManager(mRecyclerView); -@@ -790,6 +941,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -792,6 +943,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); @@ -667,7 +667,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneBase.java -@@ -46,6 +46,7 @@ import org.chromium.build.BuildConfig; +@@ -45,6 +45,7 @@ import org.chromium.build.BuildConfig; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -683,7 +683,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * @param context The activity context. -@@ -471,6 +473,13 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc +@@ -473,6 +475,13 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc Log.d(TAG, "Geometry not ready using fallback animation."); useFallbackAnimation = true; } @@ -708,7 +708,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -@@ -661,6 +662,9 @@ public class FeedSurfaceCoordinator +@@ -681,6 +682,9 @@ public class FeedSurfaceCoordinator ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMarginStart(margin); layoutParams.setMarginEnd(margin); @@ -721,7 +721,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -48,7 +48,8 @@ for the previous order (main_preferences_legacy). --> +@@ -44,7 +44,8 @@ found in the LICENSE file. android:fragment="org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment" android:key="address_bar" android:order="7" @@ -843,7 +843,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/He diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -@@ -268,6 +268,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -270,6 +270,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -854,7 +854,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp if (forwarder != null) forwarder.setCurrentTouchOffsetY(top); } -@@ -917,6 +921,9 @@ public class CompositorViewHolder extends FrameLayout +@@ -941,6 +945,9 @@ public class CompositorViewHolder extends FrameLayout ? assumeNonNull(mApplicationBottomInsetSupplier.get()) .webContentsHeightInset : 0; @@ -867,15 +867,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java -@@ -44,6 +44,7 @@ import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.Sc - import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.SwipeHandler; +@@ -43,6 +43,7 @@ import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.Sw import org.chromium.ui.resources.dynamics.DynamicResourceLoader; + import org.chromium.ui.util.AccessibilityUtil; import org.chromium.ui.util.XrUtils; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import java.util.List; - -@@ -161,7 +162,9 @@ public class LayoutManagerChrome extends LayoutManagerImpl + import java.util.function.Supplier; +@@ -161,7 +162,9 @@ public class LayoutManagerChrome extends LayoutManagerImpl implements Accessibil @Override public SwipeHandler createToolbarSwipeHandler(boolean supportsSwipeToShowTabSwitcher) { @@ -886,7 +886,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } @Override -@@ -389,9 +392,11 @@ public class LayoutManagerChrome extends LayoutManagerImpl +@@ -390,9 +393,11 @@ public class LayoutManagerChrome extends LayoutManagerImpl implements Accessibil private static final float SWIPE_RANGE_DEG = 25; private final boolean mSupportsSwipeToShowTabSwitcher; @@ -899,7 +899,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } @Override -@@ -498,7 +503,8 @@ public class LayoutManagerChrome extends LayoutManagerImpl +@@ -499,7 +504,8 @@ public class LayoutManagerChrome extends LayoutManagerImpl implements Accessibil return direction == showTabSwitcherScrollDirection || direction == ScrollDirection.LEFT @@ -912,15 +912,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java -@@ -42,6 +42,7 @@ import org.chromium.ui.base.WindowAndroid; +@@ -41,6 +41,7 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.dragdrop.DragAndDropDelegate; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; import org.chromium.ui.xr.scenecore.XrSceneCoreSessionManager; +import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; - /** LayoutManagerChromeTablet is the specialization of LayoutManagerChrome for the tablet. */ - @NullMarked -@@ -152,7 +153,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { + import java.util.function.Supplier; + +@@ -153,7 +154,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { bottomSheetController, shareDelegateSupplier, xrSpaceModeObservableSupplier, @@ -971,7 +971,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java -@@ -355,7 +355,7 @@ public class ScrollDelegate { +@@ -361,7 +361,7 @@ public class ScrollDelegate { boolean useUnadjustedScrollOffset = isRtl != isLeft; float scrollOffset = mScrollOffset; @@ -990,7 +990,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over +import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; - import org.chromium.base.supplier.Supplier; + import org.chromium.build.annotations.EnsuresNonNullIf; @@ -116,6 +117,8 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.util.ColorUtils; @@ -1000,7 +1000,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.util.ArrayList; import java.util.List; -@@ -272,12 +275,16 @@ public class StripLayoutHelperManager +@@ -274,12 +277,16 @@ public class StripLayoutHelperManager // Drag-Drop private @Nullable TabStripDragHandler mTabStripDragHandler; @@ -1017,7 +1017,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null && mModelSelectorButton.onDown(x, y, buttons)) { return; } -@@ -302,6 +309,7 @@ public class StripLayoutHelperManager +@@ -304,6 +311,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1025,7 +1025,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null) { mModelSelectorButton.drag(x, y); } -@@ -313,6 +321,7 @@ public class StripLayoutHelperManager +@@ -315,6 +323,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1033,7 +1033,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over long time = time(); if (mModelSelectorButton != null && mModelSelectorButton.click(x, y, buttons)) { mModelSelectorButton.handleClick(time, buttons, modifiers); -@@ -326,6 +335,7 @@ public class StripLayoutHelperManager +@@ -328,6 +337,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1041,7 +1041,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().fling(time(), x, y, velocityX, velocityY); } -@@ -334,6 +344,7 @@ public class StripLayoutHelperManager +@@ -336,6 +346,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1049,7 +1049,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(x, y); } -@@ -475,7 +486,8 @@ public class StripLayoutHelperManager +@@ -477,7 +488,8 @@ public class StripLayoutHelperManager BottomSheetController bottomSheetController, Supplier shareDelegateSupplier, @Nullable ObservableSupplier xrSpaceModeObservableSupplier, @@ -1059,7 +1059,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mContext = context; Resources res = context.getResources(); mManagerHost = managerHost; -@@ -586,6 +598,8 @@ public class StripLayoutHelperManager +@@ -591,6 +603,8 @@ public class StripLayoutHelperManager multiInstanceManager, shareDelegateSupplier, TabGroupListBottomSheetCoordinator::new); @@ -1068,7 +1068,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over tabHoverCardViewStub.setOnInflateListener( (viewStub, view) -> { -@@ -854,6 +868,10 @@ public class StripLayoutHelperManager +@@ -860,6 +874,10 @@ public class StripLayoutHelperManager yOffset = 0; } @@ -1079,10 +1079,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mTabStripTreeProvider.pushAndUpdateStrip( this, mLayerTitleCacheSupplier.get(), -@@ -867,7 +885,9 @@ public class StripLayoutHelperManager +@@ -873,7 +891,9 @@ public class StripLayoutHelperManager mStripTransitionScrimOpacity, - mLeftPadding, - mRightPadding, + getActiveStripLayoutHelper().getLeftPaddingToDraw(), + getActiveStripLayoutHelper().getRightPaddingToDraw(), - mTopPadding); + mTopPadding, + viewport.height(), @@ -1090,7 +1090,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over return mTabStripTreeProvider; } -@@ -933,11 +953,21 @@ public class StripLayoutHelperManager +@@ -939,11 +959,21 @@ public class StripLayoutHelperManager mRightPadding, mTopPadding); @@ -1166,9 +1166,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java -@@ -26,6 +26,9 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneLayer; - import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; +@@ -34,6 +34,9 @@ import org.chromium.chrome.browser.tab.TabUtils; import org.chromium.chrome.browser.tasks.tab_management.TabUiThemeUtil; + import org.chromium.components.tab_groups.TabGroupColorId; import org.chromium.ui.resources.ResourceManager; +import org.chromium.ui.base.DeviceFormFactor; +import org.chromium.base.ContextUtils; @@ -1176,7 +1176,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen /** * The Java component of what is basically a CC Layer that manages drawing the Tab Strip (which is -@@ -106,10 +109,23 @@ public class TabStripSceneLayer extends SceneOverlayLayer { +@@ -115,10 +118,23 @@ public class TabStripSceneLayer extends SceneOverlayLayer { float scrimOpacity, float leftPaddingDp, float rightPaddingDp, @@ -1205,7 +1205,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java --- a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java -@@ -16,6 +16,8 @@ import android.widget.FrameLayout; +@@ -15,6 +15,8 @@ import android.view.View; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; @@ -1214,15 +1214,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/Find import org.chromium.chrome.R; import org.chromium.components.browser_ui.widget.animation.CancelAwareAnimatorListener; import org.chromium.ui.interpolators.Interpolators; -@@ -173,9 +175,11 @@ public class FindToolbarTablet extends FindToolbar { +@@ -172,9 +174,11 @@ public class FindToolbarTablet extends FindToolbar { if (show && getVisibility() != View.VISIBLE && mCurrentAnimation != mAnimationEnter) { View anchorView = getRootView().findViewById(R.id.toolbar); -- FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); +- var lp = (MarginLayoutParams) getLayoutParams(); - lp.topMargin = anchorView.getBottom() - mYInsetPx; - setLayoutParams(lp); + if (!ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { -+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); ++ var lp = (MarginLayoutParams) getLayoutParams(); + lp.topMargin = anchorView.getBottom() - mYInsetPx; + setLayoutParams(lp); + } @@ -1232,7 +1232,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/Find diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java -@@ -54,6 +54,8 @@ import org.chromium.ui.OffsetTagConstraints; +@@ -55,6 +55,8 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.util.TokenHolder; @@ -1241,7 +1241,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow /** A class that manages browser control visibility and positioning. */ @NullMarked public class BrowserControlsManager implements ActivityStateListener, BrowserControlsSizer { -@@ -580,6 +582,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -589,6 +591,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon } } @@ -1256,7 +1256,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow @Override public int getTopControlsMinHeight() { return mTopControlsMinHeight; -@@ -681,6 +691,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -690,6 +700,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon @Override public float getTopVisibleContentOffset() { @@ -1307,7 +1307,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/messages/Messag diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java --- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java -@@ -352,7 +352,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter +@@ -354,7 +354,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter Resources resources, BrowserControlsStateProvider provider) { int scrimVerticalMargin = resources.getDimensionPixelSize(R.dimen.tab_modal_scrim_vertical_margin); @@ -1327,7 +1327,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import androidx.annotation.NonNull; import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; -@@ -839,11 +840,16 @@ public class NewTabPage +@@ -840,11 +841,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1346,7 +1346,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -859,9 +865,7 @@ public class NewTabPage +@@ -860,9 +866,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1370,7 +1370,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; -@@ -216,7 +219,12 @@ public class NewTabPageLayout extends LinearLayout +@@ -219,7 +222,12 @@ public class NewTabPageLayout extends LinearLayout mFakeSearchBoxLayout = findViewById(R.id.search_box); mFakeSearchBoxEditText = findViewById(R.id.search_box_text); initializeSiteSectionView(); @@ -1387,10 +1387,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java -@@ -34,6 +34,7 @@ import org.chromium.components.browser_ui.styles.SemanticColorUtils; - import org.chromium.components.embedder_support.util.UrlConstants; +@@ -34,6 +34,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ViewUtils; + import org.chromium.ui.edge_to_edge.EdgeToEdgePadAdjuster; +import org.chromium.chrome.browser.flags.ChromeFeatureList; /** @@ -1463,7 +1463,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -@@ -85,6 +85,11 @@ import org.chromium.url.GURL; +@@ -86,6 +86,11 @@ import org.chromium.url.GURL; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -1506,9 +1506,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java -@@ -28,6 +28,10 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; - import org.chromium.ui.resources.ResourceManager; - import org.chromium.ui.resources.dynamics.ViewResourceAdapter; +@@ -31,6 +31,10 @@ import org.chromium.ui.resources.dynamics.ViewResourceAdapter; + + import java.util.function.Supplier; +import android.view.Gravity; +import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -1517,7 +1517,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato /** * The coordinator for a status indicator that is positioned below the status bar and is persistent. * Typically used to relay status, e.g. indicate user is offline. -@@ -200,6 +204,11 @@ public class StatusIndicatorCoordinator implements TopControlLayer { +@@ -205,6 +209,11 @@ public class StatusIndicatorCoordinator implements TopControlLayer { private void initialize() { final ViewStub stub = mActivity.findViewById(R.id.status_indicator_stub); final ViewResourceFrameLayout root = (ViewResourceFrameLayout) stub.inflate(); @@ -1555,9 +1555,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -218,6 +218,9 @@ import org.chromium.url.GURL; - +@@ -219,6 +219,9 @@ import org.chromium.url.GURL; import java.util.List; + import java.util.function.Supplier; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import android.view.Gravity; @@ -1565,8 +1565,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -863,6 +866,17 @@ public class ToolbarManager - }, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); +@@ -870,6 +873,17 @@ public class ToolbarManager + mToolbarPositionSupplier, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -1583,7 +1583,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1505,6 +1519,7 @@ public class ToolbarManager +@@ -1531,6 +1545,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1591,7 +1591,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1518,6 +1533,7 @@ public class ToolbarManager +@@ -1544,6 +1559,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1599,7 +1599,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -2122,9 +2138,21 @@ public class ToolbarManager +@@ -2149,9 +2165,21 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarViewRectProvider(); } @@ -1622,7 +1622,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar assert mTabGroupUiOneshotSupplier == null; assert mUndoBarThrottle != null; ThemeColorProvider bottomUiThemeColorProvider = -@@ -2139,7 +2167,7 @@ public class ToolbarManager +@@ -2166,7 +2194,7 @@ public class ToolbarManager mActivityTabProvider, mTabModelSelector, mActivity, @@ -1631,7 +1631,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsSizer, mScrimManager, mOmniboxFocusStateSupplier, -@@ -2166,7 +2194,7 @@ public class ToolbarManager +@@ -2193,7 +2221,7 @@ public class ToolbarManager mControlsVisibilityDelegate, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1640,7 +1640,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -2174,7 +2202,8 @@ public class ToolbarManager +@@ -2201,7 +2229,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1700,16 +1700,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu +import android.os.Build; import androidx.annotation.ColorInt; - import androidx.annotation.Nullable; -@@ -20,6 +21,7 @@ import org.chromium.base.supplier.ObservableSupplier; - import org.chromium.base.supplier.OneshotSupplier; + import androidx.annotation.VisibleForTesting; +@@ -21,6 +22,7 @@ import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.layouts.LayoutManager; import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; -@@ -503,6 +505,12 @@ public class StatusBarColorController +@@ -528,6 +530,12 @@ public class StatusBarColorController UiUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); UiUtils.setStatusBarColor(window, color); } @@ -1733,7 +1733,7 @@ diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/b #include "cc/resources/scoped_ui_resource.h" #include "cc/slim/layer.h" #include "cc/slim/nine_patch_layer.h" -@@ -116,8 +117,13 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, +@@ -117,8 +118,13 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, debug_layer_->RemoveFromParent(); // Position the toolbar at the bottom of the space available for top controls. @@ -1747,20 +1747,20 @@ diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/b + gfx::PointF(x_offset, content_offset - layer_->bounds().height())); + } - layer_->SetOffsetTag(offset_tag); - } + if (features::IsAndroidAnimatedProgressBarInVizEnabled()) { + toolbar_layers_->SetOffsetTag(offset_tag); diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc --- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc +++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc -@@ -17,6 +17,7 @@ - #include "ui/android/resources/resource_manager_impl.h" +@@ -18,6 +18,7 @@ + #include "ui/base/l10n/l10n_util_android.h" #include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/transform.h" +#include "cc/base/features.h" // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/TabStripSceneLayer_jni.h" -@@ -124,8 +125,10 @@ void TabStripSceneLayer::SetContentTree( +@@ -151,8 +152,10 @@ void TabStripSceneLayer::SetContentTree( content_tree_ = content_tree; if (content_tree) { layer()->InsertChild(content_tree->layer(), 0); @@ -1773,7 +1773,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer } } } -@@ -181,7 +184,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, +@@ -208,7 +211,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, jfloat right_padding, jfloat top_padding) { gfx::RectF content(0, y_offset, width, height); @@ -1787,15 +1787,15 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer background_layer_->SetBounds(gfx::Size(width, height)); background_layer_->SetBackgroundColor(SkColor4f::FromColor(background_color)); -@@ -190,7 +198,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, +@@ -217,7 +225,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, tab_strip_layer_->SetPosition(gfx::PointF(0, top_padding)); // Content tree should not be affected by tab strip scene layer visibility. -- if (content_tree_) -+ if (content_tree_ && !base::FeatureList::IsEnabled(::features::kMoveTopToolbarToBottom)) +- if (content_tree_) { ++ if (content_tree_ && !base::FeatureList::IsEnabled(::features::kMoveTopToolbarToBottom)) { content_tree_->layer()->SetPosition(gfx::PointF(0, -y_offset)); + } - // Update left and right padding layers as required. diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java @@ -1833,7 +1833,7 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java -@@ -124,6 +124,12 @@ public interface BrowserControlsStateProvider { +@@ -127,6 +127,12 @@ public interface BrowserControlsStateProvider { */ int getTopControlsHairlineHeight(); @@ -1880,10 +1880,10 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse #include "chrome/browser/android/webapk/webapk_features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/contextmenu/context_menu_features.h" -@@ -354,6 +355,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -362,6 +363,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kMvcUpdateViewWhenModelChanged, &kNativePageTransitionHardwareCapture, &kNavBarColorAnimation, - &kNewTabPageAndroidTriggerForPrerender2, + &features::kMoveTopToolbarToBottom, + &features::kDisableToolbarSwipeUp, &kNotificationPermissionVariant, @@ -1892,8 +1892,8 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -490,6 +490,10 @@ public abstract class ChromeFeatureList { - "NewTabPageAndroidTriggerForPrerender2"; +@@ -499,6 +499,10 @@ public abstract class ChromeFeatureList { + public static final String NAV_BAR_COLOR_ANIMATION = "NavBarColorAnimation"; public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT = "NewTabPageCustomizationForMvt"; + public static final String DISABLE_TOOLBAR_SWIPE_UP = @@ -1903,10 +1903,10 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = "NewTabPageCustomizationToolbarButton"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_V2 = "NewTabPageCustomizationV2"; -@@ -980,6 +984,10 @@ public abstract class ChromeFeatureList { - newCachedFlag(NOTIFICATION_TRAMPOLINE, false); +@@ -1027,6 +1031,10 @@ public abstract class ChromeFeatureList { public static final CachedFlag sOptimizationGuidePushNotifications = newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true); + public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true); + public static final CachedFlag sDisableToolbarSwipeUp = + newCachedFlag(DISABLE_TOOLBAR_SWIPE_UP, false); + public static final CachedFlag sMoveTopToolbarToBottom = @@ -1914,10 +1914,10 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true); -@@ -1190,6 +1198,8 @@ public abstract class ChromeFeatureList { - sNewTabPageCustomizationV2, +@@ -1251,6 +1259,8 @@ public abstract class ChromeFeatureList { sNotificationTrampoline, sOptimizationGuidePushNotifications, + sPCctMinimumHeight, + sMoveTopToolbarToBottom, + sDisableToolbarSwipeUp, sPaintPreviewDemo, @@ -1935,7 +1935,7 @@ diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/ "android/java/src/org/chromium/chrome/browser/hub/EmptyHubBottomToolbarDelegate.java", "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactory.java", @@ -102,6 +103,10 @@ android_library("java") { - "//ui/android:ui_no_recycler_view_java", + "//ui/edge_to_edge:java", "//url:url_java", ] + deps += [ @@ -1964,7 +1964,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; -@@ -164,6 +166,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { +@@ -167,6 +169,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { mHubPaneHostCoordinator = new HubPaneHostCoordinator( hubPaneHostView, paneManager.getFocusedPaneSupplier(), hubColorMixer); @@ -2122,7 +2122,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -2315,7 +2315,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2395,7 +2395,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2250,9 +2250,9 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch import org.chromium.base.Callback; import org.chromium.base.metrics.RecordUserAction; +import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.base.supplier.Supplier; import org.chromium.build.annotations.MonotonicNonNull; import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; @@ -273,7 +274,16 @@ class AppMenuHandlerImpl assert !(isByPermanentButton && startDragging); @@ -2273,7 +2273,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java --- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java +++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java -@@ -710,6 +710,7 @@ public class EdgeToEdgeControllerImpl +@@ -694,6 +694,7 @@ public class EdgeToEdgeControllerImpl * the system insets due to the keyboard or the bottom controls being visible. */ private boolean shouldPadAdjusters() { @@ -2284,7 +2284,7 @@ diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromi diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java --- a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java +++ b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java -@@ -134,6 +134,7 @@ public class EdgeToEdgeUtils { +@@ -130,6 +130,7 @@ public class EdgeToEdgeUtils { * being attached to the window. */ public static boolean isEdgeToEdgeBottomChinEnabled(Activity activity) { @@ -2292,7 +2292,7 @@ diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome // Make sure we test SDK version before checking the Feature so Field Trials only collect // from qualifying devices. if (!EdgeToEdgeFieldTrialImpl.getBottomChinOverrides().isEnabledForManufacturerVersion()) { -@@ -399,6 +400,7 @@ public class EdgeToEdgeUtils { +@@ -389,6 +390,7 @@ public class EdgeToEdgeUtils { */ @Deprecated static boolean hasTappableNavigationBar(Window window) { @@ -2339,10 +2339,10 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -214,6 +214,7 @@ public class LocationBarCoordinator - uiOverrides.isForcedPhoneStyleOmnibox(), - baseChromeLayout, - deferredIMEWindowInsetApplicationCallback::getCurrentKeyboardHeight, +@@ -223,6 +223,7 @@ public class LocationBarCoordinator + ? ControlsPosition.TOP + : mBrowserControlsStateProvider.getControlsPosition(), + mDeferredIMEWindowInsetApplicationCallback::getCurrentKeyboardHeight, + deferredIMEWindowInsetApplicationCallback::getSystemBarInsetsBottom, bottomWindowPaddingSupplier); @@ -2357,39 +2357,40 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow +import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; - import org.chromium.base.BuildInfo; -@@ -25,6 +26,7 @@ import org.chromium.build.annotations.NullMarked; - import org.chromium.build.annotations.Nullable; + import org.chromium.base.Callback; +@@ -25,6 +26,7 @@ import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider.ControlsPosition; import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownEmbedder; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.base.WindowAndroid; -@@ -47,6 +49,7 @@ class OmniboxSuggestionsDropdownEmbedderImpl - private final View mAlignmentView; +@@ -50,6 +52,7 @@ class OmniboxSuggestionsDropdownEmbedderImpl private final boolean mForcePhoneStyleOmnibox; + private final Supplier<@ControlsPosition Integer> mControlsPositionSupplier; private final Supplier mKeyboardHeightSupplier; + private final Supplier mSystemBarInsetsBottomSupplier; private final Supplier mBottomWindowPaddingSupplier; private final Context mContext; // Reusable int array to pass to positioning methods that operate on a two element int array. -@@ -85,12 +88,14 @@ class OmniboxSuggestionsDropdownEmbedderImpl - boolean forcePhoneStyleOmnibox, +@@ -89,6 +92,7 @@ class OmniboxSuggestionsDropdownEmbedderImpl @Nullable View baseChromeLayout, + Supplier<@ControlsPosition Integer> controlsPositionSupplier, Supplier keyboardHeightSupplier, + Supplier systemBarInsetsBottomSupplier, Supplier bottomWindowPaddingSupplier) { mWindowAndroid = windowAndroid; mAnchorView = anchorView; - mAlignmentView = alignmentView; +@@ -96,6 +100,7 @@ class OmniboxSuggestionsDropdownEmbedderImpl mForcePhoneStyleOmnibox = forcePhoneStyleOmnibox; + mControlsPositionSupplier = controlsPositionSupplier; mKeyboardHeightSupplier = keyboardHeightSupplier; + mSystemBarInsetsBottomSupplier = systemBarInsetsBottomSupplier; mBottomWindowPaddingSupplier = bottomWindowPaddingSupplier; mContext = mAnchorView.getContext(); mContext.registerComponentCallbacks(this); -@@ -111,6 +116,11 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -116,6 +121,11 @@ class OmniboxSuggestionsDropdownEmbedderImpl mOmniboxAlignmentSupplier.removeObserver(obs); } @@ -2401,7 +2402,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow @Override public OmniboxAlignment getCurrentAlignment() { return assertNonNull(mOmniboxAlignmentSupplier.get()); -@@ -134,6 +144,10 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -139,6 +149,10 @@ class OmniboxSuggestionsDropdownEmbedderImpl @Override public void onDetachedFromWindow() { @@ -2412,19 +2413,19 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow mAnchorView.removeOnLayoutChangeListener(this); mAlignmentView.removeOnLayoutChangeListener(this); mAnchorView.getViewTreeObserver().removeOnGlobalLayoutListener(this); -@@ -220,6 +234,9 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -235,6 +249,9 @@ class OmniboxSuggestionsDropdownEmbedderImpl + } else { + ViewUtils.getRelativeLayoutPosition(contentView, mAnchorView, mPositionArray); + top = mPositionArray[1] + mAnchorView.getMeasuredHeight() - contentView.getPaddingTop(); ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { ++ top -= mPositionArray[1]; ++ } + } - ViewUtils.getRelativeLayoutPosition(contentView, mAnchorView, mPositionArray); - int top = mPositionArray[1] + mAnchorView.getMeasuredHeight() - contentView.getPaddingTop(); -+ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { -+ top -= mPositionArray[1]; -+ } - int left; - int width; - int paddingLeft; -@@ -293,6 +310,12 @@ class OmniboxSuggestionsDropdownEmbedderImpl - : contentView.getMeasuredHeight() - keyboardHeight; - int height = Math.min(windowSpace, contentSpace) - top; + if (isTablet()) { +@@ -311,6 +328,12 @@ class OmniboxSuggestionsDropdownEmbedderImpl + height = Math.min(windowSpace, contentSpace) - top; + } + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + ViewCompat.setPaddingRelative( @@ -2435,7 +2436,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow // TODO(pnoland@, https://crbug.com/1416985): avoid pushing changes that are identical to // the previous alignment value. OmniboxAlignment omniboxAlignment = -@@ -301,6 +324,14 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -319,6 +342,14 @@ class OmniboxSuggestionsDropdownEmbedderImpl mOmniboxAlignmentSupplier.set(omniboxAlignment); } @@ -2461,7 +2462,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.core.view.ViewCompat; -@@ -51,6 +52,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -50,6 +51,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.LazyConstructionPropertyMcp; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.PropertyModel; @@ -2469,7 +2470,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; -@@ -70,6 +72,7 @@ public class AutocompleteCoordinator +@@ -71,6 +73,7 @@ public class AutocompleteCoordinator private @Nullable OmniboxSuggestionsDropdown mDropdown; private final ObserverList mScrollListenerList = new ObserverList<>(); @@ -2477,7 +2478,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /** An observer watching for changes to the visual state of the omnibox suggestions. */ public interface OmniboxSuggestionsVisualStateObserver { -@@ -105,6 +108,7 @@ public class AutocompleteCoordinator +@@ -106,6 +109,7 @@ public class AutocompleteCoordinator Context context = parent.getContext(); ModelList listItems = new ModelList(); @@ -2485,9 +2486,9 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow PropertyModel listModel = new PropertyModel.Builder(SuggestionListProperties.ALL_KEYS) .with(SuggestionListProperties.EMBEDDER, dropdownEmbedder) -@@ -228,6 +232,16 @@ public class AutocompleteCoordinator +@@ -230,6 +234,16 @@ public class AutocompleteCoordinator + container.findViewById(R.id.omnibox_suggestions_dropdown); - dropdown.forcePhoneStyleOmnibox(forcePhoneStyleOmnibox); dropdown.setAdapter(mAdapter); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // make margins works @@ -2500,12 +2501,12 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow + mDropdownEmbedder.getAnchorView().getMeasuredHeight(); + } mRecycledViewPool.ifPresent(p -> dropdown.setRecycledViewPool(p)); - mHolder = new SuggestionListViewHolder(container, dropdown); + mHolder = new SuggestionListViewHolder(suggestionsContainer, dropdown); for (int i = 0; i < mCallbacks.size(); i++) { diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java -@@ -72,6 +72,8 @@ import org.chromium.ui.modelutil.PropertyModel; +@@ -74,6 +74,8 @@ import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.mojom.WindowOpenDisposition; import org.chromium.url.GURL; @@ -2513,8 +2514,8 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow + import java.util.List; import java.util.Optional; - -@@ -1189,7 +1191,9 @@ class AutocompleteMediator + import java.util.function.Supplier; +@@ -1219,7 +1221,9 @@ class AutocompleteMediator @Override public void onSuggestionDropdownScroll() { mSuggestionsListScrolled = true; @@ -2539,9 +2540,9 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java -@@ -49,6 +49,9 @@ import org.chromium.ui.util.MotionEventUtils; - - import java.util.Optional; +@@ -36,6 +36,9 @@ import org.chromium.components.omnibox.OmniboxFeatures; + import org.chromium.ui.base.KeyNavigationUtil; + import org.chromium.ui.util.MotionEventUtils; +import android.graphics.Rect; +import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -2549,15 +2550,15 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /** A widget for showing a list of omnibox suggestions. */ @NullMarked public class OmniboxSuggestionsDropdown extends RecyclerView { -@@ -270,7 +273,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -274,7 +277,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { addItemDecoration(new SuggestionHorizontalDivider(context)); - mLayoutScrollListener = new SuggestionLayoutScrollListener(context); + mLayoutScrollListener = suggestionLayoutScrollListener; - setLayoutManager(mLayoutScrollListener); mSelectionController = new RecyclerViewSelectionController( mLayoutScrollListener, SelectionController.Mode.SATURATING_WITH_SENTINEL); -@@ -281,6 +283,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -285,6 +287,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_bottom); int paddingTop = resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_top); @@ -2626,7 +2627,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1563,6 +1563,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1515,6 +1515,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2642,7 +2643,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn -@@ -211,6 +211,7 @@ android_library("java") { +@@ -213,6 +213,7 @@ android_library("java") { "//content/public/android:content_java", "//third_party/android_deps:material_design_java", "//third_party/androidx:androidx_annotation_annotation_experimental_java", @@ -2707,7 +2708,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java -@@ -34,6 +34,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -33,6 +33,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.dynamics.ViewResourceAdapter; import org.chromium.ui.widget.Toast; @@ -2749,15 +2750,15 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java -@@ -28,6 +28,7 @@ import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeSupplier.Change - import org.chromium.ui.KeyboardVisibilityDelegate; +@@ -27,6 +27,7 @@ import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.base.WindowAndroid; + import org.chromium.ui.edge_to_edge.EdgeToEdgeSupplier.ChangeObserver; import org.chromium.ui.modelutil.PropertyModel; +import org.chromium.chrome.browser.flags.ChromeFeatureList; - /** - * This class is responsible for reacting to events from the outside world, interacting with other -@@ -154,6 +155,12 @@ class BottomControlsMediator + import java.util.function.Supplier; + +@@ -155,6 +156,12 @@ class BottomControlsMediator void setBottomControlsVisible(boolean visible) { boolean visibilityChanged = mIsBottomControlsVisible != visible; @@ -2770,7 +2771,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mIsBottomControlsVisible = visible; updateCompositedViewVisibility(); updateAndroidViewVisibility(); -@@ -183,6 +190,19 @@ class BottomControlsMediator +@@ -184,6 +191,19 @@ class BottomControlsMediator mTabObscuringHandler.removeObserver(this); } @@ -2790,7 +2791,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow @Override public void onBottomControlsHeightChanged( int bottomControlsHeight, int bottomControlsMinHeight) { -@@ -272,11 +292,13 @@ class BottomControlsMediator +@@ -273,11 +293,13 @@ class BottomControlsMediator && !mIsInSwipeLayout && getBrowserControls().getBottomControlOffset() == 0; if (visible) { @@ -2903,9 +2904,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -@@ -76,6 +76,10 @@ import java.lang.annotation.Retention; - import java.lang.annotation.RetentionPolicy; +@@ -77,6 +77,10 @@ import java.lang.annotation.RetentionPolicy; import java.util.function.BooleanSupplier; + import java.util.function.Supplier; +import android.view.Gravity; +import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -2914,7 +2915,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Layout for the browser controls (omnibox, menu, tab strip, etc..). */ @NullMarked public class ToolbarControlContainer extends OptimizedFrameLayout -@@ -183,6 +187,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -185,6 +189,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout if (view != null) ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; } @@ -2929,7 +2930,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java -@@ -24,11 +24,14 @@ import org.chromium.chrome.browser.tab.Tab; +@@ -23,12 +23,15 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; import org.chromium.chrome.browser.toolbar.R; import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar; @@ -2938,6 +2939,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.ui.resources.ResourceManager; import java.util.List; + import java.util.function.Supplier; +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; + @@ -2957,7 +2959,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow .build(); mSceneLayer = new TopToolbarSceneLayer(resourceManagerSupplier); mChangeProcessor = -@@ -130,6 +139,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { +@@ -138,6 +147,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { @@ -2991,15 +2993,15 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java -@@ -17,6 +17,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing +@@ -16,6 +16,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.resources.ResourceManager; +import org.chromium.chrome.browser.flags.ChromeFeatureList; - /** A SceneLayer to render the top toolbar. This is the "view" piece of the top toolbar overlay. */ - @JNINamespace("android") -@@ -44,6 +45,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { + import java.util.function.Supplier; + +@@ -45,6 +46,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { /** Push all information about the texture to native at once. */ private void pushProperties(PropertyModel model) { if (mResourceManagerSupplier.get() == null) return; @@ -3013,7 +3015,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow TopToolbarSceneLayerJni.get() .updateToolbarLayer( mNativePtr, -@@ -53,7 +61,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { +@@ -54,7 +62,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { model.get(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID), model.get(TopToolbarOverlayProperties.URL_BAR_COLOR), model.get(TopToolbarOverlayProperties.X_OFFSET), @@ -3126,7 +3128,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc -@@ -40,6 +40,7 @@ namespace features { +@@ -48,6 +48,7 @@ BASE_FEATURE(kAndroidAnimatedProgressBarInViz, BASE_FEATURE(kAndroidBrowserControlsInViz, "AndroidBrowserControlsInViz", base::FEATURE_ENABLED_BY_DEFAULT); @@ -3134,7 +3136,7 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features. // If this flag is enabled, AndroidBrowserControlsInViz and // BottomControlsRefactor with the "Dispatch yOffset" variation must also be -@@ -47,6 +48,7 @@ BASE_FEATURE(kAndroidBrowserControlsInViz, +@@ -55,6 +56,7 @@ BASE_FEATURE(kAndroidBrowserControlsInViz, BASE_FEATURE(kAndroidBcivBottomControls, "AndroidBcivBottomControls", base::FEATURE_ENABLED_BY_DEFAULT); @@ -3145,15 +3147,15 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features. diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc -@@ -32,6 +32,7 @@ - #include "base/task/single_thread_task_runner.h" +@@ -33,6 +33,7 @@ #include "base/task/thread_pool.h" #include "base/threading/scoped_blocking_call.h" + #include "base/trace_event/trace_event.h" +#include "cc/base/features.h" #include "cc/base/math_util.h" #include "cc/slim/layer.h" #include "components/input/cursor_manager.h" -@@ -916,6 +917,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -919,6 +920,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( // factor. Thus, |top_content_offset| in CSS pixels is also in DIPs. float top_content_offset = metadata.top_controls_height * metadata.top_controls_shown_ratio; diff --git a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch index 3f0ea255..2a1df1ff 100644 --- a/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch +++ b/build/patches/Partitioning-all-cookies-by-top-frame-domain.patch @@ -51,7 +51,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3692,7 +3692,7 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( +@@ -3825,7 +3825,7 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile(profile); if (!cookie_settings) { @@ -77,7 +77,7 @@ diff --git a/chrome/browser/extensions/api/cookies/cookies_helpers.cc b/chrome/b diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -1127,16 +1127,16 @@ ProfileNetworkContextService::CreateCookieManagerParams( +@@ -1130,16 +1130,16 @@ ProfileNetworkContextService::CreateCookieManagerParams( // UI to interact with SameSite cookies on accounts.google.com, which is used // for displaying a list of available accounts on the NTP // (chrome://new-tab-page), etc. @@ -114,7 +114,7 @@ diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc --- a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc +++ b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc -@@ -220,6 +220,7 @@ FederatedIdentityPermissionContext* IsAutograntViaFedCmAllowed( +@@ -221,6 +221,7 @@ FederatedIdentityPermissionContext* IsAutograntViaFedCmAllowed( const url::Origin& embedding_origin, const net::SchemefulSite& embedding_site, const net::SchemefulSite& requesting_site) { @@ -122,7 +122,7 @@ diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_c CHECK(browser_context); if (!rfh->IsFeatureEnabled( network::mojom::PermissionsPolicyFeature::kIdentityCredentialsGet)) { -@@ -466,6 +467,18 @@ void StorageAccessGrantPermissionContext::CheckForAutoGrantOrAutoDenial( +@@ -482,6 +483,18 @@ void StorageAccessGrantPermissionContext::CheckForAutoGrantOrAutoDenial( std::unique_ptr request_data, permissions::BrowserPermissionCallback callback, net::FirstPartySetMetadata metadata) { @@ -162,17 +162,17 @@ diff --git a/components/browser_ui/strings/android/site_settings.grdp b/componen - Third-party cookies are allowed + Third-party cookies are partitioned - - Third-party cookies are blocked in Incognito mode -@@ -658,7 +658,7 @@ - Allow third-party cookies + + Third-party cookies are blocked +@@ -667,7 +667,7 @@ + A site you visit can embed content from other sites, for example, images, ads, and text. Cookies set by these other sites are called third-party cookies. - -- Sites will work normally + +- Allow third-party cookies + Partitions all cookies by top frame url - - Block third-party cookies in Incognito mode + + Block third-party cookies diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc --- a/components/content_settings/core/browser/cookie_settings.cc +++ b/components/content_settings/core/browser/cookie_settings.cc @@ -184,7 +184,7 @@ diff --git a/components/content_settings/core/browser/cookie_settings.cc b/compo if (url.is_empty() || first_party_url.is_empty()) { return; } -@@ -402,8 +403,7 @@ bool CookieSettings::ShouldBlockThirdPartyCookiesInternal() const { +@@ -398,8 +399,7 @@ bool CookieSettings::ShouldBlockThirdPartyCookiesInternal() const { } bool CookieSettings::MitigationsEnabledFor3pcdInternal() const { @@ -506,7 +506,7 @@ diff --git a/services/network/cookie_settings.cc b/services/network/cookie_setti diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc --- a/services/network/cors/cors_url_loader.cc +++ b/services/network/cors/cors_url_loader.cc -@@ -903,6 +903,7 @@ void CorsURLLoader::StartRequest() { +@@ -909,6 +909,7 @@ void CorsURLLoader::StartRequest() { } if (request_.credentials_mode == mojom::CredentialsMode::kInclude && @@ -533,7 +533,7 @@ diff --git a/services/network/restricted_cookie_manager.cc b/services/network/re diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc -@@ -2544,6 +2544,7 @@ bool URLLoader::ShouldSetLoadWithStorageAccess() const { +@@ -2550,6 +2550,7 @@ bool URLLoader::ShouldSetLoadWithStorageAccess() const { auto determine_storage_access_load_outcome = [&]() -> net::cookie_util::ActivateStorageAccessLoadOutcome { @@ -554,7 +554,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_init.idl b/t diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc --- a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc +++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc -@@ -386,6 +386,7 @@ ScriptPromise CookieStore::set(ScriptState* script_state, +@@ -393,6 +393,7 @@ ScriptPromise CookieStore::set(ScriptState* script_state, CookieInit* set_options = CookieInit::Create(); set_options->setName(name); set_options->setValue(value); @@ -562,7 +562,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/t return set(script_state, set_options, exception_state); } -@@ -409,6 +410,7 @@ ScriptPromise CookieStore::Delete( +@@ -416,6 +417,7 @@ ScriptPromise CookieStore::Delete( set_options->setName(name); set_options->setValue(name.empty() ? "deleted" : ""); set_options->setExpires(0); @@ -570,7 +570,7 @@ diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/t return DoWrite(script_state, set_options, exception_state); } -@@ -424,6 +426,7 @@ ScriptPromise CookieStore::Delete( +@@ -431,6 +433,7 @@ ScriptPromise CookieStore::Delete( set_options->setPath(options->path()); set_options->setSameSite(V8CookieSameSite::Enum::kStrict); set_options->setPartitioned(options->partitioned()); diff --git a/build/patches/Remove-support-for-device-memory-and-cpu-recovery.patch b/build/patches/Remove-support-for-device-memory-and-cpu-recovery.patch index b8e78514..039a58dc 100644 --- a/build/patches/Remove-support-for-device-memory-and-cpu-recovery.patch +++ b/build/patches/Remove-support-for-device-memory-and-cpu-recovery.patch @@ -10,11 +10,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/blob/blob_memory_controller.cc | 20 ++++++++++--------- .../browser/quota/quota_device_info_helper.cc | 17 ++++++++++++++-- .../approximated_device_memory.cc | 7 ++++++- - .../frame/navigator_concurrent_hardware.cc | 16 ++++++--------- + .../frame/navigator_concurrent_hardware.cc | 18 ++++++----------- .../measure_memory_controller.cc | 5 +++++ .../blink/renderer/core/timing/memory_info.cc | 14 ++++++++++--- .../core/timing/window_performance.cc | 2 +- - 10 files changed, 66 insertions(+), 26 deletions(-) + 10 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 cromite_flags/third_party/blink/common/features_cc/Remove-support-for-device-memory-and-cpu-recovery.inc create mode 100644 cromite_flags/third_party/blink/common/features_h/Remove-support-for-device-memory-and-cpu-recovery.inc @@ -59,28 +59,28 @@ new file mode 100644 diff --git a/storage/browser/blob/blob_memory_controller.cc b/storage/browser/blob/blob_memory_controller.cc --- a/storage/browser/blob/blob_memory_controller.cc +++ b/storage/browser/blob/blob_memory_controller.cc -@@ -54,6 +54,15 @@ using MemoryAllocation = BlobMemoryController::MemoryAllocation; +@@ -55,6 +55,15 @@ using MemoryAllocation = BlobMemoryController::MemoryAllocation; using QuotaAllocationTask = BlobMemoryController::QuotaAllocationTask; using DiskSpaceFuncPtr = BlobMemoryController::DiskSpaceFuncPtr; +// static +#if BUILDFLAG(IS_ANDROID) -+float approximated_device_memory_gb_ = 4.0; ++constexpr base::ByteCount approximated_device_memory_gb_ = GiB(4.0); +constexpr int64_t approximated_device_disk_size = 8ull * 1024 * 1024 * 1024; +#else -+float approximated_device_memory_gb_ = 8.0; ++constexpr base::ByteCount approximated_device_memory_gb_ = GiB(8.0); +constexpr int64_t approximated_device_disk_size = 200ull * 1024 * 1024 * 1024; +#endif + File::Error CreateBlobDirectory(const FilePath& blob_storage_dir) { File::Error error = File::FILE_OK; base::CreateDirectoryAndGetError(blob_storage_dir, &error); -@@ -83,23 +92,16 @@ BlobStorageLimits CalculateBlobStorageLimitsImpl( - int64_t disk_size = 0ull; - uint64_t memory_size = optional_memory_size_for_testing - ? optional_memory_size_for_testing.value() -- : base::SysInfo::AmountOfPhysicalMemory(); -+ : approximated_device_memory_gb_; +@@ -85,22 +94,15 @@ BlobStorageLimits CalculateBlobStorageLimitsImpl( + uint64_t memory_size = + optional_memory_size_for_testing + ? optional_memory_size_for_testing.value() +- : base::SysInfo::AmountOfPhysicalMemory().InBytesUnsigned(); ++ : approximated_device_memory_gb_.InBytesUnsigned(); if (disk_enabled && CreateBlobDirectory(storage_dir) == base::File::FILE_OK) - disk_size = base::SysInfo::AmountOfTotalDiskSpace(storage_dir); + disk_size = approximated_device_disk_size; @@ -91,8 +91,7 @@ diff --git a/storage/browser/blob/blob_memory_controller.cc b/storage/browser/bl if (memory_size > 0) { -#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) && \ - defined(ARCH_CPU_64_BITS) - constexpr size_t kTwoGigabytes = 2ull * 1024 * 1024 * 1024; - limits.max_blob_in_memory_space = kTwoGigabytes; + limits.max_blob_in_memory_space = base::GiB(2).InBytesUnsigned(); -#elif BUILDFLAG(IS_ANDROID) - limits.max_blob_in_memory_space = static_cast(memory_size / 100); -#else @@ -112,10 +111,10 @@ diff --git a/storage/browser/quota/quota_device_info_helper.cc b/storage/browser + +// static +#if BUILDFLAG(IS_ANDROID) -+float approximated_device_memory_gb_ = 4.0; ++constexpr base::ByteCount approximated_device_memory_gb_ = GiB(4.0); +constexpr int64_t approximated_device_disk_size = 8ull * 1024 * 1024 * 1024; +#else -+float approximated_device_memory_gb_ = 8.0; ++constexpr base::ByteCount approximated_device_memory_gb_ = GiB(8.0); +constexpr int64_t approximated_device_disk_size = 200ull * 1024 * 1024 * 1024; +#endif + @@ -132,8 +131,8 @@ diff --git a/storage/browser/quota/quota_device_info_helper.cc b/storage/browser } uint64_t QuotaDeviceInfoHelper::AmountOfPhysicalMemory() const { -- return base::SysInfo::AmountOfPhysicalMemory(); -+ return approximated_device_memory_gb_; +- return base::SysInfo::AmountOfPhysicalMemory().InBytesUnsigned(); ++ return approximated_device_memory_gb_.InBytesUnsigned(); } } // namespace storage @@ -163,7 +162,7 @@ diff --git a/third_party/blink/common/device_memory/approximated_device_memory.c diff --git a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc b/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc --- a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc +++ b/third_party/blink/renderer/core/frame/navigator_concurrent_hardware.cc -@@ -3,22 +3,18 @@ +@@ -3,26 +3,20 @@ // found in the LICENSE file. #include "third_party/blink/renderer/core/frame/navigator_concurrent_hardware.h" @@ -174,18 +173,22 @@ diff --git a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware namespace blink { +-namespace { +- -// TODO(435582603): Hard-coding this to a common value is a reasonable start, -// but it likely makes sense to vary the hard-coded number by platform and -// form-factor in order to maintain plausibility over time. -constexpr unsigned kReducedHardwareConcurrencyValue = 8u; - + } // namespace + unsigned NavigatorConcurrentHardware::hardwareConcurrency() const { - if (RuntimeEnabledFeatures::ReduceHardwareConcurrencyEnabled()) { - return kReducedHardwareConcurrencyValue; - } - return static_cast(base::SysInfo::NumberOfProcessors()); +#if BUILDFLAG(IS_ANDROID) -+ return static_cast(2); ++ return static_cast(4); +#else + return static_cast(8); +#endif @@ -195,7 +198,7 @@ diff --git a/third_party/blink/renderer/core/frame/navigator_concurrent_hardware diff --git a/third_party/blink/renderer/core/timing/measure_memory/measure_memory_controller.cc b/third_party/blink/renderer/core/timing/measure_memory/measure_memory_controller.cc --- a/third_party/blink/renderer/core/timing/measure_memory/measure_memory_controller.cc +++ b/third_party/blink/renderer/core/timing/measure_memory/measure_memory_controller.cc -@@ -8,6 +8,7 @@ +@@ -10,6 +10,7 @@ #include "base/rand_util.h" #include "components/performance_manager/public/mojom/coordination_unit.mojom-blink.h" #include "services/metrics/public/cpp/ukm_builders.h" @@ -203,7 +206,7 @@ diff --git a/third_party/blink/renderer/core/timing/measure_memory/measure_memor #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" -@@ -85,6 +86,10 @@ enum class ApiStatus { +@@ -86,6 +87,10 @@ enum class ApiStatus { }; ApiStatus CheckMeasureMemoryAvailability() { diff --git a/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch b/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch index eacf52dd..2c832d42 100644 --- a/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch +++ b/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch @@ -6,16 +6,16 @@ Avoid displaying info about intrusive ads License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../site_settings/SingleWebsiteSettings.java | 52 ++++++++++++------- + .../site_settings/SingleWebsiteSettings.java | 51 ++++++++++++------- .../browser_ui/site_settings/Website.java | 14 ++++- .../bromite_content_settings/javascript.inc | 4 ++ - 3 files changed, 50 insertions(+), 20 deletions(-) + 3 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 components/content_settings/core/browser/bromite_content_settings/javascript.inc diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -628,6 +628,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -626,6 +626,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment setUpSoundPreference(preference); } else if (type == ContentSettingsType.JAVASCRIPT) { setUpJavascriptPreference(preference); @@ -23,16 +23,15 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + setUpCookiesPreference(preference); } else if (type == ContentSettingsType.GEOLOCATION) { setUpLocationPreference(preference); - } else if (type == ContentSettingsType.NOTIFICATIONS) { -@@ -1212,18 +1214,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + } else if (type == ContentSettingsType.GEOLOCATION_WITH_OPTIONS) { +@@ -1110,17 +1112,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setUpAdsInformationalBanner() { // Add the informational banner which shows at the top of the UI if ad blocking is // activated on this site. - boolean adBlockingActivated = - SiteSettingsCategory.adsCategoryEnabled() - && WebsitePreferenceBridge.getAdBlockingActivated( -- getSiteSettingsDelegate().getBrowserContextHandle(), -- mSite.getAddress().getOrigin()) +- getBrowserContextHandle(), mSite.getAddress().getOrigin()) - && findPreference(assumeNonNull(getPreferenceKey(ContentSettingsType.ADS))) - != null; - @@ -43,8 +42,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } @RequiresNonNull({"mSite"}) -@@ -1449,12 +1441,13 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - @ContentSettingValues +@@ -1440,12 +1433,13 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + @ContentSetting @Nullable Integer currentValue = mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT); - // If Javascript is blocked by default, then always show a Javascript permission. @@ -52,18 +51,18 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c - if ((currentValue == null) - && !WebsitePreferenceBridge.isCategoryEnabled( - browserContextHandle, ContentSettingsType.JAVASCRIPT)) { -- currentValue = ContentSettingValues.BLOCK; +- currentValue = ContentSetting.BLOCK; + // Always show the Javascript permission + if (currentValue == null) { + currentValue = + WebsitePreferenceBridge.isCategoryEnabled( + browserContextHandle, ContentSettingsType.JAVASCRIPT) + ? ContentSettingValues.ALLOW -+ : ContentSettingValues.BLOCK; ++ : ContentSetting.BLOCK; } // Not possible to embargo JAVASCRIPT. setupContentSettingsPreference( -@@ -1464,6 +1457,29 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1455,6 +1449,29 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment isOneTime(ContentSettingsType.JAVASCRIPT)); } @@ -92,8 +91,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + /** * Updates the ads list preference based on whether the site is a candidate for blocking. This - * has some custom behavior. -@@ -1483,9 +1499,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + * has some custom behavior. 1. If the site is a candidate and has activation, the permission +@@ -1472,9 +1489,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } // If the ad blocker is activated, then this site will have ads blocked unless there is an // explicit permission disallowing the blocking. @@ -101,17 +100,17 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c - WebsitePreferenceBridge.getAdBlockingActivated( - browserContextHandle, mSite.getAddress().getOrigin()); + boolean activated = true; - @ContentSettingValues + @ContentSetting @Nullable Integer permission = mSite.getContentSetting(browserContextHandle, ContentSettingsType.ADS); diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -299,7 +299,19 @@ public final class Website implements WebsiteEntry { +@@ -316,7 +316,19 @@ public final class Website implements WebsiteEntry { new ContentSettingException( ContentSettingsType.ADS, getAddress().getOrigin(), -- ContentSettingValues.BLOCK, +- ContentSetting.BLOCK, + value, + ProviderType.NONE, + /* isEmbargoed= */ false); diff --git a/build/patches/kill-Auth.patch b/build/patches/kill-Auth.patch index d1b03d49..3cd70e5f 100644 --- a/build/patches/kill-Auth.patch +++ b/build/patches/kill-Auth.patch @@ -4,127 +4,23 @@ Subject: kill Auth License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../signin/SystemAccountManagerDelegate.java | 78 +------------------ - 1 file changed, 4 insertions(+), 74 deletions(-) + .../components/signin/AccountManagerFacadeProvider.java | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) -diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java ---- a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java -+++ b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java -@@ -24,9 +24,6 @@ import android.os.PatternMatcher; - import android.os.Process; - import android.os.SystemClock; +diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeProvider.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeProvider.java +--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeProvider.java ++++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeProvider.java +@@ -24,11 +24,7 @@ public class AccountManagerFacadeProvider { + private static final AccountManagerFacade INSTANCE; --import com.google.android.gms.auth.GoogleAuthException; --import com.google.android.gms.auth.GoogleAuthUtil; -- - import org.chromium.base.ApiCompatibilityUtils; - import org.chromium.base.Callback; - import org.chromium.base.ContextUtils; -@@ -94,18 +91,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { - - @Override - public Account[] getAccountsSynchronous() throws AccountManagerDelegateException { -- if (!isGooglePlayServicesAvailable()) { -- throw new AccountManagerDelegateException("Can't use Google Play Services"); -- } -- if (hasGetAccountsPermission()) { -- long startTime = SystemClock.elapsedRealtime(); -- Account[] accounts = -- mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); -- RecordHistogram.recordTimesHistogram( -- "Signin.AndroidGetAccountsTime_AccountManager", -- SystemClock.elapsedRealtime() - startTime); -- return accounts; -- } - // Don't report any accounts if we don't have permission. - // TODO(crbug.com/40942462): Throw an exception if permission was denied. - return new Account[] {}; -@@ -116,43 +101,13 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { - public AccessTokenData getAccessToken(Account account, String authTokenScope) - throws AuthException { - ThreadUtils.assertOnBackgroundThread(); -- assert AccountUtils.GOOGLE_ACCOUNT_TYPE.equals(account.type); -- try { -- return new AccessTokenData( -- GoogleAuthUtil.getTokenWithNotification( -- ContextUtils.getApplicationContext(), account, authTokenScope, null)); -- } catch (GoogleAuthException ex) { -- // This case includes a UserRecoverableNotifiedException, but most clients will have -- // their own retry mechanism anyway. -- throw new AuthException( -- "Error while getting token for scope '" + authTokenScope + "'", -- ex, -- new GoogleServiceAuthError( -- GoogleServiceAuthErrorState.INVALID_GAIA_CREDENTIALS)); -- } catch (IOException ex) { -- throw new AuthException( -- "Error while getting token for scope '" + authTokenScope + "'", -- ex, -- new GoogleServiceAuthError(GoogleServiceAuthErrorState.CONNECTION_FAILED)); -- } -+ throw new AuthException(AuthException.NONTRANSIENT, -+ "Error while getting token for scope '" + authTokenScope + "'", -+ new IOException()); + static { +- AccountManagerDelegate delegate = +- ServiceLoaderUtil.maybeCreate(AccountManagerDelegate.class); +- if (delegate == null) { +- delegate = new NullAccountManagerDelegate(); +- } ++ delegate = new NullAccountManagerDelegate(); + INSTANCE = new AccountManagerFacadeImpl(delegate); + } } - - @Override - public void invalidateAccessToken(String authToken) throws AuthException { -- try { -- GoogleAuthUtil.clearToken(ContextUtils.getApplicationContext(), authToken); -- } catch (GoogleAuthException ex) { -- throw new AuthException( -- "Error while invalidating access token", -- ex, -- new GoogleServiceAuthError( -- GoogleServiceAuthErrorState.INVALID_GAIA_CREDENTIALS)); -- } catch (IOException ex) { -- throw new AuthException( -- "Error while invalidating access token", -- ex, -- new GoogleServiceAuthError(GoogleServiceAuthErrorState.CONNECTION_FAILED)); -- } - } - - @Override -@@ -168,24 +123,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { - @SuppressLint("MissingPermission") - @Override - public void createAddAccountIntent(Callback<@Nullable Intent> callback) { -- AccountManagerCallback accountManagerCallback = -- accountManagerFuture -> { -- try { -- Bundle bundle = accountManagerFuture.getResult(); -- callback.onResult(bundle.getParcelable(AccountManager.KEY_INTENT)); -- } catch (OperationCanceledException | IOException | AuthenticatorException e) { -- Log.e(TAG, "Error while creating an intent to add an account: ", e); -- callback.onResult(null); -- } -- }; -- mAccountManager.addAccount( -- GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE, -- null, -- null, -- null, -- null, -- accountManagerCallback, -- null); - } - - // No permission is needed on 23+ and Chrome always has MANAGE_ACCOUNTS permission on lower APIs -@@ -219,14 +156,7 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { - - @Override - public @Nullable GaiaId getAccountGaiaId(String accountEmail) { -- try { -- return new GaiaId( -- GoogleAuthUtil.getAccountId( -- ContextUtils.getApplicationContext(), accountEmail)); -- } catch (IOException | GoogleAuthException ex) { -- Log.e(TAG, "SystemAccountManagerDelegate.getAccountGaiaId", ex); -- return null; -- } -+ return null; - } - - @Override --