diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 0d9db740..c74afd8b 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AppMenuPropertiesDelegateImpl.java | 7 +- .../ChromeContextMenuPopulator.java | 6 +- .../CustomTabActivityLifecycleUmaTracker.java | 31 ---- - .../CustomTabAppMenuPropertiesDelegate.java | 4 + + .../CustomTabAppMenuPropertiesDelegate.java | 5 + .../CustomTabIntentDataProvider.java | 10 + .../browser/download/DownloadUtils.java | 13 +- .../history/HistoryContentManager.java | 9 +- @@ -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, 806 insertions(+), 106 deletions(-) + 69 files changed, 807 insertions(+), 106 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -101,7 +101,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -650,6 +650,7 @@ chrome_java_resources = [ +@@ -669,6 +669,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", @@ -120,7 +120,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -936,6 +937,7 @@ chrome_java_sources = [ +@@ -949,6 +950,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", @@ -173,7 +173,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -90,6 +90,11 @@ found in the LICENSE file. +@@ -84,6 +84,11 @@ found in the LICENSE file. android:key="secure_dns" android:title="@string/settings_secure_dns_title" android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings" /> @@ -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.accessibility.settings.CaretBrowsingDialog; -@@ -825,15 +829,20 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -819,15 +823,20 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt BrowserWindowType.NORMAL, currentTabModel, mMultiInstanceManager); // For saving non-incognito tab closures for Recent Tabs. @@ -286,7 +286,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct // Defer creation of this helper so it triggers after TabGroupModelFilter observers. mUndoRefocusHelper = new UndoRefocusHelper( -@@ -3274,7 +3283,7 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3282,7 +3291,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt // We determine SupportedProfileType in onPreCreate(). // We determine the model as soon as possible so every systems get initialized coherently. @@ -298,15 +298,15 @@ 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 -@@ -101,6 +101,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH - import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; +@@ -106,6 +106,7 @@ import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; + import org.chromium.chrome.browser.desktop_site.DesktopSiteUtils; import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.devtools.DevToolsWindowAndroid; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.download.DownloadManagerService; -@@ -2144,6 +2145,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2189,6 +2190,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -319,7 +319,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/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 -@@ -92,6 +92,8 @@ import java.util.Iterator; +@@ -93,6 +93,8 @@ import java.util.Iterator; import java.util.List; import java.util.function.Supplier; @@ -328,7 +328,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App /** * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu * items based on activity state. -@@ -633,8 +635,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties +@@ -669,8 +671,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !isNativePage && !isFileScheme && !isContentScheme @@ -343,7 +343,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.shared_preferences.SharedPreferencesManager; +@@ -43,6 +43,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; @@ -351,7 +351,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; -@@ -437,6 +438,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -452,6 +453,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { mShowEphemeralTabNewLabel = null; mCustomActionMap.clear(); @@ -361,7 +361,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr List groupedItems = new ArrayList<>(); if (mParams.isPage() && shouldShowEmptySpaceContextMenu()) { -@@ -508,7 +512,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -523,7 +527,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { @@ -422,20 +422,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import org.chromium.chrome.browser.DefaultBrowserInfo; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.bookmarks.BookmarkModel; -@@ -248,6 +249,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat - openInChromeItemVisible = false; +@@ -240,6 +241,10 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat tryAddingReadAloud = false; } -+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { -+ downloadItemVisible = true; -+ } - boolean isNativePage = - url.getScheme().equals(UrlConstants.CHROME_SCHEME) ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ downloadItemVisible = true; ++ } ++ + if (CustomTabIntentDataProvider.isOpenInBrowserDisallowed(mUiType, mIsIncognitoBranded)) { + openInChromeItemVisible = false; + } 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 -@@ -105,6 +105,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -106,6 +106,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.net.NetId; @@ -445,7 +446,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; -@@ -1328,6 +1331,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1362,6 +1365,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return getInitialActivityWidth() > 0; } @@ -549,7 +550,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -451,9 +459,22 @@ public class HistoryManager +@@ -458,9 +466,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -573,7 +574,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; } -@@ -514,7 +535,7 @@ public class HistoryManager +@@ -521,7 +542,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -618,7 +619,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -25,6 +25,7 @@ import org.chromium.base.supplier.OneshotSupplier; +@@ -26,6 +26,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; @@ -626,7 +627,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -411,7 +412,8 @@ public class NativePageFactory { +@@ -425,7 +426,8 @@ public class NativePageFactory { NativePage page; @@ -879,7 +880,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme import org.chromium.components.browser_ui.accessibility.AccessibilitySettings; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.settings.FragmentSettingsNavigation; -@@ -229,6 +230,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -211,6 +212,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl SigninAndHistorySyncActivityLauncherImpl.get(), new SettingsCustomTabLauncherImpl())); } @@ -998,7 +999,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java -@@ -26,6 +26,7 @@ import org.chromium.base.supplier.OneshotSupplier; +@@ -27,6 +27,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; @@ -1006,7 +1007,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ai.AiAssistantService; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; -@@ -241,7 +242,8 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -245,7 +246,8 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm // 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. @@ -1019,7 +1020,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/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 -@@ -209,6 +209,8 @@ import org.chromium.content_public.common.ContentSwitches; +@@ -216,6 +216,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; @@ -1028,7 +1029,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.UiAndroidFeatureList; import org.chromium.ui.display.DisplayUtil; -@@ -1257,7 +1259,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1309,7 +1311,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1040,7 +1041,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -55,6 +55,10 @@ import org.chromium.url.GURL; +@@ -56,6 +56,10 @@ import org.chromium.url.GURL; import java.util.Collections; import java.util.function.Supplier; @@ -1051,7 +1052,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}. */ public class ChromeTabCreator implements TabCreator, NeedsTabModel, NeedsTabModelOrderController { /** -@@ -594,7 +598,6 @@ public class ChromeTabCreator implements TabCreator, NeedsTabModel, NeedsTabMode +@@ -598,7 +602,6 @@ public class ChromeTabCreator implements TabCreator, NeedsTabModel, NeedsTabMode // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. public @Nullable Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1062,7 +1063,7 @@ 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 -@@ -20,6 +20,7 @@ import org.chromium.build.annotations.Initializer; +@@ -20,6 +20,7 @@ import org.chromium.build.annotations.MonotonicNonNull; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; @@ -1070,7 +1071,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; -@@ -139,6 +140,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod +@@ -138,6 +139,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ProfileProvider profileProvider = mProfileProviderSupplier.get(); assert profileProvider != null; @@ -1090,7 +1091,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton; import org.chromium.chrome.browser.crypto.CipherFactory; import org.chromium.chrome.browser.flags.ChromeFeatureList; -@@ -750,6 +751,12 @@ public class TabPersistentStoreImpl implements TabPersistentStore { +@@ -723,6 +724,12 @@ public class TabPersistentStoreImpl implements TabPersistentStore { } } } @@ -1229,7 +1230,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 -@@ -461,6 +461,15 @@ ChromeAutocompleteProviderClient::GetAimEligibilityService() const { +@@ -462,6 +462,15 @@ ChromeAutocompleteProviderClient::GetAimEligibilityService() const { return AimEligibilityServiceFactory::GetForProfile(profile_); } @@ -1284,7 +1285,7 @@ diff --git a/chrome/browser/autocomplete/remote_suggestions_service_factory.cc b diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -37,6 +37,7 @@ +@@ -33,6 +33,7 @@ #include "base/strings/strcat.h" #include "base/strings/utf_string_conversions.h" #include "base/uuid.h" @@ -1292,7 +1293,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" #include "chrome/browser/commerce/shopping_service_factory.h" -@@ -214,6 +215,12 @@ ScopedJavaLocalRef JNI_BookmarkBridge_NativeGetForProfile( +@@ -210,6 +211,12 @@ static ScopedJavaLocalRef JNI_BookmarkBridge_NativeGetForProfile( if (!profile) return nullptr; @@ -1356,7 +1357,7 @@ diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.c diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc -@@ -83,6 +83,12 @@ +@@ -80,6 +80,12 @@ #include "chrome/browser/safe_browsing/safe_browsing_service.h" #endif @@ -1369,7 +1370,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); using safe_browsing::SafeBrowsingNavigationObserverManager; -@@ -223,6 +229,16 @@ const int kExtensionReferrerUserGestureLimit = 2; +@@ -220,6 +226,16 @@ const int kExtensionReferrerUserGestureLimit = 2; WebstorePrivateApi::Delegate* test_delegate = nullptr; @@ -1386,7 +1387,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api // We allow the web store to set a string containing login information when a // purchase is made, so that when a user logs into sync with a different // account we can recognize the situation. The Get function returns the login if -@@ -429,7 +445,7 @@ WebstorePrivateBeginInstallWithManifest3Function::Run() { +@@ -426,7 +442,7 @@ WebstorePrivateBeginInstallWithManifest3Function::Run() { params_ = Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(params_); @@ -1395,7 +1396,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api if (!crx_file::id_util::IdIsValid(details().id)) { return RespondNow(BuildResponse(api::webstore_private::Result::kInvalidId, -@@ -965,7 +981,7 @@ void WebstorePrivateBeginInstallWithManifest3Function:: +@@ -948,7 +964,7 @@ void WebstorePrivateBeginInstallWithManifest3Function:: DCHECK(extension); DCHECK(contents); @@ -1404,7 +1405,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api std::string message_from_admin = ExtensionManagementFactory::GetForBrowserContext(profile) -@@ -1001,7 +1017,7 @@ WebstorePrivateCompleteInstallFunction::Run() { +@@ -984,7 +1000,7 @@ WebstorePrivateCompleteInstallFunction::Run() { std::optional params = CompleteInstall::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(params); @@ -1413,7 +1414,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api if (profile->IsGuestSession() || profile->IsOffTheRecord()) { return RespondNow(Error(kIncognitoError)); } -@@ -1319,7 +1335,7 @@ ExtensionFunction::ResponseValue +@@ -1302,7 +1318,7 @@ ExtensionFunction::ResponseValue WebstorePrivateGetExtensionStatusFunction::BuildResponseWithoutManifest( const ExtensionId& extension_id) { ExtensionInstallStatus status = GetWebstoreExtensionInstallStatus( @@ -1422,7 +1423,7 @@ diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api api::webstore_private::ExtensionInstallStatus api_status = ConvertExtensionInstallStatusForAPI(status); return ArgumentList(GetExtensionStatus::Results::Create(api_status)); -@@ -1333,7 +1349,7 @@ void WebstorePrivateGetExtensionStatusFunction::OnManifestParsed( +@@ -1316,7 +1332,7 @@ void WebstorePrivateGetExtensionStatusFunction::OnManifestParsed( return; } @@ -1478,7 +1479,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/history/history_tab_helper.h --- a/chrome/browser/history/history_tab_helper.h +++ b/chrome/browser/history/history_tab_helper.h -@@ -17,6 +17,8 @@ +@@ -18,6 +18,8 @@ #include "components/translate/core/browser/translate_driver.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" @@ -1487,7 +1488,7 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor namespace history { struct HistoryAddPageArgs; -@@ -59,6 +61,11 @@ class HistoryTabHelper +@@ -60,6 +62,11 @@ class HistoryTabHelper std::optional GetAppId() { return app_id_; } #endif @@ -1807,7 +1808,7 @@ diff --git a/chrome/browser/offline_pages/request_coordinator_factory.h b/chrome diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -261,6 +261,7 @@ +@@ -262,6 +262,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1815,7 +1816,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" -@@ -2022,6 +2023,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1774,6 +1775,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1880,7 +1881,7 @@ diff --git a/chrome/browser/profiles/profile_selections.h b/chrome/browser/profi diff --git a/chrome/browser/ui/android/native_page/BUILD.gn b/chrome/browser/ui/android/native_page/BUILD.gn --- a/chrome/browser/ui/android/native_page/BUILD.gn +++ b/chrome/browser/ui/android/native_page/BUILD.gn -@@ -33,6 +33,8 @@ robolectric_library("junit") { +@@ -34,6 +34,8 @@ robolectric_library("junit") { deps = [ ":java", @@ -1901,7 +1902,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ /** An interface for pages that will be using Android views instead of html/rendered Web content. */ @NullMarked public interface NativePage { -@@ -192,7 +194,8 @@ public interface NativePage { +@@ -201,7 +203,8 @@ public interface NativePage { */ static boolean isNativePageUrl(GURL url, boolean isIncognito, boolean hasPdfDownload) { return url != null @@ -1911,7 +1912,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -202,7 +205,7 @@ public interface NativePage { +@@ -211,7 +214,7 @@ public interface NativePage { * not have chrome or chrome-native scheme. */ static boolean isChromePageUrl(GURL url, boolean isIncognito) { @@ -1920,7 +1921,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -216,7 +219,8 @@ public interface NativePage { +@@ -225,7 +228,8 @@ public interface NativePage { GURL url, @Nullable NativePage candidatePage, boolean isIncognito, @@ -1930,7 +1931,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. -@@ -234,7 +238,7 @@ public interface NativePage { +@@ -243,7 +247,7 @@ public interface NativePage { // created after the pdf document is re-downloaded in other parts of the code. return NativePageType.NONE; } else { @@ -1939,7 +1940,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } } -@@ -246,7 +250,7 @@ public interface NativePage { +@@ -255,7 +259,7 @@ public interface NativePage { * which do not have chrome or chrome-native scheme. */ private static @NativePageType int chromePageType( @@ -1948,7 +1949,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) -@@ -266,7 +270,8 @@ public interface NativePage { +@@ -275,7 +279,8 @@ public interface NativePage { return NativePageType.DOWNLOADS; } else if (UrlConstants.HISTORY_HOST.equals(host)) { return NativePageType.HISTORY; @@ -1961,7 +1962,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -101,6 +101,11 @@ import org.chromium.ui.interpolators.Interpolators; +@@ -108,6 +108,11 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; @@ -1973,7 +1974,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.Collection; import java.util.List; -@@ -497,6 +502,9 @@ class LocationBarMediator +@@ -528,6 +533,9 @@ class LocationBarMediator if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) return; Tab tab = mLocationBarDataProvider.getTab(); if (tab == null) return; @@ -1986,7 +1987,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 -@@ -6900,6 +6900,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6990,6 +6990,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -2073,7 +2074,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro #include "chrome/common/url_constants.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_fetcher.h" -@@ -165,6 +166,11 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -166,6 +167,11 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( // Download the OpenSearch description document. If this is successful, a // new keyword will be created when done. @@ -2088,7 +2089,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 -@@ -4116,6 +4116,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4153,6 +4153,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2104,7 +2105,7 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc --- a/components/content_settings/core/browser/content_settings_pref_provider.cc +++ b/components/content_settings/core/browser/content_settings_pref_provider.cc -@@ -122,10 +122,12 @@ void PrefProvider::RegisterProfilePrefs( +@@ -129,10 +129,12 @@ void PrefProvider::RegisterProfilePrefs( PrefProvider::PrefProvider(PrefService* prefs, bool off_the_record, @@ -2117,7 +2118,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov store_last_modified_(store_last_modified), clock_(base::DefaultClock::GetInstance()) { TRACE_EVENT_BEGIN("startup", "PrefProvider::PrefProvider"); -@@ -148,10 +150,12 @@ PrefProvider::PrefProvider(PrefService* prefs, +@@ -155,10 +157,12 @@ PrefProvider::PrefProvider(PrefService* prefs, WebsiteSettingsRegistry* website_settings = WebsiteSettingsRegistry::GetInstance(); for (const WebsiteSettingsInfo* info : *website_settings) { @@ -2189,7 +2190,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics); -@@ -551,6 +552,8 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -556,6 +557,8 @@ class HostContentSettingsMap : public content_settings::Observer, // Whether this settings map is for an incognito or guest session. bool is_off_the_record_; @@ -2201,10 +2202,10 @@ 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 -@@ -81,3 +81,7 @@ AutocompleteProviderClient::GetGeminiPrototypeOmniboxService() const { +@@ -77,3 +77,7 @@ base::WeakPtr + AutocompleteProviderClient::GetWeakPtr() { return nullptr; } - #endif // BUILDFLAG(IS_IOS) + +bool AutocompleteProviderClient::IsAlwaysIncognitoEnabled() const { + return false; @@ -2212,7 +2213,7 @@ diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/compon diff --git a/components/omnibox/browser/autocomplete_provider_client.h b/components/omnibox/browser/autocomplete_provider_client.h --- a/components/omnibox/browser/autocomplete_provider_client.h +++ b/components/omnibox/browser/autocomplete_provider_client.h -@@ -161,6 +161,7 @@ class AutocompleteProviderClient : public OmniboxAction::Client { +@@ -154,6 +154,7 @@ class AutocompleteProviderClient : public OmniboxAction::Client { virtual bool IsOffTheRecord() const = 0; virtual bool IsIncognitoProfile() const = 0; virtual bool IsGuestSession() const = 0; @@ -2223,7 +2224,7 @@ diff --git a/components/omnibox/browser/autocomplete_provider_client.h b/compone diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omnibox/browser/base_search_provider.cc --- a/components/omnibox/browser/base_search_provider.cc +++ b/components/omnibox/browser/base_search_provider.cc -@@ -401,7 +401,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( +@@ -403,7 +403,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( // Don't make a suggest request if in incognito mode; unless for the Lens // searchboxes. @@ -2235,7 +2236,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 -@@ -922,7 +922,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( +@@ -948,7 +948,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-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index 3fd2a0ff..21b5d297 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -66,7 +66,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/browser/content_settings_utils.h | 6 ++ .../core/common/content_settings_enums.mojom | 9 ++ .../page_info/PageInfoController.java | 4 +- - .../PermissionParamsListBuilder.java | 13 ++- + .../PermissionParamsListBuilder.java | 12 ++- .../android/page_info_controller_android.cc | 10 ++- components/page_info/page_info.cc | 2 + components/page_info/page_info.h | 1 + @@ -89,7 +89,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/permission_request.h | 18 +++- .../permissions/permission_request_manager.cc | 49 ++++++----- .../permissions/permission_request_manager.h | 11 ++- - 37 files changed, 509 insertions(+), 75 deletions(-) + 37 files changed, 508 insertions(+), 75 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc @@ -178,7 +178,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.cc b/chrome OneTimePermissionsTracker::~OneTimePermissionsTracker() = default; OneTimePermissionsTracker::OriginTrackEntry::OriginTrackEntry() = default; -@@ -255,6 +281,12 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( +@@ -260,6 +286,12 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( for (auto& observer : observer_list_) { observer.OnLastPageFromOriginClosed(origin); } @@ -202,7 +202,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.h b/chrome/ #include "components/content_settings/core/common/content_settings_types.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/visibility.h" -@@ -24,7 +25,7 @@ class OneTimePermissionsTracker : public KeyedService { +@@ -26,7 +27,7 @@ class OneTimePermissionsTracker : public KeyedService { void (OneTimePermissionsTracker::*)(const url::Origin&); public: @@ -211,7 +211,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.h b/chrome/ ~OneTimePermissionsTracker() override; OneTimePermissionsTracker(const OneTimePermissionsTracker&) = delete; -@@ -138,7 +139,7 @@ class OneTimePermissionsTracker : public KeyedService { +@@ -147,7 +148,7 @@ class OneTimePermissionsTracker : public KeyedService { base::ObserverList observer_list_; std::map origin_tracker_; @@ -233,7 +233,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker_factory.cc diff --git a/chrome/browser/ui/views/permissions/chip/chip_controller.cc b/chrome/browser/ui/views/permissions/chip/chip_controller.cc --- a/chrome/browser/ui/views/permissions/chip/chip_controller.cc +++ b/chrome/browser/ui/views/permissions/chip/chip_controller.cc -@@ -228,7 +228,7 @@ void ChipController::OnWidgetDestroyed(views::Widget* widget) { +@@ -227,7 +227,7 @@ void ChipController::OnWidgetDestroyed(views::Widget* widget) { active_chip_permission_request_manager_.value()->Accept(); break; case permissions::PermissionAction::GRANTED_ONCE: @@ -269,7 +269,7 @@ diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_v 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 -@@ -696,6 +696,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -715,6 +715,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } @RequiresNonNull({"mSite"}) @@ -281,7 +281,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); long usage = mSite.getTotalUsage(); -@@ -1313,6 +1318,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1407,6 +1412,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment .getDefaultColor()); } } @@ -425,33 +425,33 @@ diff --git a/components/content_settings/core/common/content_settings_enums.mojo diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java -@@ -376,8 +376,8 @@ public class PageInfoController +@@ -387,9 +387,9 @@ public class PageInfoController */ @CalledByNative private void addPermissionSection( -- String name, String nameMidSentence, int type, boolean allowed) { -- mPermissionParamsListBuilder.addPermissionEntry(name, nameMidSentence, type, allowed); -+ String name, String nameMidSentence, int type, boolean allowed, boolean is_user_session) { -+ mPermissionParamsListBuilder.addPermissionEntry(name, nameMidSentence, type, allowed, is_user_session); +- String name, String nameMidSentence, int type, boolean allowed, boolean requested) { ++ String name, String nameMidSentence, int type, boolean allowed, boolean requested, boolean is_user_session) { + mPermissionParamsListBuilder.addPermissionEntry( +- name, nameMidSentence, type, allowed, requested); ++ name, nameMidSentence, type, allowed, requested, is_user_session); } /** Update the permissions view based on the contents of mDisplayedPermissions. */ 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 -@@ -46,8 +46,9 @@ public class PermissionParamsListBuilder { - mEntries = new ArrayList<>(); +@@ -47,8 +47,8 @@ public class PermissionParamsListBuilder { } -- public void addPermissionEntry(String name, String nameMidSentence, int type, boolean allowed) { -- mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, allowed)); -+ public void addPermissionEntry(String name, String nameMidSentence, int type, boolean allowed, -+ boolean is_user_session) { -+ mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, allowed, is_user_session)); + public void addPermissionEntry( +- String name, String nameMidSentence, int type, boolean allowed, boolean requested) { +- mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, allowed, requested)); ++ String name, String nameMidSentence, int type, boolean allowed, boolean requested, boolean is_user_session) { ++ mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, allowed, requested, is_user_session)); } public void clearPermissionEntries() { -@@ -84,6 +85,10 @@ public class PermissionParamsListBuilder { +@@ -85,6 +85,10 @@ public class PermissionParamsListBuilder { } else { warningTextResource = R.string.page_info_android_permission_blocked; } @@ -462,18 +462,20 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ } } -@@ -112,12 +117,14 @@ public class PermissionParamsListBuilder { - public final String nameMidSentence; +@@ -115,14 +119,16 @@ public class PermissionParamsListBuilder { public final int type; public final boolean allowed; + public final boolean requested; + public final boolean is_user_session; -- PageInfoPermissionEntry(String name, String nameMidSentence, int type, boolean allowed) { -+ PageInfoPermissionEntry(String name, String nameMidSentence, int type, boolean allowed, boolean is_user_session) { + PageInfoPermissionEntry( +- String name, String nameMidSentence, int type, boolean allowed, boolean requested) { ++ String name, String nameMidSentence, int type, boolean allowed, boolean requested, boolean is_user_session) { this.name = name; this.nameMidSentence = nameMidSentence; this.type = type; this.allowed = allowed; + this.requested = requested; + this.is_user_session = is_user_session; } @@ -481,40 +483,40 @@ 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 -@@ -207,6 +207,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( - - std::map - user_specified_settings_to_display; +@@ -214,6 +214,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( + // being requested. This is needed for the Loud Clapper experiment + // (crbug.com/458351800). + bool requested_notifications = false; + std::map + user_specified_settings_is_user_session; for (const auto& permission : permission_info_list) { if (base::Contains(permissions_to_display, permission.type)) { -@@ -219,6 +221,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -226,6 +228,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( user_specified_settings_to_display[permission.type] = info->delegate().IsAnyPermissionAllowed(*setting_to_display); + user_specified_settings_is_user_session[permission.type] = + permission.is_user_session; } - } - } -@@ -235,7 +239,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( - ConvertUTF16ToJavaString(env, setting_title), + + // Notifications permission can have the setting to display as DEFAULT +@@ -252,7 +256,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( ConvertUTF16ToJavaString(env, setting_title_mid_sentence), static_cast(permission), -- user_specified_settings_to_display[permission]); -+ user_specified_settings_to_display[permission], + user_specified_settings_to_display[permission], +- requested_notifications); ++ requested_notifications, + user_specified_settings_is_user_session[permission]); } } -@@ -248,7 +253,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -265,7 +270,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( env, controller_jobject_, ConvertUTF16ToJavaString(env, object_title), ConvertUTF16ToJavaString(env, object_title), static_cast(chosen_object->ui_info->content_settings_type), -- static_cast(CONTENT_SETTING_ALLOW)); -+ static_cast(CONTENT_SETTING_ALLOW), +- static_cast(CONTENT_SETTING_ALLOW), requested_notifications); ++ static_cast(CONTENT_SETTING_ALLOW), requested_notifications, + /* is_user_session */ false); } @@ -522,7 +524,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 -@@ -1331,6 +1331,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1296,6 +1296,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -545,9 +547,9 @@ diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java --- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java -@@ -16,6 +16,7 @@ import org.jni_zero.NativeMethods; - import org.chromium.build.annotations.NullMarked; +@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; + import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; +import org.chromium.components.content_settings.LifetimeMode; @@ -682,7 +684,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc -@@ -118,7 +118,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { +@@ -123,7 +123,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } @@ -707,7 +709,7 @@ diff --git a/components/permissions/android/permission_prompt/embedded_permissio diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc -@@ -137,6 +137,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { +@@ -138,6 +138,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { static_cast(permission_prompt_->GetEmbeddedPromptVariant())); } @@ -719,7 +721,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ // static std::unique_ptr PermissionDialogDelegate::Create( content::WebContents* web_contents, -@@ -165,12 +170,22 @@ PermissionDialogDelegate::CreateForTesting( +@@ -166,12 +171,22 @@ PermissionDialogDelegate::CreateForTesting( void PermissionDialogDelegate::Accept(JNIEnv* env) { CHECK(permission_prompt_); @@ -743,7 +745,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ } void PermissionDialogDelegate::Acknowledge(JNIEnv* env) { -@@ -180,6 +195,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env) { +@@ -181,6 +196,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env) { void PermissionDialogDelegate::Deny(JNIEnv* env) { CHECK(permission_prompt_); @@ -760,7 +762,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.h b/components/permissions/android/permission_prompt/permission_dialog_delegate.h --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.h +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.h -@@ -42,6 +42,7 @@ class PermissionDialogJavaDelegate { +@@ -43,6 +43,7 @@ class PermissionDialogJavaDelegate { const favicon_base::FaviconRawBitmapResult& favicon_result); virtual void DismissDialog(); @@ -789,7 +791,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_prompt_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.h b/components/permissions/android/permission_prompt/permission_prompt_android.h --- a/components/permissions/android/permission_prompt/permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/permission_prompt_android.h -@@ -56,9 +56,10 @@ class PermissionPromptAndroid : public PermissionPrompt { +@@ -57,9 +57,10 @@ class PermissionPromptAndroid : public PermissionPrompt { const; virtual void Closing(); virtual void Accept(); @@ -851,24 +853,24 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr IsRequestingOriginDSE(request_data.requesting_origin); if (decision == PermissionDecision::kAllow && @@ -210,7 +221,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, - request_data.embedding_origin, - std::move(callback), false /* persist */, -- PermissionDecision::kDeny, -+ PermissionDecision::kDeny, lifetime_option, - request_data.prompt_options); + FinishNotifyPermissionSet( + request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), +- false /* persist */, PermissionDecision::kDeny, ++ false /* persist */, PermissionDecision::kDeny, lifetime_option, + request_data.prompt_options, + request_data.embedded_permission_request_descriptor.Clone()); return; - } -@@ -231,7 +242,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, - request_data.embedding_origin, - std::move(callback), false /* persist */, -- PermissionDecision::kDeny, -+ PermissionDecision::kDeny, lifetime_option, - request_data.prompt_options); +@@ -232,7 +243,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet( + request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), +- false /* persist */, PermissionDecision::kDeny, ++ false /* persist */, PermissionDecision::kDeny, lifetime_option, + request_data.prompt_options, + request_data.embedded_permission_request_descriptor.Clone()); return; - } -@@ -244,14 +255,14 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -246,14 +257,14 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( base::BindOnce( &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, weak_factory_.GetWeakPtr(), request_data.requesting_origin, @@ -878,14 +880,14 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr return; } - FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, - request_data.embedding_origin, std::move(callback), -- persist, decision, request_data.prompt_options); -+ persist, decision, lifetime_option, request_data.prompt_options); + FinishNotifyPermissionSet( + request_data.id, request_data.requesting_origin, +- request_data.embedding_origin, std::move(callback), persist, decision, ++ request_data.embedding_origin, std::move(callback), persist, decision, lifetime_option, + request_data.prompt_options, + request_data.embedded_permission_request_descriptor.Clone()); } - - content::PermissionResult -@@ -428,7 +439,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -432,7 +443,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( const GURL& requesting_origin, const GURL& embedding_origin, bool persist, @@ -894,7 +896,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr std::optional prompt_options, LocationSettingsDialogOutcome prompt_outcome) { bool is_default_search = IsRequestingOriginDSE(requesting_origin); -@@ -448,7 +459,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -452,7 +463,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( FinishNotifyPermissionSet(location_settings_dialog_request_id_, requesting_origin, embedding_origin, std::move(location_settings_dialog_callback_), @@ -903,18 +905,18 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr location_settings_dialog_request_id_ = PermissionRequestID(content::GlobalRenderFrameHostId(0, 0), -@@ -461,7 +472,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( +@@ -465,7 +476,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( const GURL& embedding_origin, BrowserPermissionCallback callback, bool persist, - PermissionDecision decision, + PermissionDecision decision, content_settings::mojom::LifetimeMode lifetime_option, - std::optional prompt_options) { - PermissionRequestData request_data( - this, id, -@@ -470,9 +481,10 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( - blink::PermissionType::GEOLOCATION)), - requesting_origin, embedding_origin); + std::optional prompt_options, + blink::mojom::EmbeddedPermissionRequestDescriptorPtr + embedded_permission_request_descriptor) { +@@ -478,9 +489,10 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + request_data.embedded_permission_request_descriptor = + std::move(embedded_permission_request_descriptor); request_data.prompt_options = prompt_options.value_or(std::monostate()); - GeolocationPermissionContext::NotifyPermissionSet( + GeolocationPermissionContext::NotifyPermissionSetImpl( @@ -949,14 +951,14 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr std::optional prompt_options, LocationSettingsDialogOutcome prompt_outcome); -@@ -145,6 +152,7 @@ class GeolocationPermissionContextAndroid - BrowserPermissionCallback callback, - bool persist, - PermissionDecision decision, -+ content_settings::mojom::LifetimeMode lifetime_option, - std::optional prompt_options); - - std::unique_ptr location_settings_; +@@ -146,6 +153,7 @@ class GeolocationPermissionContextAndroid + BrowserPermissionCallback callback, + bool persist, + PermissionDecision decision, ++ content_settings::mojom::LifetimeMode lifetime_option, + std::optional prompt_options, + blink::mojom::EmbeddedPermissionRequestDescriptorPtr + embedded_permission_request_descriptor = nullptr); diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/components/permissions/embedded_permission_prompt_flow_model.cc --- a/components/permissions/embedded_permission_prompt_flow_model.cc +++ b/components/permissions/embedded_permission_prompt_flow_model.cc @@ -972,7 +974,7 @@ diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/c diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc -@@ -282,6 +282,17 @@ PermissionContextBase::CreatePermissionRequest( +@@ -281,6 +281,17 @@ PermissionContextBase::CreatePermissionRequest( std::move(request_finished_callback), UsesAutomaticEmbargo()); } @@ -990,7 +992,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm bool PermissionContextBase::UsesAutomaticEmbargo() const { return true; } -@@ -626,7 +637,8 @@ void PermissionContextBase::DecidePermission( +@@ -624,7 +635,8 @@ void PermissionContextBase::DecidePermission( void PermissionContextBase::PermissionDecided( PermissionDecision decision, bool is_final_decision, @@ -1000,7 +1002,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm UserMadePermissionDecision(request_data.id, request_data.requesting_origin, request_data.embedding_origin, decision); // If a permission request originates from an embedded element, its -@@ -650,11 +662,12 @@ void PermissionContextBase::PermissionDecided( +@@ -648,11 +660,12 @@ void PermissionContextBase::PermissionDecided( // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { @@ -1017,7 +1019,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } } -@@ -739,6 +752,30 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -737,6 +750,30 @@ void PermissionContextBase::NotifyPermissionSet( bool persist, PermissionDecision decision, bool is_final_decision) { @@ -1048,7 +1050,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // Note that rfh may be null, see crbug.com/426909787. -@@ -754,8 +791,8 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -752,8 +789,8 @@ void PermissionContextBase::NotifyPermissionSet( if (persist) { // Clone new value, because we need it again for the callback. @@ -1059,7 +1061,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } if (is_final_decision) { -@@ -794,6 +831,17 @@ void PermissionContextBase::UpdateSetting( +@@ -811,6 +848,17 @@ void PermissionContextBase::UpdateSetting( const PermissionRequestData& request_data, PermissionSetting setting, bool is_one_time) { @@ -1077,7 +1079,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_EQ(request_data.requesting_origin, request_data.requesting_origin.DeprecatedGetOriginAsURL()); DCHECK_EQ(request_data.embedding_origin, -@@ -803,6 +851,8 @@ void PermissionContextBase::UpdateSetting( +@@ -820,6 +868,8 @@ void PermissionContextBase::UpdateSetting( constraints.set_session_model( is_one_time ? content_settings::mojom::SessionModel::ONE_TIME : content_settings::mojom::SessionModel::DURABLE); @@ -1133,7 +1135,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi // Implementors can override this method to avoid using automatic embargo. virtual bool UsesAutomaticEmbargo() const; -@@ -281,7 +304,8 @@ class PermissionContextBase : public content_settings::Observer { +@@ -285,7 +308,8 @@ class PermissionContextBase : public content_settings::Observer { // allows/blocks/dismisses a permission prompt. void PermissionDecided(PermissionDecision decision, bool is_final_decision, @@ -1177,7 +1179,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio PermissionRequest::~PermissionRequest() { std::move(request_finished_callback_).Run(); } -@@ -431,20 +441,40 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -433,20 +443,40 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { return request_type() == RequestType::kStorageAccess; } @@ -1261,7 +1263,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission // Called when the user has cancelled the permission request. This // corresponds to a denial, but is segregated in case the context needs to -@@ -242,6 +253,9 @@ class PermissionRequest { +@@ -247,6 +258,9 @@ class PermissionRequest { // Called once a decision is made about the permission. PermissionDecidedCallback permission_decided_callback_; @@ -1274,7 +1276,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc --- a/components/permissions/permission_request_manager.cc +++ b/components/permissions/permission_request_manager.cc -@@ -206,12 +206,12 @@ void PermissionRequestManager::AddRequest( +@@ -208,12 +208,12 @@ void PermissionRequestManager::AddRequest( if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDenyPermissionPrompts)) { @@ -1289,7 +1291,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p return; } -@@ -282,9 +282,9 @@ void PermissionRequestManager::AddRequest( +@@ -284,9 +284,9 @@ void PermissionRequestManager::AddRequest( if (should_auto_approve_request) { if (should_auto_approve_request == PermissionAction::GRANTED) { @@ -1301,7 +1303,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } return; } -@@ -611,7 +611,8 @@ void PermissionRequestManager::Accept() { +@@ -615,7 +615,8 @@ void PermissionRequestManager::Accept() { StorePermissionActionForUMA(request->requesting_origin(), request->request_type(), action); PermissionGrantedIncludingDuplicates(request.get(), @@ -1309,9 +1311,9 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p + /*is_one_time=*/false, + content_settings::mojom::LifetimeMode::ALWAYS); - #if !BUILDFLAG(IS_ANDROID) + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) std::optional content_settings_type = -@@ -629,7 +630,7 @@ void PermissionRequestManager::Accept() { +@@ -633,7 +634,7 @@ void PermissionRequestManager::Accept() { CurrentRequestsDecided(action); } @@ -1320,7 +1322,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (ignore_callbacks_from_prompt_) { return; } -@@ -641,7 +642,8 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -645,7 +646,8 @@ void PermissionRequestManager::AcceptThisTime() { StorePermissionActionForUMA(request->requesting_origin(), request->request_type(), action); PermissionGrantedIncludingDuplicates(request.get(), @@ -1330,7 +1332,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } NotifyRequestDecided(action); -@@ -649,6 +651,15 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -653,6 +655,15 @@ void PermissionRequestManager::AcceptThisTime() { } void PermissionRequestManager::Deny() { @@ -1346,7 +1348,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (ignore_callbacks_from_prompt_) { return; } -@@ -669,7 +680,7 @@ void PermissionRequestManager::Deny() { +@@ -673,7 +684,7 @@ void PermissionRequestManager::Deny() { for (const auto& request : requests_) { StorePermissionActionForUMA(request->requesting_origin(), request->request_type(), action); @@ -1355,7 +1357,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } NotifyRequestDecided(action); -@@ -1306,32 +1317,32 @@ PermissionRequestManager::VisitDuplicateRequests( +@@ -1366,32 +1377,32 @@ PermissionRequestManager::VisitDuplicateRequests( void PermissionRequestManager::PermissionGrantedIncludingDuplicates( PermissionRequest* request, @@ -1398,7 +1400,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p request); } -@@ -1608,7 +1619,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { +@@ -1679,7 +1690,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { } switch (auto_response_for_test_) { case ACCEPT_ONCE: @@ -1422,7 +1424,7 @@ diff --git a/components/permissions/permission_request_manager.h b/components/pe void Dismiss() override; void Ignore() override; void FinalizeCurrentRequests() override; -@@ -426,9 +428,12 @@ class PermissionRequestManager +@@ -441,9 +443,12 @@ class PermissionRequestManager // Calls PermissionGranted on a request and all its duplicates. void PermissionGrantedIncludingDuplicates(PermissionRequest* request, diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index a39edfc9..f09fc190 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -18,8 +18,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmark_ui_operations_helper.cc | 2 + .../bookmark_bar_page_handler.cc | 2 + components/bookmark_bar_strings.grdp | 6 +++ - .../bookmarks/browser/bookmark_codec.cc | 20 +++++++-- - components/bookmarks/browser/bookmark_codec.h | 7 ++- + .../bookmarks/browser/bookmark_codec.cc | 15 ++++++- + components/bookmarks/browser/bookmark_codec.h | 4 ++ .../browser/bookmark_load_details.cc | 15 +++++-- .../bookmarks/browser/bookmark_load_details.h | 2 + .../bookmarks/browser/bookmark_model.cc | 3 +- @@ -31,15 +31,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 9 +++- .../bookmark_specifics_conversions.cc | 1 + - 27 files changed, 257 insertions(+), 14 deletions(-) + 27 files changed, 252 insertions(+), 11 deletions(-) diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/values/ids.xml --- a/chrome/android/java/res/values/ids.xml +++ b/chrome/android/java/res/values/ids.xml -@@ -194,6 +194,7 @@ found in the LICENSE file. - +@@ -197,6 +197,7 @@ found in the LICENSE file. + + @@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -294,6 +295,9 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; +@@ -299,6 +300,9 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; import org.chromium.chrome.browser.ui.browser_window.BrowserWindowType; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; @@ -65,16 +65,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityClient; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityExtras.IntentOrigin; import org.chromium.chrome.browser.ui.signin.BottomSheetSigninAndHistorySyncConfig; -@@ -308,6 +312,8 @@ import org.chromium.chrome.browser.usage_stats.UsageStatsService; - import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; +@@ -314,6 +318,8 @@ import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.xr.scenecore.XrSceneCoreSessionInitializerImpl; import org.chromium.chrome.browser.xr.scenecore.XrSceneCoreSessionManagerImpl; + import org.chromium.components.browser_ui.accessibility.AccessibilityFeatureMap; +import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.share.ShareParams; import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate; -@@ -3886,6 +3892,8 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3929,6 +3935,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt CloseAllTabsDialog.show( this, getModalDialogManagerSupplier(), tabModelSelector, closeAllTabsRunnable); RecordUserAction.record("MobileMenuCloseAllTabs"); @@ -83,7 +83,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct } else if (id == R.id.close_all_incognito_tabs_menu_id) { boolean allowUndo = TabClosureParamsUtils.shouldAllowUndo(triggeringMotion); -@@ -4013,6 +4021,41 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -4058,6 +4066,41 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus); } @@ -128,7 +128,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct 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 -@@ -288,6 +288,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -292,6 +292,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm // Bookmarks modelList.add(buildBookmarksItem()); @@ -143,7 +143,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab // Recent Tabs if (shouldShowRecentTabsItem()) modelList.add(buildRecentTabsItem()); -@@ -468,6 +476,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -478,6 +486,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm } modelList.add(buildCloseAllTabsItem()); if (shouldShowTinkerTank()) modelList.add(buildTinkerTankItem()); @@ -160,7 +160,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -340,6 +340,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -336,6 +336,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -194,7 +194,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -452,6 +479,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -448,6 +475,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -202,7 +202,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -560,6 +588,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -556,6 +584,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -212,7 +212,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible( -@@ -1232,6 +1263,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1228,6 +1259,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -460,7 +460,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse 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 -@@ -4505,6 +4505,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4562,6 +4562,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs @@ -545,15 +545,15 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar } else { // No permanent node should have been provided. CHECK(!other_folder_node); -@@ -148,6 +152,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, +@@ -144,6 +148,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, BookmarkNode* bb_node, BookmarkNode* other_folder_node, BookmarkNode* mobile_folder_node, + BookmarkNode* tabs_folder_node, int64_t* max_id, std::string* sync_metadata_str) { - const int64_t max_already_assigned_id = -@@ -162,7 +167,8 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, + if (sync_metadata_str) { +@@ -156,13 +161,15 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, base::Uuid::ParseLowercase(kBookmarkBarNodeUuid), base::Uuid::ParseLowercase(kOtherBookmarksNodeUuid), base::Uuid::ParseLowercase(kMobileBookmarksNodeUuid), @@ -562,25 +562,15 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar + base::Uuid::ParseLowercase(kTabsCollectionBookmarksNodeUuid)}; ids_reassigned_ = false; uuids_reassigned_ = false; - ids_valid_ = true; -@@ -171,6 +177,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, - stored_sha256_checksum_.clear(); - InitializeChecksum(); + nodes_requiring_id_reassignment_.clear(); + reassigned_ids_per_old_id_.clear(); + bool success = DecodeHelper(bb_node, other_folder_node, mobile_folder_node, + tabs_folder_node, value, sync_metadata_str); - FinalizeChecksum(); + ReassignIDsIfRequired(); -@@ -180,7 +187,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, - if (!ids_valid_ || (computed_checksum_ != stored_checksum_) || - (use_sha256 && computed_sha256_checksum_ != stored_sha256_checksum_)) { - maximum_id_ = max_already_assigned_id; -- ReassignIDs(bb_node, other_folder_node, mobile_folder_node); -+ ReassignIDs(bb_node, other_folder_node, mobile_folder_node, tabs_folder_node); - } - *max_id = maximum_id_ + 1; - return success; -@@ -239,6 +246,7 @@ base::Value::Dict BookmarkCodec::EncodeMetaInfo( +@@ -220,6 +227,7 @@ base::Value::Dict BookmarkCodec::EncodeMetaInfo( bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, BookmarkNode* other_folder_node, BookmarkNode* mobile_folder_node, @@ -588,7 +578,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar const base::Value::Dict& value, std::string* sync_metadata_str) { std::optional version = value.FindInt(kVersionKey); -@@ -284,6 +292,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, +@@ -243,6 +251,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, roots->FindDict(kOtherBookmarkFolderNameKey); const base::Value::Dict* mobile_folder_value = roots->FindDict(kMobileBookmarkFolderNameKey); @@ -597,7 +587,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar if (!bb_value || !other_folder_value || !mobile_folder_value) return false; -@@ -291,6 +301,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, +@@ -250,6 +260,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, DecodeNode(*bb_value, nullptr, bb_node); DecodeNode(*other_folder_value, nullptr, other_folder_node); DecodeNode(*mobile_folder_value, nullptr, mobile_folder_node); @@ -606,18 +596,10 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar // Need to reset the title as the title is persisted and restored from // the file. -@@ -499,12 +511,14 @@ void BookmarkCodec::DecodeMetaInfoHelper( +@@ -461,6 +473,7 @@ void BookmarkCodec::ReassignIDsIfRequired() { + } - void BookmarkCodec::ReassignIDs(BookmarkNode* bb_node, - BookmarkNode* other_node, -- BookmarkNode* mobile_node) { -+ BookmarkNode* mobile_node, -+ BookmarkNode* tabs_folder_node) { - ids_.clear(); - reassigned_ids_per_old_id_.clear(); - ReassignIDsHelper(bb_node); - ReassignIDsHelper(other_node); - ReassignIDsHelper(mobile_node); + nodes_requiring_id_reassignment_.clear(); + ReassignIDsHelper(tabs_folder_node); ids_reassigned_ = true; } @@ -641,7 +623,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmark int64_t* max_node_id, std::string* sync_metadata_str); -@@ -100,6 +102,7 @@ class BookmarkCodec { +@@ -95,6 +97,7 @@ class BookmarkCodec { static const char kBookmarkBarFolderNameKey[]; static const char kOtherBookmarkFolderNameKey[]; static const char kMobileBookmarkFolderNameKey[]; @@ -649,7 +631,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmark static const char kVersionKey[]; static const char kChecksumKey[]; static const char kChecksumSHA256Key[]; -@@ -133,6 +136,7 @@ class BookmarkCodec { +@@ -128,6 +131,7 @@ class BookmarkCodec { bool DecodeHelper(BookmarkNode* bb_node, BookmarkNode* other_folder_node, BookmarkNode* mobile_folder_node, @@ -657,16 +639,6 @@ diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmark const base::Value::Dict& value, std::string* sync_metadata_str); -@@ -143,7 +147,8 @@ class BookmarkCodec { - // Reassigns bookmark IDs for all nodes. - void ReassignIDs(BookmarkNode* bb_node, - BookmarkNode* other_node, -- BookmarkNode* mobile_node); -+ BookmarkNode* mobile_node, -+ BookmarkNode* tabs_folder_node); - - // Helper to recursively reassign IDs. - void ReassignIDsHelper(BookmarkNode* node); diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/bookmarks/browser/bookmark_load_details.cc --- a/components/bookmarks/browser/bookmark_load_details.cc +++ b/components/bookmarks/browser/bookmark_load_details.cc @@ -749,7 +721,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/b diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc -@@ -909,7 +909,7 @@ bool BookmarkModel::HasUserCreatedBookmarksOrFolders() const { +@@ -908,7 +908,7 @@ bool BookmarkModel::HasUserCreatedBookmarksOrFolders() const { (account_bookmark_bar_node_ && !account_bookmark_bar_node_->children().empty()) || (account_other_node_ && !account_other_node_->children().empty()) || @@ -758,7 +730,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar } bool BookmarkModel::IsBookmarked(const GURL& url) const { -@@ -1241,6 +1241,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { +@@ -1240,6 +1240,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -907,7 +879,7 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks &sync_metadata_str)) { ids_assigned_to_account_nodes = codec.release_assigned_ids(); -@@ -118,7 +122,8 @@ std::unique_ptr LoadBookmarks( +@@ -123,7 +127,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, std::move(ids_assigned_to_account_nodes), details->bb_node(), details->other_folder_node(), diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index 698efed8..0077d13e 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -22,7 +22,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../preferences/ChromePreferenceKeys.java | 1 + .../preferences/ChromeSharedPreferences.java | 12 ++++++++++++ .../LegacyChromePreferenceKeys.java | 1 + - .../AppHeaderCoordinator.java | 2 ++ + .../ui/desktop_windowing/AppHeaderUtils.java | 2 ++ .../omnibox/LocationBarCoordinator.java | 2 +- .../strings/android_chrome_strings.grd | 7 +++++++ .../java/res/layout/control_container.xml | 8 ++++---- @@ -80,8 +80,8 @@ diff --git a/chrome/android/java/res/values-sw600dp/dimens.xml b/chrome/android/ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml -@@ -119,9 +119,13 @@ found in the LICENSE file. - 16dp +@@ -116,9 +116,13 @@ found in the LICENSE file. + 50dp - @dimen/default_action_bar_height @@ -98,7 +98,7 @@ 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 -@@ -64,6 +64,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; +@@ -63,6 +63,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; @@ -106,7 +106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo import org.chromium.chrome.browser.ui.edge_to_edge.SimpleEdgeToEdgeController; import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.util.AutomotiveUtils; -@@ -146,6 +147,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -145,6 +146,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -171,7 +171,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 -@@ -818,7 +818,10 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -830,7 +830,10 @@ 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) { @@ -186,7 +186,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 -@@ -136,6 +136,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; +@@ -137,6 +137,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; @@ -194,7 +194,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; -@@ -5308,8 +5309,13 @@ public class StripLayoutHelper +@@ -5317,8 +5318,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(); @@ -213,7 +213,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -101,6 +101,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa +@@ -105,6 +105,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; import org.chromium.content_public.browser.LoadUrlParams; @@ -221,9 +221,9 @@ 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; -@@ -491,7 +492,10 @@ public class StripLayoutHelperManager - mIsLayoutOptimizationsEnabled = - ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled( +@@ -498,7 +499,10 @@ public class StripLayoutHelperManager + mIsHeaderCustomizationSupported = + ToolbarFeatures.isAppHeaderCustomizationSupported( /* isTablet= */ true, DisplayUtil.isContextInDefaultDisplay(mContext)); - mScrollableStripHeight = res.getDimension(R.dimen.tab_strip_height) / mDensity; + mScrollableStripHeight = @@ -231,7 +231,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over + ? res.getDimension(R.dimen.tab_strip_height_tabletui) + : res.getDimension(R.dimen.tab_strip_height_cromite)) / mDensity; mHeight = - mIsLayoutOptimizationsEnabled + mIsHeaderCustomizationSupported ? toolbarManager.getTabStripHeightSupplier().get() / mDensity 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 @@ -273,7 +273,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 -@@ -766,7 +766,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -807,7 +807,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @Override public int getControlContainerHeightResource() { @@ -296,9 +296,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl; -@@ -1877,7 +1879,9 @@ public class RootUiCoordinator - if (!mSupportsFindInPageSupplier.getAsBoolean()) return; +@@ -1947,7 +1949,9 @@ public class RootUiCoordinator + protected int getFindToolbarStub() { int stubId = R.id.find_toolbar_stub; - if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) { + if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity) && @@ -306,7 +306,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) { stubId = R.id.find_toolbar_tablet_stub; } - mFindToolbarManager = + return stubId; diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn --- a/chrome/browser/preferences/BUILD.gn +++ b/chrome/browser/preferences/BUILD.gn @@ -321,7 +321,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 -@@ -348,6 +348,7 @@ public final class ChromePreferenceKeys { +@@ -358,6 +358,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"; @@ -369,29 +369,29 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro ChromePreferenceKeys.FIRST_RUN_SKIP_WELCOME_PAGE, ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, ChromePreferenceKeys.HOMEPAGE_ENABLED, -diff --git 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 ---- 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 -@@ -43,6 +43,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa - import org.chromium.ui.display.DisplayUtil; - import org.chromium.ui.edge_to_edge.EdgeToEdgeStateProvider; - import org.chromium.ui.insets.CaptionBarInsetsRectProvider; +diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java +--- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java ++++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java +@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher.Activit + import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; + import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; + import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; +import org.chromium.ui.base.DeviceFormFactor; - import org.chromium.ui.insets.InsetObserver; - import org.chromium.ui.insets.InsetObserver.WindowInsetsConsumer; + import org.chromium.ui.display.DisplayUtil; import org.chromium.ui.insets.InsetsRectProvider; -@@ -304,6 +305,7 @@ public class AppHeaderCoordinator - InsetsRectProvider insetsRectProvider, - @DesktopWindowHeuristicResult int currentResult, - boolean isOnExternalDisplay) { + +@@ -245,6 +246,7 @@ public class AppHeaderUtils { + */ + static @DesktopWindowHeuristicResult int checkIsInDesktopWindow( + InsetsRectProvider insetsRectProvider, Context context) { + if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW; @DesktopWindowHeuristicResult int newResult; - Insets captionBarInset = insetsRectProvider.getCachedInset(); + boolean isOnExternalDisplay = !DisplayUtil.isContextInDefaultDisplay(context); 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 -@@ -903,7 +903,7 @@ public class LocationBarCoordinator +@@ -1008,7 +1008,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -403,7 +403,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 -@@ -1498,6 +1498,13 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1507,6 +1507,13 @@ Your Google account may have other forms of browsing history like searches and a Privacy guide explanation closed @@ -438,9 +438,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/control_container android:layout_marginBottom="@dimen/toolbar_hairline_height" android:layout_height="@dimen/toolbar_height_no_shadow" /> -@@ -29,13 +29,13 @@ found in the LICENSE file. - android:layout_width="match_parent" +@@ -30,13 +30,13 @@ found in the LICENSE file. android:layout_height="wrap_content" + android:layout_gravity="bottom" app:layout_anchorGravity="bottom" - /> + android:layout_marginTop="@dimen/control_container_height_cromite" /> @@ -506,7 +506,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; -@@ -165,6 +166,24 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -172,6 +173,24 @@ public class ToolbarControlContainer extends OptimizedFrameLayout @Initializer public void initWithToolbar(int toolbarLayoutId, int toolbarLayoutHeightResId) { try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) { @@ -534,7 +534,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 -@@ -64,6 +64,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; +@@ -65,6 +65,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; @@ -542,7 +542,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; -@@ -582,7 +583,9 @@ public abstract class ToolbarLayout extends FrameLayout +@@ -588,7 +589,9 @@ public abstract class ToolbarLayout extends FrameLayout * not have a tab strip. */ protected int getTabStripHeightFromResource() { @@ -556,15 +556,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/tab_strip/HeightTransitionHandler.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java -@@ -32,6 +32,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; - import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripHeightObserver; +@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionDelegate; + import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionHandler; import org.chromium.ui.base.ViewUtils; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.resources.dynamics.DynamicResourceReadyOnceCallback; import org.chromium.ui.util.TokenHolder; -@@ -561,6 +562,7 @@ class HeightTransitionHandler { +@@ -492,6 +493,7 @@ class HeightTransitionHandler { /** Get the min screen width (in dp) required for the tab strip to become visible. */ private static int getScreenWidthThresholdDp() { @@ -575,15 +575,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/tab_strip/TabStripTransitionCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java -@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; +@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager.AppHeaderObserver; +import org.chromium.ui.base.DeviceFormFactor; - /** Class used to manage tab strip visibility and height updates. */ - @NullMarked -@@ -148,7 +149,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea + /** + * Class used to manage tab strip visibility and height updates. +@@ -170,7 +171,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea mTabStripReservedTopPadding = controlContainerView() .getResources() @@ -613,17 +613,17 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -29,6 +29,7 @@ import org.chromium.content_public.browser.ContentFeatureList; - import org.chromium.content_public.browser.ContentFeatureMap; +@@ -31,6 +31,7 @@ import org.chromium.content_public.browser.ContentFeatureMap; + import org.chromium.ui.base.UiAndroidFeatureList; import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; +import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate.BooleanPreferenceDelegate; /** Fragment to keep track of all the accessibility related preferences. */ @NullMarked -@@ -45,6 +46,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - public static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions"; - public static final String PREF_CARET_BROWSING = "caret_browsing"; +@@ -51,6 +52,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + public static final String PREF_TOUCHPAD_OVERSCROLL_HISTORY_NAVIGATION = + "touchpad_overscroll_history_navigation"; + private BooleanPreferenceDelegate mForceTabletUIDelegate; + static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; @@ -631,7 +631,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -119,6 +123,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -126,6 +130,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getReaderAccessibilityDelegate().getValue()); readerForAccessibilityPref.setOnPreferenceChangeListener(this); @@ -644,7 +644,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -191,6 +201,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -212,6 +222,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment public boolean onPreferenceChange(Preference preference, Object newValue) { if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { mDelegate.getForceEnableZoomAccessibilityDelegate().setValue((Boolean) newValue); @@ -669,7 +669,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java -@@ -79,6 +79,14 @@ public class DeviceFormFactor { +@@ -87,6 +87,14 @@ public class DeviceFormFactor { /** See {@link #setIsTabletForTesting(boolean)}. */ private static @Nullable Boolean sIsTabletForTesting; @@ -684,7 +684,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** * Each activity could be on a different display, and this will just tell you whether the * display associated with the application context is "tablet sized". Use {@link -@@ -87,6 +95,7 @@ public class DeviceFormFactor { +@@ -95,6 +103,7 @@ public class DeviceFormFactor { @CalledByNative @Deprecated public static boolean isTablet() { @@ -692,7 +692,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui if (sIsTabletForTesting != null) { return sIsTabletForTesting; } -@@ -117,6 +126,7 @@ public class DeviceFormFactor { +@@ -125,6 +134,7 @@ public class DeviceFormFactor { * E.g. http://developer.samsung.com/samsung-dex/testing */ public static boolean isNonMultiDisplayContextOnTablet(Context context) { @@ -700,7 +700,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; } -@@ -151,6 +161,7 @@ public class DeviceFormFactor { +@@ -159,6 +169,7 @@ public class DeviceFormFactor { * @return The screen width bucket the device is in (see constants at the top of this class). */ private static int detectScreenWidthBucket(Context context) { @@ -708,7 +708,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -158,6 +169,7 @@ public class DeviceFormFactor { +@@ -166,6 +177,7 @@ public class DeviceFormFactor { ThreadUtils.assertOnUiThread(); Context context = windowAndroid.getContext().get(); if (context == null) return 0; @@ -716,7 +716,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -167,6 +179,7 @@ public class DeviceFormFactor { +@@ -175,6 +187,7 @@ public class DeviceFormFactor { */ @UiThread public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) { @@ -724,7 +724,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context)); } -@@ -175,6 +188,7 @@ public class DeviceFormFactor { +@@ -183,6 +196,7 @@ public class DeviceFormFactor { * layout. */ public static int getMinimumTabletWidthPx(DisplayAndroid display) { diff --git a/build/patches/Add-setting-to-enable-Credman-for-passkeys.patch b/build/patches/Add-setting-to-enable-Credman-for-passkeys.patch index 011f5019..b94191c7 100644 --- a/build/patches/Add-setting-to-enable-Credman-for-passkeys.patch +++ b/build/patches/Add-setting-to-enable-Credman-for-passkeys.patch @@ -14,13 +14,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ...etting-to-enable-Credman-for-passkeys.grdp | 12 ++++++++ .../webauthn/AuthenticatorImpl.java | 29 +++++++------------ .../components/webauthn/WebauthnFeatures.java | 2 ++ - .../cred_man/CredManSupportProvider.java | 27 +++++------------ + .../cred_man/CredManSupportProvider.java | 25 ++++------------ .../webauthn/android/webauthn_feature_map.cc | 1 + components/webauthn/features.cc | 4 +++ components/webauthn/features.h | 3 ++ device/fido/features.cc | 2 ++ .../authentication_credentials_container.cc | 5 ++++ - 10 files changed, 75 insertions(+), 37 deletions(-) + 10 files changed, 73 insertions(+), 37 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-enable-Credman-for-passkeys.grdp 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 @@ -174,36 +174,36 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - .WEBAUTHN_IMMEDIATE_GET) - && isUvpaa)); + false)); - boolean signal_supported = + boolean signalSupported = isUvpaa && DeviceFeatureMap.isEnabled( diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnFeatures.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnFeatures.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnFeatures.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnFeatures.java -@@ -16,4 +16,6 @@ import org.chromium.build.annotations.NullMarked; - public abstract class WebauthnFeatures { +@@ -17,4 +17,6 @@ public abstract class WebauthnFeatures { public static final String WEBAUTHN_ANDROID_PASSKEY_CACHE_MIGRATION = "WebAuthenticationAndroidPasskeyCacheMigration"; + public static final String WEBAUTHN_ANDROID_CRED_MAN_FOR_DEV = "WebAuthnAndroidCredManForDev"; + public static final String WEBAUTHN_ANDROID_PASSKEY = + "WebAuthenticationAndroidPasskey"; } diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/cred_man/CredManSupportProvider.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/cred_man/CredManSupportProvider.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/cred_man/CredManSupportProvider.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/cred_man/CredManSupportProvider.java -@@ -19,9 +19,11 @@ import org.chromium.base.version_info.VersionInfo; +@@ -19,11 +19,11 @@ import org.chromium.base.version_info.VersionInfo; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.components.webauthn.CredManSupport; -import org.chromium.components.webauthn.GmsCoreUtils; + import org.chromium.components.webauthn.WebauthnFeatureMap; + import org.chromium.components.webauthn.WebauthnFeatures; import org.chromium.components.webauthn.WebauthnMode; import org.chromium.components.webauthn.WebauthnModeProvider; -+import org.chromium.components.webauthn.WebauthnFeatureMap; -+import org.chromium.components.webauthn.WebauthnFeatures; +import org.chromium.components.webauthn.WebauthnLogger; @NullMarked public class CredManSupportProvider { -@@ -57,12 +59,12 @@ public class CredManSupportProvider { +@@ -79,12 +79,12 @@ public class CredManSupportProvider { } if (getAndroidVersion() < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { sCredManSupport = CredManSupport.DISABLED; @@ -219,15 +219,15 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut return sCredManSupport; } if (notSkippedBecauseInTests() -@@ -70,14 +72,14 @@ public class CredManSupportProvider { +@@ -92,14 +92,14 @@ public class CredManSupportProvider { == null) { sCredManSupport = CredManSupport.DISABLED; - recordCredManAvailability(/*available*/ false); + recordCredManAvailability(/* available= */ false); - log(TAG, "Disabled because CredentialManager is not available."); + WebauthnLogger.logError(TAG, "Disabled because CredentialManager is not available."); return sCredManSupport; } - recordCredManAvailability(/*available*/ true); + recordCredManAvailability(/* available= */ true); final CredManUiRecommender recommender = ServiceLoaderUtil.maybeCreate(CredManUiRecommender.class); @@ -236,7 +236,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut boolean gpmInCredMan = sOverrideForcesGpm != null ? sOverrideForcesGpm : customUiRecommended; boolean isChrome3pPwmMode = -@@ -116,13 +118,6 @@ public class CredManSupportProvider { +@@ -138,13 +138,6 @@ public class CredManSupportProvider { "WebAuthentication.Android.CredManAvailability", available); } @@ -250,7 +250,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut private static int getAndroidVersion() { return sOverrideAndroidVersion == null ? Build.VERSION.SDK_INT : sOverrideAndroidVersion; } -@@ -130,10 +125,4 @@ public class CredManSupportProvider { +@@ -152,10 +145,4 @@ public class CredManSupportProvider { private static boolean notSkippedBecauseInTests() { return sOverrideForcesGpm == null && sOverrideAndroidVersion == null; } @@ -264,10 +264,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut diff --git a/components/webauthn/android/webauthn_feature_map.cc b/components/webauthn/android/webauthn_feature_map.cc --- a/components/webauthn/android/webauthn_feature_map.cc +++ b/components/webauthn/android/webauthn_feature_map.cc -@@ -16,6 +16,7 @@ namespace { - // Array of features exposed through the Java WebauthnFeatureMap API. +@@ -17,6 +17,7 @@ namespace { const base::Feature* const kFeaturesExposedToJava[] = { &kWebAuthnAndroidPasskeyCacheMigration, + &kWebAuthnAndroidCredManForDev, + &kWebAuthnAndroidPasskey, }; @@ -275,9 +275,9 @@ diff --git a/components/webauthn/android/webauthn_feature_map.cc b/components/we diff --git a/components/webauthn/features.cc b/components/webauthn/features.cc --- a/components/webauthn/features.cc +++ b/components/webauthn/features.cc -@@ -16,6 +16,10 @@ BASE_FEATURE(kWebAuthnAndroidPasskeyCacheMigration, - "WebAuthenticationAndroidPasskeyCacheMigration", - base::FEATURE_DISABLED_BY_DEFAULT); +@@ -25,6 +25,10 @@ BASE_FEATURE(kWebAuthnAndroidCredManForDev, base::FEATURE_DISABLED_BY_DEFAULT); + const base::FeatureParam kWebAuthnAndroidCredManForDevMode{ + &kWebAuthnAndroidCredManForDev, "mode", ""}; +CROMITE_FEATURE(kWebAuthnAndroidPasskey, + "WebAuthenticationAndroidPasskey", @@ -289,9 +289,9 @@ diff --git a/components/webauthn/features.cc b/components/webauthn/features.cc diff --git a/components/webauthn/features.h b/components/webauthn/features.h --- a/components/webauthn/features.h +++ b/components/webauthn/features.h -@@ -20,6 +20,9 @@ namespace webauthn::features { +@@ -27,6 +27,9 @@ BASE_DECLARE_FEATURE(kWebAuthnAndroidCredManForDev); COMPONENT_EXPORT(WEBAUTHN) - BASE_DECLARE_FEATURE(kWebAuthnAndroidPasskeyCacheMigration); + extern const base::FeatureParam kWebAuthnAndroidCredManForDevMode; +COMPONENT_EXPORT(WEBAUTHN) +BASE_DECLARE_FEATURE(kWebAuthnAndroidPasskey); @@ -302,7 +302,7 @@ diff --git a/components/webauthn/features.h b/components/webauthn/features.h diff --git a/device/fido/features.cc b/device/fido/features.cc --- a/device/fido/features.cc +++ b/device/fido/features.cc -@@ -171,6 +171,7 @@ BASE_FEATURE(kWebAuthnImmediateGet, +@@ -188,6 +188,7 @@ BASE_FEATURE(kWebAuthnImmediateGet, #else base::FEATURE_ENABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_ANDROID) @@ -310,7 +310,7 @@ diff --git a/device/fido/features.cc b/device/fido/features.cc BASE_FEATURE_PARAM(int, kWebAuthnImmediateMediationTimeoutMilliseconds, -@@ -183,6 +184,7 @@ BASE_FEATURE_PARAM(int, +@@ -200,6 +201,7 @@ BASE_FEATURE_PARAM(int, BASE_FEATURE(kWebAuthnImmediateGetAutoselect, "WebAuthenticationImmediateGetAutoselect", base::FEATURE_ENABLED_BY_DEFAULT); @@ -321,7 +321,7 @@ diff --git a/device/fido/features.cc b/device/fido/features.cc diff --git a/third_party/blink/renderer/modules/credentialmanagement/authentication_credentials_container.cc b/third_party/blink/renderer/modules/credentialmanagement/authentication_credentials_container.cc --- a/third_party/blink/renderer/modules/credentialmanagement/authentication_credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanagement/authentication_credentials_container.cc -@@ -1076,6 +1076,11 @@ DOMException* AuthenticatorStatusToDOMException( +@@ -1090,6 +1090,11 @@ DOMException* AuthenticatorStatusToDOMException( const WebAuthnDOMExceptionDetailsPtr& dom_exception_details) { DCHECK_EQ(status != AuthenticatorStatus::ERROR_WITH_DOM_EXCEPTION_DETAILS, dom_exception_details.is_null()); diff --git a/build/patches/Ask-for-restart-on-connection-change.patch b/build/patches/Ask-for-restart-on-connection-change.patch index 8450bb8d..961f250c 100644 --- a/build/patches/Ask-for-restart-on-connection-change.patch +++ b/build/patches/Ask-for-restart-on-connection-change.patch @@ -284,7 +284,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/in 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 -@@ -1441,7 +1441,10 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1525,7 +1525,10 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { mActivity, mStatusIndicatorCoordinator, isUrlBarFocusedSupplier, @@ -299,7 +299,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java -@@ -201,6 +201,13 @@ public abstract class TabModelSelectorBase +@@ -200,6 +200,13 @@ public abstract class TabModelSelectorBase return null; } @@ -407,7 +407,7 @@ diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java b/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java --- a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java +++ b/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java -@@ -135,6 +135,8 @@ public interface TabWindowManager { +@@ -138,6 +138,8 @@ public interface TabWindowManager { /** Returns the total number of incognito tabs across all tab model selectors. */ int getIncognitoTabCount(); @@ -419,7 +419,7 @@ diff --git a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java b/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java --- a/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java +++ b/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java -@@ -566,6 +566,16 @@ public class TabWindowManagerImpl implements TabWindowManager { +@@ -568,6 +568,16 @@ public class TabWindowManagerImpl implements TabWindowManager { return tabGroupModelFilter.getTabsInGroup(tabGroupId); } @@ -497,7 +497,7 @@ diff --git a/chrome/browser/ui/messages/android/java/res/layout/snackbar.xml b/c diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java --- a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java +++ b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java -@@ -137,6 +137,8 @@ public class Snackbar { +@@ -140,6 +140,8 @@ public class Snackbar { private @Nullable String mTemplateText; private @Nullable String mActionText; private @Nullable Object mActionData; @@ -506,7 +506,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro private int mBackgroundColor; private int mTextApperanceResId; private boolean mDefaultLines = true; -@@ -243,6 +245,20 @@ public class Snackbar { +@@ -246,6 +248,20 @@ public class Snackbar { return this; } @@ -530,7 +530,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java --- a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java +++ b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java -@@ -340,6 +340,12 @@ public class SnackbarManager +@@ -348,6 +348,12 @@ public class SnackbarManager new SnackbarView( mActivity, this, @@ -546,7 +546,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java --- a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java +++ b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java -@@ -56,6 +56,7 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -55,6 +55,7 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { protected final ViewGroup mSnackbarView; protected final TemplatePreservingTextView mMessageView; private final TextView mActionButtonView; @@ -554,38 +554,38 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro private final ImageView mProfileImageView; private final int mAnimationDuration; private final boolean mIsTablet; -@@ -102,11 +103,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -100,11 +101,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { public SnackbarView( Activity activity, - OnClickListener listener, + SnackbarManager manager, + OnClickListener dismissListener, Snackbar snackbar, ViewGroup parentView, @Nullable WindowAndroid windowAndroid, boolean isTablet) { -- this(activity, listener, snackbar, parentView, windowAndroid, null, isTablet); -+ this(activity, listener, dismissListener, snackbar, parentView, windowAndroid, null, isTablet); +- this(activity, manager, snackbar, parentView, windowAndroid, null, isTablet); ++ this(activity, manager, dismissListener, snackbar, parentView, windowAndroid, null, isTablet); } /** -@@ -125,6 +127,7 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -122,6 +124,7 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { public SnackbarView( Activity activity, - OnClickListener listener, + SnackbarManager manager, + OnClickListener dismissListener, Snackbar snackbar, ViewGroup parentView, @Nullable WindowAndroid windowAndroid, -@@ -155,6 +158,8 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -158,6 +161,8 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { (TemplatePreservingTextView) mContainerView.findViewById(R.id.snackbar_message); mActionButtonView = (TextView) mContainerView.findViewById(R.id.snackbar_button); - mActionButtonView.setOnClickListener(listener); + mActionButtonView.setOnClickListener(manager); + mDismissButtonView = (TextView) mContainerView.findViewById(R.id.snackbar_dismiss); + mDismissButtonView.setOnClickListener(dismissListener); mProfileImageView = (ImageView) mContainerView.findViewById(R.id.snackbar_profile_image); mEdgeToEdgeSupplier = edgeToEdgeSupplier; - // TODO(crbug/com/451807932): Replace with a custom pad adjuster to account for inset -@@ -431,6 +436,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { + // TODO(crbug.com/451807932): Replace with a custom pad adjuster to account for inset +@@ -434,6 +439,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { mActionButtonView.setVisibility(View.VISIBLE); mActionButtonView.setContentDescription(snackbar.getActionText()); setViewText(mActionButtonView, snackbar.getActionText(), animate); @@ -638,7 +638,7 @@ diff --git a/content/browser/web_contents/web_contents_android.h b/content/brows diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -4151,8 +4151,10 @@ void WebContentsImpl::Stop() { +@@ -4096,8 +4096,10 @@ void WebContentsImpl::Stop() { void WebContentsImpl::SetPageFrozen(bool frozen) { TRACE_EVENT1("content", "WebContentsImpl::SetPageFrozen", "frozen", frozen); @@ -665,7 +665,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/webcon @Override public void setDisplayCutoutSafeArea(Rect insets) { if (mNativeWebContentsAndroid == 0) return; -@@ -1480,6 +1486,8 @@ public class WebContentsImpl +@@ -1486,6 +1492,8 @@ public class WebContentsImpl void setFocus(long nativeWebContentsAndroid, boolean focused); @@ -734,7 +734,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -4655,6 +4655,7 @@ void Document::DispatchUnloadEvents(UnloadEventTimingInfo* unload_timing_info) { +@@ -4665,6 +4665,7 @@ void Document::DispatchUnloadEvents(UnloadEventTimingInfo* unload_timing_info) { } void Document::DispatchFreezeEvent() { @@ -745,7 +745,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -3306,6 +3306,7 @@ void LocalFrame::DidFreeze() { +@@ -3321,6 +3321,7 @@ void LocalFrame::DidFreeze() { LoaderFreezeMode freeze_mode = GetLoaderFreezeMode(); GetDocument()->Fetcher()->SetDefersLoading(freeze_mode); Loader().SetDefersLoading(freeze_mode); @@ -753,7 +753,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ } void LocalFrame::DidResume() { -@@ -3320,6 +3321,7 @@ void LocalFrame::DidResume() { +@@ -3335,6 +3336,7 @@ void LocalFrame::DidResume() { GetDocument()->Fetcher()->SetDefersLoading(LoaderFreezeMode::kNone); Loader().SetDefersLoading(LoaderFreezeMode::kNone); diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index efe25dbc..31e3d6b3 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -47,7 +47,7 @@ Require: bromite-build-utils.patch ...tomTriStateSiteSettingsPreferenceImpl.java | 24 + .../ContentSettingsResources.java | 32 +- .../site_settings/SingleCategorySettings.java | 57 ++- - .../site_settings/SingleWebsiteSettings.java | 50 ++- + .../site_settings/SingleWebsiteSettings.java | 48 +- .../site_settings/SiteSettings.java | 33 +- .../site_settings/SiteSettingsCategory.java | 18 +- .../site_settings/SiteSettingsDelegate.java | 2 + @@ -85,7 +85,7 @@ Require: bromite-build-utils.patch .../platform/web_content_settings_client.h | 13 + .../execution_context/execution_context.cc | 16 + .../execution_context/execution_context.h | 5 + - 74 files changed, 1964 insertions(+), 106 deletions(-) + 74 files changed, 1962 insertions(+), 106 deletions(-) create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java @@ -99,7 +99,7 @@ Require: bromite-build-utils.patch diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java -@@ -70,6 +70,10 @@ import org.chromium.url.GURL; +@@ -71,6 +71,10 @@ import org.chromium.url.GURL; import java.util.List; import java.util.Set; @@ -110,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C /** A SiteSettingsDelegate instance that contains Chrome-specific Site Settings logic. */ @NullMarked public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { -@@ -239,7 +243,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -240,7 +244,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { @Override public boolean isHelpAndFeedbackEnabled() { @@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C } @Override -@@ -377,6 +381,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -378,6 +382,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { return mPrivacySandboxBridge.getRelatedWebsiteSetOwner(memberOrigin); } @@ -152,7 +152,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 -@@ -358,6 +358,7 @@ build_webui("build") { +@@ -360,6 +360,7 @@ build_webui("build") { "privacy_sandbox/privacy_sandbox_browser_proxy.ts", "relaunch_mixin.ts", "reset_page/reset_browser_proxy.ts", @@ -160,7 +160,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", -@@ -371,7 +372,6 @@ build_webui("build") { +@@ -373,7 +374,6 @@ build_webui("build") { "site_settings/constants.ts", "site_settings/site_settings_mixin.ts", "site_settings/site_settings_browser_proxy.ts", @@ -171,7 +171,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page_index.html b/chrome/browser/resources/settings/privacy_page/privacy_page_index.html --- a/chrome/browser/resources/settings/privacy_page/privacy_page_index.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page_index.html -@@ -623,4 +623,5 @@ +@@ -609,4 +609,5 @@ @@ -288,7 +288,7 @@ 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, -@@ -155,6 +156,7 @@ function addPrivacyChildRoutes(r: Partial) { +@@ -150,6 +151,7 @@ function addPrivacyChildRoutes(r: Partial) { r.SITE_SETTINGS_LOCAL_NETWORK_ACCESS = r.SITE_SETTINGS.createChild('localNetworkAccess'); } @@ -395,7 +395,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,5 +334,6 @@ +@@ -332,5 +332,6 @@ label="$i18n{siteSettingsLocalNetworkAccess}"> @@ -405,7 +405,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b diff --git a/chrome/browser/resources/settings/site_settings/site_details.ts b/chrome/browser/resources/settings/site_settings/site_details.ts --- a/chrome/browser/resources/settings/site_settings/site_details.ts +++ b/chrome/browser/resources/settings/site_settings/site_details.ts -@@ -71,8 +71,39 @@ export class SiteDetailsElement extends SiteDetailsElementBase { +@@ -73,8 +73,39 @@ export class SiteDetailsElement extends SiteDetailsElementBase { return 'site-details'; } @@ -609,7 +609,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_settings_mixin diff --git a/chrome/browser/resources/settings/site_settings/site_settings_page.ts b/chrome/browser/resources/settings/site_settings/site_settings_page.ts --- a/chrome/browser/resources/settings/site_settings/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings/site_settings_page.ts -@@ -51,7 +51,7 @@ function getCategoryItemMap(): Map { +@@ -52,7 +52,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. @@ -739,7 +739,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_settings_util. 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 -@@ -1606,6 +1606,7 @@ static_library("ui") { +@@ -1620,6 +1620,7 @@ static_library("ui") { "//components/commerce/core/webui", "//components/contextual_search:public", "//components/endpoint_fetcher", @@ -747,7 +747,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn "//components/enterprise/common:files_scan_data", "//components/feedback/proto", "//components/headless/console_message_logger", -@@ -4761,6 +4762,7 @@ static_library("ui") { +@@ -4790,6 +4791,7 @@ static_library("ui") { "//components/power_bookmarks/core", "//components/power_bookmarks/storage", "//components/prefs", @@ -787,7 +787,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc --- a/chrome/browser/ui/views/page_info/page_info_main_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc -@@ -58,6 +58,7 @@ +@@ -55,6 +55,7 @@ #include "ui/views/layout/box_layout.h" #include "ui/views/layout/flex_layout.h" #include "ui/views/vector_icons.h" @@ -795,7 +795,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) -@@ -284,8 +285,20 @@ void PageInfoMainView::SetPermissionInfo( +@@ -259,8 +260,20 @@ void PageInfoMainView::SetPermissionInfo( scroll_view->SetDrawOverflowIndicator(false); auto* content_view = scroll_view->SetContents(std::make_unique()); @@ -818,7 +818,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); -@@ -300,11 +313,16 @@ void PageInfoMainView::SetPermissionInfo( +@@ -275,11 +288,16 @@ void PageInfoMainView::SetPermissionInfo( } } @@ -835,7 +835,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); -@@ -312,6 +330,8 @@ void PageInfoMainView::SetPermissionInfo( +@@ -287,6 +305,8 @@ void PageInfoMainView::SetPermissionInfo( } for (auto& object : chosen_object_info_list) { @@ -844,7 +844,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), -@@ -322,6 +342,10 @@ void PageInfoMainView::SetPermissionInfo( +@@ -297,6 +317,10 @@ void PageInfoMainView::SetPermissionInfo( content_view->AddChildView(std::move(object_view))); } @@ -867,7 +867,7 @@ 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" -@@ -291,7 +293,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -280,7 +282,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( bool blocked_on_system_level) { PermissionSetting setting = permission.setting.value_or(permission.default_setting); @@ -882,7 +882,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom auto* info = content_settings::PermissionSettingsRegistry::GetInstance()->Get( permission.type); // For guard content settings and Automatic Picture-in-Picture, ASK is treated -@@ -595,6 +604,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -584,6 +593,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( icon = &vector_icons::kPrinterIcon; break; default: @@ -903,7 +903,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.h b/chrome/browser/ui/views/page_info/page_info_view_factory.h --- a/chrome/browser/ui/views/page_info/page_info_view_factory.h +++ b/chrome/browser/ui/views/page_info/page_info_view_factory.h -@@ -97,6 +97,11 @@ class PageInfoViewFactory { +@@ -95,6 +95,11 @@ class PageInfoViewFactory { const PageInfo::PermissionInfo& info, bool blocked_on_system_level = false); @@ -1236,7 +1236,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" -@@ -4048,6 +4052,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -4111,6 +4115,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -1296,7 +1296,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc -@@ -46,6 +46,8 @@ +@@ -47,6 +47,8 @@ #include "chrome/grit/generated_resources.h" #include "components/content_settings/core/browser/content_settings_provider.h" #include "components/content_settings/core/browser/host_content_settings_map.h" @@ -1374,7 +1374,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b NOTREACHED() << static_cast(type) << " is not a recognized content settings type."; } -@@ -668,6 +689,13 @@ std::vector GetVisiblePermissionCategories( +@@ -664,6 +685,13 @@ std::vector GetVisiblePermissionCategories( base_types->push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -1391,8 +1391,8 @@ 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 -@@ -90,6 +90,7 @@ android_resources("java_resources") { - "java/res/layout/managed_disclaimer_preference_for_radio_groups.xml", +@@ -92,6 +92,7 @@ android_resources("java_resources") { + "java/res/layout/preference_chrome_button.xml", "java/res/layout/preference_chrome_image_view.xml", "java/res/layout/preference_spinner.xml", + "java/res/layout/preference_spinner_single_widget.xml", @@ -1579,7 +1579,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") { +@@ -208,6 +225,7 @@ robolectric_library("junit") { } android_resources("java_resources") { @@ -2306,7 +2306,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/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 -@@ -360,6 +360,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -361,6 +361,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else { @ContentSetting Integer contentSetting = website.site().getContentSetting(browserContextHandle, type); @@ -2317,7 +2317,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (contentSetting != null) { return ContentSetting.BLOCK == contentSetting; } -@@ -551,6 +555,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -552,6 +556,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? new HashSet<>(getArguments().getStringArrayList(EXTRA_SELECTED_DOMAINS)) : null; @@ -2325,7 +2325,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"); -@@ -586,7 +591,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -587,7 +592,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment if (queryHasChanged) getInfoForOrigins(); }); @@ -2335,7 +2335,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c MenuItem help = menu.add( Menu.NONE, -@@ -598,12 +604,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -599,12 +605,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getResources(), R.drawable.ic_help_and_feedback, getContext().getTheme())); @@ -2356,7 +2356,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) { getSiteSettingsDelegate() .launchProtectedContentHelpAndFeedbackActivity(getActivity()); -@@ -681,6 +695,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -682,6 +696,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment public boolean onPreferenceChange(Preference preference, Object newValue) { BrowserContextHandle browserContextHandle = getBrowserContextHandle(); PrefService prefService = UserPrefs.get(browserContextHandle); @@ -2368,7 +2368,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(); -@@ -855,7 +874,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -856,7 +875,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; } @@ -2377,7 +2377,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // OnPreferenceClickListener: -@@ -973,17 +992,15 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -974,17 +993,15 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment break; } @@ -2398,7 +2398,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c String exceptionDialogMessage = exceptionDialogMessageResourceId != 0 ? getString(exceptionDialogMessageResourceId) -@@ -994,7 +1011,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -995,7 +1012,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getStyledContext(), ADD_EXCEPTION_KEY, exceptionDialogMessage, @@ -2407,7 +2407,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c mCategory, this)); -@@ -1178,8 +1195,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1179,8 +1196,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment private boolean isBlocked() { switch (mGlobalToggleLayout) { case GlobalToggleLayout.TRI_STATE_TOGGLE: @@ -2424,7 +2424,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return (triStateToggle.getCheckedSetting() == ContentSetting.BLOCK); case GlobalToggleLayout.TRI_STATE_COOKIE_TOGGLE: TriStateCookieSettingsPreference triStateCookieToggle = -@@ -1332,7 +1357,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1333,7 +1358,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else if (res_id != -1) { infoText.setSummary(res_id); } else { @@ -2437,7 +2437,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // Hide the anti-abuse text preferences, as needed. -@@ -1371,6 +1400,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1372,6 +1401,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else { screen.removePreference(mLocationTriStatePref); } @@ -2445,7 +2445,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c maybeShowReasonToggleDisabled(screen); -@@ -1579,6 +1609,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1580,6 +1610,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment iconIds = ContentSettingsResources.getTriStateSettingIconIDs(contentType); } triStateToggle.initialize( @@ -2453,8 +2453,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c setting, descriptionIds, iconIds, -@@ -1867,6 +1898,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment - selectedButton.setChecked(true); +@@ -1891,6 +1922,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + setLocationAccessEnabled.accept(allowButton.isChecked()); } + AlertDialog.Builder alertDialogBuilder = @@ -2471,7 +2471,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 -@@ -57,6 +57,7 @@ import java.util.Collection; +@@ -58,6 +58,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -2479,7 +2479,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 -@@ -200,7 +201,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -204,7 +205,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment case ContentSettingsType.WINDOW_MANAGEMENT: return "window_management_permission_list"; default: @@ -2488,7 +2488,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -631,7 +632,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -650,7 +651,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setupContentSettingsPreferences() { Preference permissionsHeaderPref = findPreference(PREF_PERMISSIONS_HEADER); mMaxPermissionOrder = permissionsHeaderPref.getOrder(); @@ -2498,7 +2498,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c Preference preference = getPermissionPreference(type); preference.setKey(getPreferenceKey(type)); -@@ -663,6 +665,19 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -682,6 +684,19 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } private Preference getPermissionPreference(@ContentSettingsType.EnumType int type) { @@ -2518,25 +2518,23 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c boolean isOneTime = isOneTime(type); if (type == ContentSettingsType.GEOLOCATION_WITH_OPTIONS && !isOneTime) { return createTwoActionLocationSwitchPreference(); -@@ -1258,7 +1273,16 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - @ContentSetting @Nullable Integer value, - boolean isEmbargoed, - boolean isOneTime) { +@@ -1354,7 +1369,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + value = ContentSetting.BLOCK; + } + - if (value == null) return; -+ @ContentSettingsType.EnumType -+ int content_type = getContentSettingsTypeFromPreferenceKey(preference.getKey()); + BromiteCustomContentSetting cs = -+ BromiteCustomContentSettingImpl.getContentSetting(content_type); ++ BromiteCustomContentSettingImpl.getContentSetting(contentType); + if (value == null && cs == null) return; + if (value == null) { + if (cs.showIntoInfoPage() == false) return; + value = WebsitePreferenceBridge.getDefaultContentSetting( -+ getSiteSettingsDelegate().getBrowserContextHandle(), content_type); ++ getSiteSettingsDelegate().getBrowserContextHandle(), contentType); + } setUpPreferenceCommon(preference, value); preference.setOnPreferenceChangeListener(this); - @ContentSettingsType.EnumType -@@ -1310,10 +1334,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + +@@ -1404,10 +1426,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment oneTimePreference.setBackgroundColor(mHighlightColor); } } else { @@ -2555,7 +2553,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } -@@ -1619,7 +1647,13 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1713,7 +1739,13 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment if (newValue instanceof Boolean) { permission = (Boolean) newValue ? getEnabledValue(type) : ContentSetting.BLOCK; } else { @@ -2769,7 +2767,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 -@@ -361,7 +361,11 @@ public final class Website implements WebsiteEntry { +@@ -368,7 +368,11 @@ public final class Website implements WebsiteEntry { RecordUserAction.record("SoundContentSetting.UnmuteBy.SiteSettings"); } } @@ -2924,7 +2922,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. namespace content_settings { -@@ -858,6 +859,7 @@ void ContentSettingsRegistry::Init() { +@@ -848,6 +849,7 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::PLATFORM_CHROMEOS, ContentSettingsInfo::INHERIT_IN_INCOGNITO, PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); @@ -3271,7 +3269,7 @@ diff --git a/components/content_settings/core/common/content_settings_mojom_trai diff --git a/components/content_settings/core/common/content_settings_types.mojom b/components/content_settings/core/common/content_settings_types.mojom --- a/components/content_settings/core/common/content_settings_types.mojom +++ b/components/content_settings/core/common/content_settings_types.mojom -@@ -495,5 +495,7 @@ enum ContentSettingsType { +@@ -492,5 +492,7 @@ enum ContentSettingsType { // when suspicious warning is shown. If the user has selected this, the // notification permission will not be revoked based on suspicious verdict. SUSPICIOUS_NOTIFICATION_SHOW_ORIGINAL, @@ -3392,7 +3390,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 -@@ -203,6 +203,15 @@ public class PageInfoPermissionsController extends PageInfoPreferenceSubpageCont +@@ -241,6 +241,15 @@ public class PageInfoPermissionsController extends PageInfoPreferenceSubpageCont : perm1.nameMidSentence.toString()); } @@ -3419,7 +3417,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp #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/features.h" -@@ -205,6 +206,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -206,6 +207,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( permissions_to_display.push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -3434,8 +3432,8 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp + std::map user_specified_settings_to_display; - std::map -@@ -267,6 +277,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( + +@@ -284,6 +294,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( return permission.setting; } @@ -3461,10 +3459,10 @@ 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" -@@ -1405,6 +1406,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, - // via `HasContentSettingChangedViaPageInfo(type)`. - bool PageInfo::ShouldShowPermission( - const PageInfo::PermissionInfo& info) const { +@@ -1391,6 +1392,14 @@ bool PageInfo::ShouldShowPermission( + } + #endif // BUILDFLAG(IS_ANDROID) + + content_settings::WebsiteSettingsRegistry* website_settings = + content_settings::WebsiteSettingsRegistry::GetInstance(); + for (const content_settings::WebsiteSettingsInfo* winfo : *website_settings) { @@ -3476,7 +3474,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) { -@@ -1532,7 +1541,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1514,7 +1523,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -3603,7 +3601,7 @@ diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/t diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -70,6 +70,22 @@ +@@ -77,6 +77,22 @@ namespace blink { @@ -3629,18 +3627,18 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h -@@ -43,6 +43,7 @@ - #include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink-forward.h" +@@ -44,6 +44,7 @@ + #include "third_party/blink/public/mojom/origin_trials/origin_trial_feature.mojom-blink-forward.h" #include "third_party/blink/public/mojom/permissions_policy/policy_disposition.mojom-blink-forward.h" #include "third_party/blink/public/mojom/v8_cache_options.mojom-blink-forward.h" +#include "third_party/blink/public/platform/web_content_settings_client.h" #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/execution_context/security_context.h" -@@ -101,6 +102,10 @@ class SecurityOrigin; - class ScriptState; - class ScriptWrappable; - class TrustedTypePolicyFactory; +@@ -135,6 +136,10 @@ class TrustedTypePolicyFactory; + class WebCodecsLogger; + class WebPrintingManager; + class WebViewAndroid; +class WebContentSettingsClient; + +CORE_EXPORT WebContentSettingsClient* GetContentSettingsClientFor( diff --git a/build/patches/Disable-css-preferred-text-scale.patch b/build/patches/Disable-css-preferred-text-scale.patch index e460ad75..b8931070 100644 --- a/build/patches/Disable-css-preferred-text-scale.patch +++ b/build/patches/Disable-css-preferred-text-scale.patch @@ -6,9 +6,12 @@ Do not expose the user's preferred font scale to CSS. License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../blink/common/features_cc/Disable-CSSPreferredTextScale.inc | 1 + - .../blink/renderer/platform/runtime_enabled_features.json5 | 3 +-- - 2 files changed, 2 insertions(+), 2 deletions(-) + .../common/features_cc/Disable-CSSPreferredTextScale.inc | 1 + + .../core/css/document_style_environment_variables.cc | 6 ++++-- + .../blink/renderer/core/css/style_environment_variables.cc | 4 +++- + third_party/blink/renderer/core/page/page.cc | 4 +++- + .../blink/renderer/platform/runtime_enabled_features.json5 | 3 +++ + 5 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-CSSPreferredTextScale.inc diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-CSSPreferredTextScale.inc b/cromite_flags/third_party/blink/common/features_cc/Disable-CSSPreferredTextScale.inc @@ -17,17 +20,61 @@ new file mode 100644 +++ b/cromite_flags/third_party/blink/common/features_cc/Disable-CSSPreferredTextScale.inc @@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kCSSPreferredTextScale); +diff --git a/third_party/blink/renderer/core/css/document_style_environment_variables.cc b/third_party/blink/renderer/core/css/document_style_environment_variables.cc +--- a/third_party/blink/renderer/core/css/document_style_environment_variables.cc ++++ b/third_party/blink/renderer/core/css/document_style_environment_variables.cc +@@ -55,8 +55,10 @@ DocumentStyleEnvironmentVariables::DocumentStyleEnvironmentVariables( + StyleEnvironmentVariables& parent, + Document& document) + : StyleEnvironmentVariables(parent), document_(&document) { +- SetPreferredTextScale( +- document_->GetSettings()->GetAccessibilityFontScaleFactor()); ++ if (RuntimeEnabledFeatures::CSSPreferredTextScaleEnabled()) { ++ SetPreferredTextScale( ++ document_->GetSettings()->GetAccessibilityFontScaleFactor()); ++ } + } + + void DocumentStyleEnvironmentVariables::RecordVariableUsage( +diff --git a/third_party/blink/renderer/core/css/style_environment_variables.cc b/third_party/blink/renderer/core/css/style_environment_variables.cc +--- a/third_party/blink/renderer/core/css/style_environment_variables.cc ++++ b/third_party/blink/renderer/core/css/style_environment_variables.cc +@@ -49,7 +49,9 @@ void SetDefaultEnvironmentVariables(StyleEnvironmentVariables* instance) { + instance->SetVariable(UADefinedVariable::kKeyboardInsetHeight, + kKeyboardInsetDefault); + +- instance->SetVariable(UADefinedVariable::kPreferredTextScale, "1"); ++ if (RuntimeEnabledFeatures::CSSPreferredTextScaleEnabled()) { ++ instance->SetVariable(UADefinedVariable::kPreferredTextScale, "1"); ++ } + } + + } // namespace. +diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc +--- a/third_party/blink/renderer/core/page/page.cc ++++ b/third_party/blink/renderer/core/page/page.cc +@@ -1056,7 +1056,9 @@ void Page::SettingsChanged(ChangeType change_type) { + } + break; + case ChangeType::kFontScaleFactor: +- ++ if (!RuntimeEnabledFeatures::CSSPreferredTextScaleEnabled()) { ++ break; ++ } + for (Frame* frame = MainFrame(); frame; + frame = frame->Tree().TraverseNext()) { + LocalFrame* local_frame = DynamicTo(frame); 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 -@@ -1548,8 +1548,7 @@ +@@ -1582,6 +1582,9 @@ + name: "CSSPositionStickyStaticScrollPosition", status: "test", }, - { -- name: "CSSPreferredTextScale", -- status: "stable", ++ { + name: "CSSPreferredTextScale", status: "test", public: true - }, ++ }, // https://drafts.csswg.org/css-values-5/#progress // progress() + { -- diff --git a/build/patches/Enable-Global-Privacy-Control.patch b/build/patches/Enable-Global-Privacy-Control.patch index 4c69d898..62e9290e 100644 --- a/build/patches/Enable-Global-Privacy-Control.patch +++ b/build/patches/Enable-Global-Privacy-Control.patch @@ -20,7 +20,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../settings/privacy_page/gpc_toggle.ts | 112 ++++++++++++++++++ .../Enable-Global-Privacy-Control.grdp | 15 +++ chrome/browser/ui/prefs/pref_watcher.cc | 4 + - chrome/browser/ui/prefs/pref_watcher.h | 1 + + chrome/browser/ui/prefs/pref_watcher.h | 2 + .../settings_localized_strings_provider.cc | 3 + .../tracking_protection_prefs.cc | 1 + .../tracking_protection_prefs.h | 2 + @@ -46,7 +46,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../web_service_worker_fetch_context_impl.cc | 3 + ...shared_worker_global_scope_context_impl.cc | 3 + .../platform/runtime_enabled_features.json5 | 5 + - 42 files changed, 390 insertions(+) + 42 files changed, 391 insertions(+) create mode 100644 chrome/android/java/res/xml/gpc_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java create mode 100644 chrome/browser/resources/settings/privacy_page/gpc_toggle.html @@ -61,7 +61,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.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 -@@ -656,6 +656,7 @@ chrome_java_resources = [ +@@ -675,6 +675,7 @@ chrome_java_resources = [ "java/res/xml/contextual_search_preferences.xml", "java/res/xml/developer_preferences.xml", "java/res/xml/do_not_track_preferences.xml", @@ -72,7 +72,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -940,6 +940,7 @@ chrome_java_sources = [ +@@ -953,6 +953,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java", "java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java", "java/src/org/chromium/chrome/browser/policy/PolicyAuditorBridge.java", @@ -103,7 +103,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -54,6 +54,10 @@ found in the LICENSE file. +@@ -48,6 +48,10 @@ found in the LICENSE file. android:key="do_not_track" android:title="@string/do_not_track_title" android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" /> @@ -178,7 +178,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -127,6 +127,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -128,6 +128,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private static final String PREF_HTTPS_FIRST_MODE_LEGACY = "https_first_mode_legacy"; private static final String PREF_SECURE_DNS = "secure_dns"; private static final String PREF_USAGE_STATS = "usage_stats_reporting"; @@ -186,7 +186,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting private static final String PREF_SAFE_BROWSING = "safe_browsing"; private static final String PREF_PASSWORD_LEAK_DETECTION = "password_leak_detection"; private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; -@@ -575,6 +576,14 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -567,6 +568,14 @@ public class PrivacySettings extends ChromeBaseSettingsFragment : R.string.text_off); } @@ -204,7 +204,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting 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 -@@ -1928,6 +1928,21 @@ +@@ -1943,6 +1943,21 @@ Learn more about Do Not Track @@ -229,7 +229,7 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -415,6 +415,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -419,6 +419,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { (*s_allowlist)[::prefs::kTrackingProtectionLevel] = settings_api::PrefType::kNumber; (*s_allowlist)[::prefs::kEnableDoNotTrack] = settings_api::PrefType::kBoolean; @@ -240,10 +240,10 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc --- a/chrome/browser/renderer_preferences_util.cc +++ b/chrome/browser/renderer_preferences_util.cc -@@ -146,6 +146,9 @@ void UpdateFromSystemSettings(blink::RendererPreferences* prefs, +@@ -152,6 +152,9 @@ void UpdateFromSystemSettings(blink::RendererPreferences* prefs, + prefs->referrers_policy = pref_service->GetInteger(prefs::kReferrersPolicy); prefs->enable_do_not_track = - TrackingProtectionSettingsFactory::GetForProfile(profile) - ->IsDoNotTrackEnabled(); + pref_service->GetBoolean(prefs::kEnableDoNotTrack); + prefs->enable_gpc = + TrackingProtectionSettingsFactory::GetForProfile(profile) + ->IsGPCEnabled(); @@ -253,10 +253,10 @@ diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/render 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 -@@ -130,6 +130,7 @@ build_webui("build") { +@@ -129,6 +129,7 @@ build_webui("build") { + "performance_page/tab_discard/exception_tabbed_add_dialog.ts", "privacy_page/cookies_page.ts", "privacy_page/do_not_track_toggle.ts", - "privacy_page/incognito_tracking_protections_page.ts", + "privacy_page/gpc_toggle.ts", "privacy_page/personalization_options.ts", "privacy_page/privacy_guide/privacy_guide_ad_topics_fragment.ts", @@ -264,7 +264,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.html b/chrome/browser/resources/settings/privacy_page/cookies_page.html --- a/chrome/browser/resources/settings/privacy_page/cookies_page.html +++ b/chrome/browser/resources/settings/privacy_page/cookies_page.html -@@ -205,6 +205,8 @@ +@@ -206,6 +206,8 @@ @@ -276,7 +276,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.html b/ diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.ts b/chrome/browser/resources/settings/privacy_page/cookies_page.ts --- a/chrome/browser/resources/settings/privacy_page/cookies_page.ts +++ b/chrome/browser/resources/settings/privacy_page/cookies_page.ts -@@ -20,6 +20,7 @@ import '../privacy_icons.html.js'; +@@ -22,6 +22,7 @@ import '../privacy_icons.html.js'; import '../settings_page/settings_subpage.js'; import '../settings_shared.css.js'; import '../site_settings/site_list.js'; @@ -461,7 +461,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc --- a/chrome/browser/ui/prefs/pref_watcher.cc +++ b/chrome/browser/ui/prefs/pref_watcher.cc -@@ -175,6 +175,10 @@ void PrefWatcher::OnDoNotTrackEnabledChanged() { +@@ -199,6 +199,10 @@ void PrefWatcher::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) { UpdateRendererPreferences(); } @@ -475,18 +475,19 @@ diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/p diff --git a/chrome/browser/ui/prefs/pref_watcher.h b/chrome/browser/ui/prefs/pref_watcher.h --- a/chrome/browser/ui/prefs/pref_watcher.h +++ b/chrome/browser/ui/prefs/pref_watcher.h -@@ -44,6 +44,7 @@ class PrefWatcher : public KeyedService, +@@ -41,6 +41,8 @@ class PrefWatcher : public KeyedService, + // ui::NativeThemeObserver: void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override; - void OnDoNotTrackEnabledChanged() override; + void OnGPCEnabledChanged() override; - ++ void UpdateRendererPreferences(); void OnWebPrefChanged(const std::string& pref_name); + void OnLiveCaptionEnabledPrefChanged(const std::string& pref_name); 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 -@@ -2140,6 +2140,9 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -2166,6 +2166,9 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"doNotTrackDialogMessage", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT}, {"doNotTrackDialogLearnMoreA11yLabel", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_LEARN_MORE_ACCESSIBILITY_LABEL}, @@ -499,7 +500,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc --- a/components/privacy_sandbox/tracking_protection_prefs.cc +++ b/components/privacy_sandbox/tracking_protection_prefs.cc -@@ -17,6 +17,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -16,6 +16,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( prefs::kFingerprintingProtectionEnabled, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); @@ -510,9 +511,9 @@ diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/component diff --git a/components/privacy_sandbox/tracking_protection_prefs.h b/components/privacy_sandbox/tracking_protection_prefs.h --- a/components/privacy_sandbox/tracking_protection_prefs.h +++ b/components/privacy_sandbox/tracking_protection_prefs.h -@@ -108,6 +108,8 @@ inline constexpr char kFingerprintingProtectionEnabled[] = - // Whether to send the DNT header. - inline constexpr char kEnableDoNotTrack[] = "enable_do_not_track"; +@@ -101,6 +101,8 @@ inline constexpr char kIpProtectionInitializedByDogfood[] = + inline constexpr char kFingerprintingProtectionEnabled[] = + "tracking_protection.fingerprinting_protection_enabled"; +inline constexpr char kEnableGPC[] = "enable_gpc"; + @@ -524,7 +525,7 @@ diff --git a/components/privacy_sandbox/tracking_protection_settings.cc b/compon +++ b/components/privacy_sandbox/tracking_protection_settings.cc @@ -48,6 +48,11 @@ TrackingProtectionSettings::TrackingProtectionSettings( base::BindRepeating( - &TrackingProtectionSettings::OnDoNotTrackEnabledPrefChanged, + &TrackingProtectionSettings::OnIpProtectionPrefChanged, base::Unretained(this))); + pref_change_registrar_.Add( + prefs::kEnableGPC, @@ -532,9 +533,9 @@ diff --git a/components/privacy_sandbox/tracking_protection_settings.cc b/compon + &TrackingProtectionSettings::OnGPCEnabledPrefChanged, + base::Unretained(this))); pref_change_registrar_.Add( - prefs::kIpProtectionEnabled, + prefs::kBlockAll3pcToggleEnabled, base::BindRepeating( -@@ -218,6 +223,16 @@ void TrackingProtectionSettings::OnDoNotTrackEnabledPrefChanged() { +@@ -135,6 +140,16 @@ void TrackingProtectionSettings::OnEnterpriseControlForPrefsChanged() { } } @@ -554,19 +555,19 @@ diff --git a/components/privacy_sandbox/tracking_protection_settings.cc b/compon diff --git a/components/privacy_sandbox/tracking_protection_settings.h b/components/privacy_sandbox/tracking_protection_settings.h --- a/components/privacy_sandbox/tracking_protection_settings.h +++ b/components/privacy_sandbox/tracking_protection_settings.h -@@ -65,6 +65,8 @@ class TrackingProtectionSettings : public KeyedService, - // Returns whether "do not track" is enabled. - bool IsDoNotTrackEnabled() const; +@@ -49,6 +49,8 @@ class TrackingProtectionSettings : public KeyedService { + void AddObserver(TrackingProtectionSettingsObserver* observer); + void RemoveObserver(TrackingProtectionSettingsObserver* observer); + bool IsGPCEnabled() const; + // Returns whether tracking protection for 3PCD (prefs + UX) is enabled. bool IsTrackingProtection3pcdEnabled() const; -@@ -111,6 +113,7 @@ class TrackingProtectionSettings : public KeyedService, +@@ -70,6 +72,7 @@ class TrackingProtectionSettings : public KeyedService { + void OnEnterpriseControlForPrefsChanged(); // Callbacks for pref observation. - void OnDoNotTrackEnabledPrefChanged(); + void OnGPCEnabledPrefChanged(); void OnBlockAllThirdPartyCookiesPrefChanged(); void OnTrackingProtection3pcdPrefChanged(); @@ -574,9 +575,9 @@ diff --git a/components/privacy_sandbox/tracking_protection_settings.h b/compone diff --git a/components/privacy_sandbox/tracking_protection_settings_observer.h b/components/privacy_sandbox/tracking_protection_settings_observer.h --- a/components/privacy_sandbox/tracking_protection_settings_observer.h +++ b/components/privacy_sandbox/tracking_protection_settings_observer.h -@@ -24,6 +24,8 @@ class TrackingProtectionSettingsObserver { - // For observation of DNT. - virtual void OnDoNotTrackEnabledChanged() {} +@@ -21,6 +21,8 @@ class TrackingProtectionSettingsObserver { + + virtual ~TrackingProtectionSettingsObserver() = default; + virtual void OnGPCEnabledChanged() {} + @@ -602,7 +603,7 @@ diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/cont diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc -@@ -4403,6 +4403,10 @@ void RenderFrameImpl::FinalizeRequestInternal( +@@ -4458,6 +4458,10 @@ void RenderFrameImpl::FinalizeRequestInternal( request.SetHttpHeaderField( blink::WebString::FromUTF8(blink::kDoNotTrackHeader), "1"); } @@ -686,7 +687,7 @@ diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_p diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni --- a/third_party/blink/renderer/bindings/idl_in_modules.gni +++ b/third_party/blink/renderer/bindings/idl_in_modules.gni -@@ -1283,6 +1283,11 @@ static_idl_files_in_modules = [ +@@ -1276,6 +1276,11 @@ static_idl_files_in_modules = [ "//third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl", ] @@ -701,7 +702,7 @@ diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_part diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc -@@ -3620,6 +3620,9 @@ void WebViewImpl::UpdateRendererPreferences( +@@ -3605,6 +3605,9 @@ void WebViewImpl::UpdateRendererPreferences( GetSettings()->SetCaretBrowsingEnabled( renderer_preferences_.caret_browsing_enabled); @@ -714,7 +715,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn -@@ -169,6 +169,10 @@ component("modules") { +@@ -167,6 +167,10 @@ component("modules") { "//third_party/blink/renderer/modules/xr", ] @@ -826,7 +827,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicat 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 -@@ -3267,6 +3267,11 @@ +@@ -3374,6 +3374,11 @@ status: "stable", base_feature: "none", }, diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index eaf1172f..0da68e7a 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -16,7 +16,7 @@ Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../settings/PasswordSettings.java | 84 ++++++++++++++++++- - .../chrome/browser/settings/MainSettings.java | 16 +--- + .../chrome/browser/settings/MainSettings.java | 17 +--- .../chromium/chrome/browser/tab/TabImpl.java | 42 ++++++++-- chrome/browser/android/tab_android.cc | 4 +- chrome/browser/autofill/android/BUILD.gn | 2 +- @@ -42,10 +42,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/foundations/autofill_manager.h | 2 + .../foundations/browser_autofill_manager.cc | 2 + .../foundations/browser_autofill_manager.h | 2 + - .../autofill/core/common/autofill_features.cc | 1 - .../autofill/core/common/autofill_prefs.cc | 4 +- .../autofill/core/common/autofill_prefs.h | 5 ++ - 30 files changed, 238 insertions(+), 121 deletions(-) + 29 files changed, 238 insertions(+), 121 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 @@ -187,7 +186,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/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 -@@ -465,20 +465,8 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -579,21 +579,8 @@ public class MainSettings extends ChromeBaseSettingsFragment } private void updateAutofillPreferences() { @@ -196,7 +195,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe - Preference autofillOptionsPreference = findPreference(PREF_AUTOFILL_OPTIONS); - autofillOptionsPreference.setFragment(null); - autofillOptionsPreference.setOnPreferenceClickListener( -- unused -> { +- preference -> { +- onPreferenceSelected(preference); - SettingsNavigationFactory.createSettingsNavigation() - .startSettings( - getContext(), @@ -209,7 +209,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe + removePreferenceIfPresent(PREF_AUTOFILL_OPTIONS); findPreference(PREF_AUTOFILL_PAYMENTS) .setOnPreferenceClickListener( - preference -> + 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 @@ -227,19 +227,19 @@ 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. -@@ -1269,6 +1276,11 @@ class TabImpl implements Tab { - for (TabObserver observer : mObservers) observer.onDestroyed(this); - mObservers.clear(); +@@ -1286,6 +1293,11 @@ class TabImpl implements Tab { + } + mObservers.clear(); + if (mAutofillProvider != null) { + mAutofillProvider.destroy(); + mAutofillProvider = null; + } + - mUserDataHost.destroy(); + if (!abortNavigationsFromTabClosures) mUserDataHost.destroy(); mTabViewManager.destroy(); hideNativePage(false, null); -@@ -1612,7 +1624,7 @@ class TabImpl implements Tab { +@@ -1636,7 +1648,7 @@ class TabImpl implements Tab { * @return iff the AutofillProvider should provide a ViewStructure when prompted. */ boolean providesAutofillStructure() { @@ -248,7 +248,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav if (mProfile == null || !mProfile.isNativeInitialized()) { return false; } -@@ -2378,16 +2390,21 @@ class TabImpl implements Tab { +@@ -2402,16 +2414,21 @@ class TabImpl implements Tab { * @return true if the the provider is available for the given WebContents. */ private boolean prepareAutofillProvider(WebContents newWebContents) { @@ -276,7 +276,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav // TODO: crbug.com/432447902 — Provide only an activity context and push changes. mAutofillProvider = new AutofillProvider( -@@ -2397,7 +2414,16 @@ class TabImpl implements Tab { +@@ -2421,7 +2438,16 @@ class TabImpl implements Tab { getContext().getString(R.string.app_name)); TabImplJni.get().initializeAutofillIfNecessary(mNativeTabAndroid); } @@ -305,7 +305,7 @@ diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_ #include "chrome/browser/ui/android/context_menu_helper.h" #include "chrome/browser/ui/android/tab_model/tab_model.h" #include "chrome/browser/ui/android/tab_model/tab_model_list.h" -@@ -447,8 +448,7 @@ void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) { +@@ -451,8 +452,7 @@ void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) { ->MaybeInitKeyboardSuppressor(); return; } @@ -318,7 +318,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 -@@ -161,7 +161,7 @@ android_library("bottom_sheet_utils_java") { +@@ -164,7 +164,7 @@ android_library("bottom_sheet_utils_java") { generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/autofill/AddressNormalizerFactory.java", @@ -355,7 +355,7 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse 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 -@@ -317,6 +317,12 @@ CHAR_LIMIT guidelines: +@@ -329,6 +329,12 @@ CHAR_LIMIT guidelines: You and Google @@ -382,8 +382,9 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro namespace autofill { -namespace { -- --#if BUILDFLAG(IS_ANDROID) + ++AutofillClientProvider::AutofillClientProvider(PrefService* prefs) { + #if BUILDFLAG(IS_ANDROID) -void RecordAvailabilityStatus(AndroidAutofillAvailabilityStatus availability) { - base::UmaHistogramEnumeration("Autofill.AndroidAutofillAvailabilityStatus", - availability); @@ -441,14 +442,13 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.cc b/chrome/bro - return false; -#endif // BUILDFLAG(IS_ANDROID) -} - +- -} // namespace - -AutofillClientProvider::AutofillClientProvider(PrefService* prefs) - : uses_platform_autofill_( - UsesVirtualViewStructureForAutofill(CHECK_DEREF(prefs))) { -+AutofillClientProvider::AutofillClientProvider(PrefService* prefs) { - #if BUILDFLAG(IS_ANDROID) +-#if BUILDFLAG(IS_ANDROID) - RecordWhetherAndroidPrefResets(*prefs, uses_platform_autofill_); - // Ensure the pref is reset if platform autofill is restricted. prefs->SetBoolean(prefs::kAutofillUsingVirtualViewStructure, @@ -495,7 +495,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 -@@ -406,9 +406,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -375,9 +375,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents); ChainedBackNavigationTracker::CreateForWebContents(web_contents); chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents); @@ -649,7 +649,7 @@ new file mode 100644 diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc --- a/components/autofill/content/browser/content_autofill_driver.cc +++ b/components/autofill/content/browser/content_autofill_driver.cc -@@ -275,6 +275,13 @@ void RouteToManager(ContentAutofillDriver& source, +@@ -277,6 +277,13 @@ void RouteToManager(ContentAutofillDriver& source, AutofillManager& manager = target.GetAutofillManager(); (manager.* manager_fun)(WithNewVersion(std::forward(args))...); @@ -663,7 +663,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }, source, Lift(source, std::forward(args))...); } -@@ -665,6 +672,10 @@ ContentAutofillDriver::GetAutofillAgent() { +@@ -679,6 +686,10 @@ ContentAutofillDriver::GetAutofillAgent() { return autofill_agent_; } @@ -690,7 +690,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com content::RenderFrameHost* render_frame_host() { return &*render_frame_host_; } const content::RenderFrameHost* render_frame_host() const { return &*render_frame_host_; -@@ -310,6 +316,10 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -312,6 +318,10 @@ class ContentAutofillDriver : public AutofillDriver, // The factory that created this driver. Outlives `this`. const raw_ref owner_; @@ -733,7 +733,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver_factory diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc -@@ -1547,14 +1547,19 @@ void AutofillAgent::ShowSuggestions( +@@ -1403,14 +1403,19 @@ void AutofillAgent::ShowSuggestions( password_generation_agent_->ShowPasswordGenerationSuggestions( input_element, form_cache)) { is_popup_possibly_visible_ = true; @@ -756,7 +756,7 @@ diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc -@@ -851,7 +851,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( +@@ -852,7 +852,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( void PasswordAutofillAgent::TrackAutofilledElement( const WebFormControlElement& element) { @@ -771,7 +771,7 @@ diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/c diff --git a/components/autofill/core/browser/foundations/autofill_driver.h b/components/autofill/core/browser/foundations/autofill_driver.h --- a/components/autofill/core/browser/foundations/autofill_driver.h +++ b/components/autofill/core/browser/foundations/autofill_driver.h -@@ -151,6 +151,8 @@ class AutofillDriver { +@@ -172,6 +172,8 @@ class AutofillDriver { // Returns the AutofillManager owned by the AutofillDriver. virtual AutofillManager& GetAutofillManager() = 0; @@ -797,7 +797,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 -@@ -238,6 +238,8 @@ class AutofillManager +@@ -239,6 +239,8 @@ class AutofillManager LifecycleState new_state, base::PassKey pass_key); @@ -809,15 +809,15 @@ 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 -@@ -828,6 +828,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { +@@ -811,6 +811,8 @@ base::WeakPtr BrowserAutofillManager::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } +bool BrowserAutofillManager::IsAndroidAutofill() const { return false; } + - CreditCardAccessManager& BrowserAutofillManager::GetCreditCardAccessManager() { + CreditCardAccessManager* BrowserAutofillManager::GetCreditCardAccessManager() { if (!credit_card_access_manager_) { - credit_card_access_manager_ = std::make_unique( + credit_card_access_manager_ = diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.h b/components/autofill/core/browser/foundations/browser_autofill_manager.h --- a/components/autofill/core/browser/foundations/browser_autofill_manager.h +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.h @@ -830,21 +830,10 @@ diff --git a/components/autofill/core/browser/foundations/browser_autofill_manag // Whether the `trigger_field` should show an entry to scan a credit card. bool ShouldShowScanCreditCard(const FormStructure& form, const AutofillField& trigger_field); -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 -@@ -871,7 +871,6 @@ BASE_FEATURE(kAutofillEnableSecurityTouchEventFilteringAndroid, - // virtual view structures to third party providers. - BASE_FEATURE(kAutofillThirdPartyModeContentProvider, - base::FEATURE_ENABLED_BY_DEFAULT); -- - #endif // BUILDFLAG(IS_ANDROID) - - // 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 -@@ -75,6 +75,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -78,6 +78,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(kAutofillCreditCardFidoAuthOfferCheckboxState, true); #endif @@ -853,7 +842,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto registry->RegisterIntegerPref(kAutocompleteLastVersionRetentionPolicy, 0); registry->RegisterStringPref(kAutofillUploadEncodingSeed, ""); registry->RegisterDictionaryPref(kAutofillVoteUploadEvents); -@@ -114,7 +116,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -117,7 +119,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -865,7 +854,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 -@@ -140,6 +140,11 @@ inline constexpr char kAutofillWasNameAndEmailProfileUsed[] = +@@ -151,6 +151,11 @@ inline constexpr char kAutofillWasNameAndEmailProfileUsed[] = // retention policy was run. inline constexpr char kAutocompleteLastVersionRetentionPolicy[] = "autocomplete.retention_policy_last_version"; @@ -875,6 +864,6 @@ diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autof +inline constexpr char kAutofillAndroidIncognitoEnabled[] = + "autofill.android_autofill_incognito_enabled"; #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \ - BUILDFLAG(IS_IOS) + BUILDFLAG(IS_IOS) || BUILDFLAG(IS_CHROMEOS) // Boolean that is set when payment methods mandatory re-auth is enabled by the -- diff --git a/build/patches/Enable-snackbar-swipe.patch b/build/patches/Enable-snackbar-swipe.patch index 0efad72a..e0b50078 100644 --- a/build/patches/Enable-snackbar-swipe.patch +++ b/build/patches/Enable-snackbar-swipe.patch @@ -6,8 +6,8 @@ Allows swipe of snackbar notifications License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../ui/messages/snackbar/SnackbarView.java | 78 ++++++++++++++++++- - 1 file changed, 76 insertions(+), 2 deletions(-) + .../ui/messages/snackbar/SnackbarView.java | 84 +++++++++++++++++-- + 1 file changed, 76 insertions(+), 8 deletions(-) diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java --- a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarView.java @@ -24,7 +24,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro import android.view.Gravity; import android.view.LayoutInflater; import android.view.SurfaceView; -@@ -34,6 +36,9 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; +@@ -33,6 +35,9 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; import org.chromium.chrome.ui.messages.R; import org.chromium.components.browser_ui.styles.SemanticColorUtils; @@ -34,7 +34,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro import org.chromium.components.browser_ui.widget.text.TemplatePreservingTextView; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.edge_to_edge.EdgeToEdgePadAdjuster; -@@ -47,7 +52,7 @@ import org.chromium.ui.interpolators.Interpolators; +@@ -46,7 +51,7 @@ import org.chromium.ui.interpolators.Interpolators; // TODO (jianli): Change this class and its methods back to package protected after the offline // indicator experiment is done. @NullMarked @@ -43,7 +43,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro private static final int MAX_LINES = 5; private static final int DEFAULT_LINES = 2; -@@ -89,6 +94,16 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -88,6 +93,16 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { } }; @@ -60,10 +60,16 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro /** * Creates an instance of the {@link SnackbarView}. * -@@ -150,7 +165,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -147,13 +162,12 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { // Make sure clicks are not consumed by content beneath the container view. mContainerView.setClickable(true); +- mContainerView.setOnClickListener((event) -> manager.resetSnackbarTimeout()); +- mContainerView.setOnTouchListener( +- (view, event) -> { +- mContainerView.performClick(); +- return true; +- }); - + mSwipeGestureListener = new SwipeGestureListenerImpl(mContainerView.getContext(), this); + if (!snackbar.isTypePersistent()) { @@ -74,7 +80,7 @@ diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/bro mSnackbarView = mContainerView.findViewById(R.id.snackbar); mAnimationDuration = mContainerView.getResources().getInteger(android.R.integer.config_mediumAnimTime); -@@ -505,4 +525,58 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { +@@ -508,4 +522,58 @@ public class SnackbarView implements InsetObserver.WindowInsetObserver { public @Nullable EdgeToEdgePadAdjuster getEdgeToEdgePadAdjusterForTesting() { return mEdgeToEdgePadAdjuster; } diff --git a/build/patches/Experimental-support-for-extensions-on-Android.patch b/build/patches/Experimental-support-for-extensions-on-Android.patch index 20fecbe2..8ff7fa6d 100644 --- a/build/patches/Experimental-support-for-extensions-on-Android.patch +++ b/build/patches/Experimental-support-for-extensions-on-Android.patch @@ -36,20 +36,19 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../ChromeSiteSettingsDelegate.java | 2 +- .../site_settings/ManageSpaceActivity.java | 20 ++++++ ...InterceptNavigationDelegateClientImpl.java | 2 +- - .../browser/tab/RequestDesktopUtils.java | 6 +- - .../tab/TabContextMenuItemDelegate.java | 8 ++- + .../browser/tab/RequestDesktopUtils.java | 2 +- .../TabbedAppMenuPropertiesDelegate.java | 2 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 2 +- .../chrome/browser/ui/RootUiCoordinator.java | 2 +- chrome/app/extensions_strings.grdp | 7 ++ chrome/app/theme/theme_resources.grd | 4 +- chrome/browser/BUILD.gn | 8 +-- - chrome/browser/about_flags.cc | 6 +- + chrome/browser/about_flags.cc | 4 ++ ...chrome_selection_dropdown_menu_delegate.cc | 4 +- .../bookmarks/bar/BookmarkBarUtils.java | 6 +- .../bar/BookmarkBarVisibilityProvider.java | 2 +- chrome/browser/browser_process_impl.cc | 2 +- - chrome/browser/chrome_browser_field_trials.cc | 72 +++++++++---------- + chrome/browser/chrome_browser_field_trials.cc | 70 +++++++++---------- .../chrome_browser_interface_binders_webui.cc | 4 +- .../browser/chrome_content_browser_client.cc | 4 +- chrome/browser/devtools/BUILD.gn | 2 +- @@ -60,7 +59,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/extensions/extension_management.h | 2 +- chrome/browser/extensions/extension_util.cc | 11 +++ .../feedback/DeviceInfoFeedbackSource.java | 2 +- - chrome/browser/file_system_access/BUILD.gn | 2 +- chrome/browser/media/router/BUILD.gn | 4 +- .../browser/media/router/discovery/BUILD.gn | 2 +- .../media/router/media_router_feature.cc | 10 +-- @@ -111,14 +109,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../ui/browser_window/internal/BUILD.gn | 2 +- chrome/browser/ui/prefs/BUILD.gn | 4 +- chrome/browser/ui/prefs/prefs_tab_helper.cc | 10 +-- - chrome/browser/ui/tab_contents/BUILD.gn | 2 +- chrome/browser/ui/tabs/tab_list_interface.h | 4 +- chrome/browser/ui/webid/BUILD.gn | 2 +- .../browser/ui/webui/chrome_web_ui_configs.cc | 4 +- .../browser/ui/webui/current_channel_logo.cc | 2 +- .../browser/ui/webui/discards/discards_ui.cc | 8 +-- chrome/chrome_paks.gni | 2 +- - chrome/common/BUILD.gn | 2 +- chrome/common/chrome_switches.cc | 2 +- chrome/common/chrome_switches.h | 2 +- chrome/common/extensions/api/api_sources.gni | 7 ++ @@ -180,13 +176,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/base/accelerators/command.cc | 2 +- ui/base/device_form_factor_android.cc | 2 +- ui/gl/features.gni | 2 +- - ui/gl/gl_switches.cc | 4 +- ui/resources/ui_resources.grd | 2 +- ui/webui/resources/BUILD.gn | 4 +- ui/webui/resources/cr_elements/BUILD.gn | 2 +- .../cr_elements/cr_toolbar/cr_toolbar.css | 6 ++ ui/webui/resources/css/BUILD.gn | 2 +- - 174 files changed, 572 insertions(+), 289 deletions(-) + 169 files changed, 557 insertions(+), 278 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-extensions-Android.grdp create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Extensions-Android.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Extensions-Android.inc @@ -194,7 +189,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn -@@ -1303,7 +1303,7 @@ declare_args() { +@@ -1301,7 +1301,7 @@ declare_args() { # logic more easily on an emulator, so the decision to use the arm64 # orderfile for x64 (instead of arm32) is somewhat arbitrary. We just # needed to use some real orderfile. @@ -206,7 +201,7 @@ diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn diff --git a/base/android/device_info.cc b/base/android/device_info.cc --- a/base/android/device_info.cc +++ b/base/android/device_info.cc -@@ -100,10 +100,14 @@ bool is_foldable() { +@@ -104,10 +104,14 @@ bool is_foldable() { return get_device_info().isFoldable; } @@ -222,7 +217,7 @@ diff --git a/base/android/device_info.cc b/base/android/device_info.cc // Available only on Android T+. int32_t vulkan_deqp_level() { return get_device_info().vulkanDeqpLevel; -@@ -119,7 +123,7 @@ bool is_xr() { +@@ -123,7 +127,7 @@ bool is_xr() { // check) as a first choice, but fall back to this if not feasible. bool is_tablet() { return was_launched_on_large_display() && !is_tv() && !is_automotive() && @@ -247,7 +242,7 @@ diff --git a/base/android/device_info.h b/base/android/device_info.h diff --git a/base/android/java/src/org/chromium/base/DeviceInfo.java b/base/android/java/src/org/chromium/base/DeviceInfo.java --- a/base/android/java/src/org/chromium/base/DeviceInfo.java +++ b/base/android/java/src/org/chromium/base/DeviceInfo.java -@@ -119,10 +119,14 @@ public final class DeviceInfo { +@@ -128,10 +128,14 @@ public final class DeviceInfo { return getInstance().mIDeviceInfo.isFoldable; } @@ -292,7 +287,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni --- a/build/config/chrome_build.gni +++ b/build/config/chrome_build.gni -@@ -26,7 +26,8 @@ declare_args() { +@@ -34,7 +34,8 @@ declare_args() { # Set to true to set defaults that enable features on Android that are more # typically available on desktop. @@ -302,7 +297,7 @@ diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni if (is_android) { # By default, Trichrome channels are compiled using separate package names. -@@ -44,12 +45,12 @@ declare_args() { +@@ -56,12 +57,12 @@ is_internal_chrome_branded = enable_src_internal && is_chrome_branded # Ensure !is_android implies !is_high_end_android. is_high_end_android = is_high_end_android && is_android @@ -344,7 +339,7 @@ diff --git a/build/config/compiler/pgo/BUILD.gn b/build/config/compiler/pgo/BUIL diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -971,7 +971,7 @@ if (_is_default_toolchain) { +@@ -958,7 +958,7 @@ if (_is_default_toolchain) { "//chrome/browser/password_entry_edit/android/internal:java", ] @@ -353,7 +348,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn deps += [ "//chrome/browser/ui/android/extensions/windowing/internal:java", "//chrome/browser/ui/browser_window/internal:java", -@@ -1235,7 +1235,7 @@ if (_is_default_toolchain) { +@@ -1225,7 +1225,7 @@ if (_is_default_toolchain) { deps += [ "//chrome/browser/ui/android/extensions:junit" ] } @@ -362,7 +357,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn deps += [ "//chrome/browser/ui/browser_window/internal:junit" ] } } -@@ -2440,7 +2440,7 @@ if (_is_default_toolchain) { +@@ -2416,7 +2416,7 @@ if (_is_default_toolchain) { "//components/ip_protection/android/android_auth_client_lib/javatests:ip_protection_auth_javatests", ] @@ -423,7 +418,7 @@ diff --git a/chrome/android/java/res/xml/developer_preferences.xml b/chrome/andr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java -@@ -580,7 +580,7 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -578,7 +578,7 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity applySingleThemeOverlay(R.style.ThemeOverlay_BrowserUI_OptOutEdgeToEdge); } @@ -435,7 +430,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -1137,7 +1137,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties +@@ -1173,7 +1173,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !shouldShowReaderModePrefs(currentTab) && currentTab != null && currentTab.getWebContents() != null @@ -459,7 +454,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appearance/sett diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java -@@ -408,7 +408,7 @@ public class StripLayoutUtils { +@@ -420,7 +420,7 @@ public class StripLayoutUtils { public static boolean shouldApplyMoreDensity() { return ChromeFeatureList.sTabStripDensityChangeAndroid.isEnabled() @@ -471,7 +466,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/desktop_site/DesktopSiteSettingsIphController.java b/chrome/android/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteSettingsIphController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteSettingsIphController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteSettingsIphController.java -@@ -81,7 +81,7 @@ public class DesktopSiteSettingsIphController { +@@ -80,7 +80,7 @@ public class DesktopSiteSettingsIphController { View toolbarMenuButton, AppMenuHandler appMenuHandler) { // Desktop site settings are default enabled on desktop. Do not show IPH. @@ -495,7 +490,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitT diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java -@@ -197,7 +197,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl +@@ -216,7 +216,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl } } } @@ -504,16 +499,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapt if (mNotifications.size() > 1 && mNotifications.firstKey() == notificationId) { // For large screen device, we use the previous notification to update // foreground -@@ -212,7 +212,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl +@@ -231,7 +231,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl } mNotificationManager.cancel(NOTIFICATION_NAMESPACE, notificationId); - mNotificationsType.delete(notificationId); + mNotificationsType.remove(notificationId); - if (DeviceInfo.isDesktop()) { + if (DeviceInfo.isDesktopFalse()) { mNotifications.remove(notificationId); } updateSharedPreferencesEntry(notificationId, true); -@@ -260,7 +260,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl +@@ -305,7 +305,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl appContext.getString(R.string.app_name), contentIntent, stopIntent); @@ -521,11 +516,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapt + if (DeviceInfo.isDesktopFalse()) { // For large screen device, we use the latest notification to start or update // the foreground service. - startOrUpdateForegroundService(notificationId, notification, mediaType); -@@ -268,7 +268,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl + startOrUpdateForegroundService(notificationId, notification, mediaTypes); +@@ -313,7 +313,7 @@ public class MediaCaptureNotificationServiceImpl extends SplitCompatService.Impl mNotificationManager.notify(notification); } - mNotificationsType.put(notificationId, mediaType); + mNotificationsType.put(notificationId, mediaTypes); - if (DeviceInfo.isDesktop()) { + if (DeviceInfo.isDesktopFalse()) { mNotifications.put(notificationId, notification); @@ -534,19 +529,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapt diff --git a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java -@@ -221,7 +221,7 @@ public class MultiWindowUtils implements ActivityStateListener { +@@ -217,7 +217,7 @@ public class MultiWindowUtils implements ActivityStateListener { return TabWindowManager.MAX_SELECTORS_S; } -- if (DeviceInfo.isDesktop() || DeviceInfo.isXr()) { -+ if (DeviceInfo.isDesktopFalse() || DeviceInfo.isXr()) { +- if (DeviceInfo.isDesktop()) { ++ if (DeviceInfo.isDesktopFalse()) { return TabWindowManager.MAX_SELECTORS; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java -@@ -174,7 +174,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -175,7 +175,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { return PermissionUtil.handTrackingNeedsAdditionalPermissions(); case SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE: // Desktop Android always requests desktop sites, so hide the category. @@ -621,25 +616,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNa diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java -@@ -191,7 +191,7 @@ public class RequestDesktopUtils { - */ - static boolean shouldDefaultEnableGlobalSetting(double displaySizeInInches, Context context) { - // Desktop Android always requests desktop sites. -- if (DeviceInfo.isDesktop()) { -+ if (DeviceInfo.isDesktopFalse()) { - return true; - } - -@@ -270,7 +270,7 @@ public class RequestDesktopUtils { - boolean isOnExternalDisplay = isOnExternalDisplay(activity); - if (isOnExternalDisplay - || smallestScreenWidthDp < DeviceFormFactor.MINIMUM_TABLET_WIDTH_DP -- || DeviceInfo.isDesktop()) { -+ || DeviceInfo.isDesktopFalse()) { - return; - } - PrefService prefService = UserPrefs.get(profile); -@@ -293,7 +293,7 @@ public class RequestDesktopUtils { +@@ -107,7 +107,7 @@ public class RequestDesktopUtils { // Desktop devices always request desktop sites so there's no need to show a message to // the user. @@ -648,35 +625,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesk return false; } -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -@@ -285,7 +285,9 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { - */ - public void openInOtherWindow(GURL url, @Nullable Referrer referrer, boolean isIncognito) { - LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec()); -- loadUrlParams.setReferrer(referrer); -+ if (!isIncognito) { -+ loadUrlParams.setReferrer(referrer); -+ } - if (IncognitoUtils.shouldOpenIncognitoAsWindow() && mMultiInstanceManager != null) { - mMultiInstanceManager.openUrlInSelectedWindow(loadUrlParams, mTab.getParentId()); - } else { -@@ -304,7 +306,9 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { - public void openInAnotherWindow(GURL url, @Nullable Referrer referrer, boolean isIncognito) { - ChromeAsyncTabLauncher chromeAsyncTabLauncher = new ChromeAsyncTabLauncher(isIncognito); - LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec()); -- loadUrlParams.setReferrer(referrer); -+ if (!isIncognito) { -+ loadUrlParams.setReferrer(referrer); -+ } - Activity activity = TabUtils.getActivity(mTab); - assumeNonNull(activity); - // null if there are no foreground window activities. 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 -@@ -764,7 +764,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -826,7 +826,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm // PDF. NativePage nativePage = currentTab.getNativePage(); boolean isPdfPage = nativePage != null && nativePage.isPdf(); @@ -688,7 +640,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/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 -@@ -1928,7 +1928,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -2014,7 +2014,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { } else if (id == R.id.toggle_bookmark_bar) { // isActivityStateBookmarkBarCompatible already checks the flag sAndroidBookmarkBar. if (BookmarkBarUtils.isActivityStateBookmarkBarCompatible(mActivity)) { @@ -700,8 +652,8 @@ 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 -@@ -682,7 +682,7 @@ public class RootUiCoordinator - } +@@ -714,7 +714,7 @@ public class RootUiCoordinator + mXrSpaceModeObservableSupplier = xrSpaceModeObservableSupplier; if (BrowserControlsUtils.doSyncMinHeightWithTotalHeightV2()) { - if (DeviceInfo.isDesktop() @@ -732,7 +684,7 @@ diff --git a/chrome/app/extensions_strings.grdp b/chrome/app/extensions_strings. diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd --- a/chrome/app/theme/theme_resources.grd +++ b/chrome/app/theme/theme_resources.grd -@@ -370,7 +370,7 @@ +@@ -372,7 +372,7 @@ @@ -741,7 +693,7 @@ diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resou -@@ -379,7 +379,7 @@ +@@ -381,7 +381,7 @@ @@ -753,7 +705,7 @@ diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resou diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -4905,7 +4905,7 @@ static_library("browser") { +@@ -4916,7 +4916,7 @@ static_library("browser") { } } @@ -762,7 +714,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn deps += [ "//chrome/browser/ui/browser_window" ] } -@@ -7647,7 +7647,7 @@ static_library("browser") { +@@ -7642,7 +7642,7 @@ static_library("browser") { deps += [ "//media/mojo/mojom:remoting" ] } @@ -771,7 +723,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn sources += [ "download/download_crx_util_android.cc" ] } -@@ -7961,7 +7961,7 @@ static_library("browser") { +@@ -7956,7 +7956,7 @@ static_library("browser") { # TODO(https://crbug.com/356905053): Add more dependencies here and merge this # block with the `enable_extensions` block above. @@ -780,7 +732,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn sources += [ # TODO(https://crbug.com/356905053): These files are temporary workarounds # allow for a lightweight extensions runtime in desktop-android builds. -@@ -8724,7 +8724,7 @@ static_library("browser_generated_files") { +@@ -8736,7 +8736,7 @@ static_library("browser_generated_files") { [ "//chrome/browser/ui/webui/new_tab_page/foo:mojo_bindings" ] } } @@ -792,7 +744,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -365,6 +365,10 @@ +@@ -369,6 +369,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -803,15 +755,6 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if BUILDFLAG(ENABLE_PDF) #include "pdf/pdf_features.h" #endif -@@ -13585,7 +13589,7 @@ const FeatureEntry kFeatureEntries[] = { - FEATURE_VALUE_TYPE( - enterprise_signals::features::kProfileSignalsReportingEnabled)}, - --#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) -+#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) - {"enable-extensions-for-corp-desktop-android", - flag_descriptions::kEnableExtensionsForCorpDesktopAndroidName, - flag_descriptions::kEnableExtensionsForCorpDesktopAndroidDescription, diff --git a/chrome/browser/android/selection/chrome_selection_dropdown_menu_delegate.cc b/chrome/browser/android/selection/chrome_selection_dropdown_menu_delegate.cc --- a/chrome/browser/android/selection/chrome_selection_dropdown_menu_delegate.cc +++ b/chrome/browser/android/selection/chrome_selection_dropdown_menu_delegate.cc @@ -876,7 +819,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -348,7 +348,7 @@ void BrowserProcessImpl::Init() { +@@ -357,7 +357,7 @@ void BrowserProcessImpl::Init() { // TODO(devlin): Move this block out of BrowserProcessImpl to somewhere like // //chrome/browser/initialize_extensions_browser_client, analogous to // `EnsureExtensionsClientInitialized()` above? @@ -912,9 +855,9 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro - feature_overrides.EnableFeature(features::kAndroidCaretBrowsing); + // feature_overrides.EnableFeature(features::kAndroidCaretBrowsing); - // If enabled, render processes associated only with tabs in unfocused windows - // will be downgraded to "vis" priority, rather than remaining at "fg". This -@@ -154,8 +154,8 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + // Enable the link hover status bar. + // TODO(crbug.com/404678510): Remove when the feature is stable. +@@ -153,8 +153,8 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Enables media capture (tab+window+screen sharing). // TODO(crbug.com/352187279): Remove when tablet rollout is complete. @@ -924,8 +867,8 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro + // feature_overrides.EnableFeature(features::kUserMediaScreenCapturing); // Enable desktop tab management features. - // TODO(crbug.com/422902940): Remove when tablet rollout is complete. -@@ -171,7 +171,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( + // TODO(crbug.com/422902625): Remove when rollout is complete to all form +@@ -166,7 +166,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid); // Enable V8 optimizations for high-end Android Desktop devices. // TODO(crbug.com/425860368): Remove when the feature is stable. @@ -934,7 +877,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // TODO(b/432367402): Use a new Android API to replace this hack with a proper // solution. feature_overrides.EnableFeature(features::kAndroidCaptureKeyEvents); -@@ -180,74 +180,74 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( +@@ -175,12 +175,12 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( feature_overrides.EnableFeature(features::kAndroidDevToolsFrontend); // TODO(crbug.com/430304112): Remove when rollout is complete to all form // factors. @@ -948,6 +891,10 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro - chrome::android::kLockTopControlsOnLargeTablets); + // feature_overrides.EnableFeature( + // chrome::android::kLockTopControlsOnLargeTablets); + // TODO(crbug.com/445446479): Remove when rollout is complete to all form + // factors. + feature_overrides.EnableFeature( +@@ -188,13 +188,13 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( // Bypass the WebAudio output buffer, to reduce audio latency. // TODO(crbug.com/436988695): Remove when the long term solution is // implemented. @@ -963,9 +910,10 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // TODO(crbug.com/440210010): Remove when the feature experiment is done. - feature_overrides.EnableFeature(features::kAudioStereoInputStreamParameters); + // feature_overrides.EnableFeature(features::kAudioStereoInputStreamParameters); - // Enables picture-in-picture in the right-click context menu. - // TODO(crbug.com/403851785): Remove when the feature is verified to be stable - // on desktop Android. + // Enables automatic picture-in-picture. + // TODO(crbug.com/421608904): Remove when rollout is complete to all form + // factors. +@@ -205,49 +205,49 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides( feature_overrides.EnableFeature(media::kContextMenuPictureInPictureAndroid); // Disables the enhanced pip transition and uses the default animation. // TODO(crbug.com/440384447): Remove when enhanced pip transition is fixed. @@ -1002,10 +950,6 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro - chrome::android::kAndroidPinnedTabsTabletTabStrip); + // feature_overrides.EnableFeature( + // chrome::android::kAndroidPinnedTabsTabletTabStrip); - // TODO(crbug.com/433879656): Remove when this feature on LFF device is - // stable. -- feature_overrides.EnableFeature(features::kFluidResize); -+ // feature_overrides.EnableFeature(features::kFluidResize); // Three flags are required for the bookmarks bar feature. // TODO(crbug.com/430059235): Remove once feature is launched to 100% on all @@ -1035,13 +979,13 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro // SitePerProcess is enabled for all necessary or eligible Android devices. - feature_overrides.EnableFeature(::features::kSitePerProcess); + // feature_overrides.EnableFeature(::features::kSitePerProcess); - #endif // BUILDFLAG(IS_DESKTOP_ANDROID) - // Desktop-first features which are past incubation should either end up here, - // or to a finch trial that enables it for all form factors. + + // Enable all tabs to have WebContents at all times for desktop platforms. + // TODO(crbug.com/448420873): Remove once we enable this feature for all form diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/browser/chrome_browser_interface_binders_webui.cc --- a/chrome/browser/chrome_browser_interface_binders_webui.cc +++ b/chrome/browser/chrome_browser_interface_binders_webui.cc -@@ -40,7 +40,7 @@ +@@ -41,7 +41,7 @@ #include "mojo/public/cpp/bindings/binder_map.h" #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -1050,7 +994,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b #include "chrome/browser/ui/webui/discards/discards.mojom.h" #include "chrome/browser/ui/webui/discards/discards_ui.h" #include "chrome/browser/ui/webui/discards/site_data.mojom.h" -@@ -135,7 +135,7 @@ void PopulateChromeWebUIFrameBinders( +@@ -139,7 +139,7 @@ void PopulateChromeWebUIFrameBinders( #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -1062,7 +1006,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/b diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -4283,7 +4283,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate( +@@ -4270,7 +4270,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate( // TODO(wenz): This should instead proceed with the selected certificate // when there are matching certificates in the OS. #if BUILDFLAG(ENABLE_EXTENSIONS) && \ @@ -1071,7 +1015,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch if (matching_certificates.empty() && nonmatching_certificates.empty()) { extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); -@@ -4507,7 +4507,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( +@@ -4499,7 +4499,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // Fill font preferences. These are not registered on Android unless we're built // with extensions (the chrome.fontSettings API can change these). // - http://crbug.com/308033, http://crbug.com/696364. @@ -1083,7 +1027,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn --- a/chrome/browser/devtools/BUILD.gn +++ b/chrome/browser/devtools/BUILD.gn -@@ -339,7 +339,7 @@ static_library("devtools") { +@@ -345,7 +345,7 @@ static_library("devtools") { } } @@ -1107,7 +1051,7 @@ diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrom diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn -@@ -1736,7 +1736,7 @@ source_set("chrome_extensions_browser_client") { +@@ -1735,7 +1735,7 @@ source_set("chrome_extensions_browser_client") { "//extensions/browser/updater:keepalive", ] @@ -1116,7 +1060,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL sources += [ "chrome_extensions_browser_client_android.cc" ] deps += [ -@@ -1751,6 +1751,16 @@ source_set("chrome_extensions_browser_client") { +@@ -1750,6 +1750,16 @@ source_set("chrome_extensions_browser_client") { "//extensions/browser", "//extensions/browser/kiosk", ] @@ -1136,7 +1080,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client_android.cc b/chrome/browser/extensions/api/chrome_extensions_api_client_android.cc --- a/chrome/browser/extensions/api/chrome_extensions_api_client_android.cc +++ b/chrome/browser/extensions/api/chrome_extensions_api_client_android.cc -@@ -16,7 +16,7 @@ +@@ -15,7 +15,7 @@ // The stubs are implemented here instead of falling back to ExtensionsAPIClient // to allow NOTIMPLEMENTED() logging and a place to put TODOs with bug IDs. @@ -1174,7 +1118,7 @@ diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/ diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h --- a/chrome/browser/extensions/extension_management.h +++ b/chrome/browser/extensions/extension_management.h -@@ -94,7 +94,7 @@ class ExtensionManagement : public KeyedService { +@@ -107,7 +107,7 @@ class ExtensionManagement : public KeyedService, // from the command line, or when loaded as an unpacked extension). bool BlocklistedByDefault() const; @@ -1223,18 +1167,6 @@ diff --git a/chrome/browser/feedback/android/java/src/org/chromium/chrome/browse type = TYPE_DESKTOP; } else if (DeviceFormFactor.isNonMultiDisplayContextOnTablet( ContextUtils.getApplicationContext())) { -diff --git a/chrome/browser/file_system_access/BUILD.gn b/chrome/browser/file_system_access/BUILD.gn ---- a/chrome/browser/file_system_access/BUILD.gn -+++ b/chrome/browser/file_system_access/BUILD.gn -@@ -61,7 +61,7 @@ source_set("impl") { - deps += [ "//chrome/browser/ui/android/tab_model" ] - } - -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window" ] - } - diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn @@ -1340,7 +1272,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager.cc b/chrome/br bool enabled = false; #else bool enabled = true; -@@ -464,7 +464,7 @@ WebRtcEventLogManager::CreateRemoteLogFileWriterFactory() { +@@ -463,7 +463,7 @@ WebRtcEventLogManager::CreateRemoteLogFileWriterFactory() { if (remote_log_file_writer_factory_for_testing_) { return std::move(remote_log_file_writer_factory_for_testing_); } else { @@ -1364,7 +1296,7 @@ diff --git a/chrome/browser/policy/policy_value_and_status_aggregator.cc b/chrom diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -663,7 +663,7 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -659,7 +659,7 @@ void ChromeBrowserMainExtraPartsProfiles:: chromeos_extensions::EnsureBrowserContextKeyedServiceFactoriesBuilt(); #endif extensions::EnsureBrowserContextKeyedServiceFactoriesBuilt(); @@ -1421,7 +1353,7 @@ diff --git a/chrome/browser/profiles/profile_destroyer.cc b/chrome/browser/profi diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn -@@ -125,7 +125,7 @@ group("resources") { +@@ -126,7 +126,7 @@ group("resources") { ] } @@ -1617,7 +1549,7 @@ diff --git a/chrome/browser/task_manager/common/task_manager_features.cc b/chrom diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -671,7 +671,7 @@ static_library("ui") { +@@ -672,7 +672,7 @@ static_library("ui") { "//v8:v8_version", ] @@ -1626,16 +1558,16 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn sources += [ "browser_navigator.h", "incognito_allowed_url.cc", -@@ -686,7 +686,7 @@ static_library("ui") { +@@ -687,7 +687,7 @@ static_library("ui") { ] # Desktop-Android-only dependencies. - if (is_desktop_android) { + if (is_desktop_android_cromite) { sources += [ "//chrome/browser/ui/android/browser_navigator_android.cc" ] - deps += [ "//chrome/browser/ui/android/extensions/windowing/internal" ] - } -@@ -2897,7 +2897,7 @@ static_library("ui") { + deps += [ + "//chrome/browser/ui/android/extensions/windowing/internal", +@@ -2912,7 +2912,7 @@ static_library("ui") { allow_circular_includes_from += [ "//chrome/browser/ui/wallet" ] } @@ -1716,7 +1648,7 @@ diff --git a/chrome/browser/ui/android/context_menu_helper.h b/chrome/browser/ui diff --git a/chrome/browser/ui/android/extensions/BUILD.gn b/chrome/browser/ui/android/extensions/BUILD.gn --- a/chrome/browser/ui/android/extensions/BUILD.gn +++ b/chrome/browser/ui/android/extensions/BUILD.gn -@@ -76,8 +76,8 @@ if (enable_extensions_core) { +@@ -78,8 +78,8 @@ if (enable_extensions_core) { # BuildConfig. java_cpp_template("generate_buildflags") { sources = [ "java/templates/ExtensionsBuildflags.template" ] @@ -1745,8 +1677,8 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ #include "extensions/browser/extension_action.h" #include "extensions/browser/extension_action_manager.h" #include "extensions/browser/extension_registry.h" -@@ -209,6 +212,26 @@ bool ExtensionActionsBridge::ExtensionsEnabled(JNIEnv* env) { - return extension_management->ExtensionsEnabledForDesktopAndroid(); +@@ -203,6 +206,26 @@ ExtensionAction::ShowAction ExtensionActionsBridge::RunAction( + return runner->RunAction(extension, /*grant_tab_permissions=*/true); } +void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) { @@ -1775,10 +1707,10 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/chrome/browser/ui/android/extensions/extension_actions_bridge.h --- a/chrome/browser/ui/android/extensions/extension_actions_bridge.h +++ b/chrome/browser/ui/android/extensions/extension_actions_bridge.h -@@ -54,6 +54,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer, +@@ -53,6 +53,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer, + const ToolbarActionsModel::ActionId& action_id, int tab_id, content::WebContents* web_contents); - bool ExtensionsEnabled(JNIEnv* env); + void ClearExtensionData(JNIEnv* env); jni_zero::ScopedJavaLocalRef HandleKeyDownEvent( JNIEnv* env, @@ -1842,10 +1774,10 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b + @NativeMethods public interface Natives { - ExtensionActionsBridge get(@JniType("Profile*") Profile profile); + boolean extensionsEnabled(@JniType("Profile*") Profile profile); @@ -272,6 +276,8 @@ public class ExtensionActionsBridge { - - boolean extensionsEnabled(long nativeExtensionActionsBridge); + int tabId, + @JniType("content::WebContents*") WebContents webContents); + void clearExtensionData(long nativeExtensionActionsBridge); + @@ -1901,7 +1833,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/android/tab_model/BUILD.gn b/chrome/browser/ui/android/tab_model/BUILD.gn --- a/chrome/browser/ui/android/tab_model/BUILD.gn +++ b/chrome/browser/ui/android/tab_model/BUILD.gn -@@ -65,7 +65,7 @@ source_set("impl") { +@@ -67,7 +67,7 @@ source_set("impl") { "//ui/base:types", ] @@ -1910,7 +1842,7 @@ diff --git a/chrome/browser/ui/android/tab_model/BUILD.gn b/chrome/browser/ui/an deps += [ "//chrome/browser/ui/browser_window", "//chrome/browser/ui/browser_window/internal", -@@ -95,7 +95,7 @@ source_set("test_support") { +@@ -97,7 +97,7 @@ source_set("test_support") { "//chrome/browser/ui/android/tab_model", ] @@ -1952,7 +1884,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model.cc b/chrome/browser/u diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h --- a/chrome/browser/ui/android/tab_model/tab_model.h +++ b/chrome/browser/ui/android/tab_model/tab_model.h -@@ -290,7 +290,7 @@ class TabModel : public TabListInterface { +@@ -292,7 +292,7 @@ class TabModel : public TabListInterface { LocationBarModel* GetLocationBarModel(); @@ -1964,7 +1896,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc --- a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc +++ b/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc -@@ -43,7 +43,7 @@ +@@ -45,7 +45,7 @@ // "chrome/browser/ui/browser_window" is available on desktop Android, but not // other Android builds. @@ -1973,7 +1905,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom #include "chrome/browser/ui/browser_window/internal/android/android_browser_window.h" // nogncheck #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" // nogncheck #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" // nogncheck -@@ -76,7 +76,7 @@ std::vector GetAllTabsFromHandles( +@@ -78,7 +78,7 @@ std::vector GetAllTabsFromHandles( return tabs; } @@ -1982,7 +1914,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom AndroidBrowserWindow* GetAndroidBrowserWindow(SessionID session_id) { for (BrowserWindowInterface* window : GetAllBrowserWindowInterfaces()) { if (window->GetSessionID() == session_id) { -@@ -115,7 +115,7 @@ void TabModelJniBridge::AssociateWithBrowserWindow( +@@ -117,7 +117,7 @@ void TabModelJniBridge::AssociateWithBrowserWindow( long native_android_browser_window) { // BrowserWindowInterface is available on desktop Android, but not other Android // builds. For non-desktop Android, this function should be a no-op. @@ -1991,7 +1923,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom BrowserWindowInterface* android_browser_window = reinterpret_cast(native_android_browser_window); CHECK(android_browser_window != nullptr); -@@ -152,7 +152,7 @@ void TabModelJniBridge::MoveTabToWindowForTesting( +@@ -153,7 +153,7 @@ void TabModelJniBridge::MoveTabToWindowForTesting( TabAndroid* tab, long android_browser_window_ptr, int new_index) { @@ -2000,7 +1932,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom SessionID destination_window_id = reinterpret_cast(android_browser_window_ptr) ->GetSessionID(); -@@ -167,7 +167,7 @@ void TabModelJniBridge::MoveTabGroupToWindowForTesting( +@@ -168,7 +168,7 @@ void TabModelJniBridge::MoveTabGroupToWindowForTesting( const base::Token& group_id, long android_browser_window_ptr, int new_index) { @@ -2009,7 +1941,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom SessionID destination_window_id = reinterpret_cast(android_browser_window_ptr) ->GetSessionID(); -@@ -631,7 +631,7 @@ void TabModelJniBridge::MoveTabGroupToWindow(tab_groups::TabGroupId group_id, +@@ -633,7 +633,7 @@ void TabModelJniBridge::MoveTabGroupToWindow(tab_groups::TabGroupId group_id, ScopedJavaLocalRef TabModelJniBridge::GetActivityForWindow( SessionID window_id) { ScopedJavaLocalRef jactivity; @@ -2033,7 +1965,7 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_test_helper.h b/chrom diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml --- a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml +++ b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml -@@ -59,6 +59,12 @@ found in the LICENSE file. +@@ -65,6 +65,12 @@ found in the LICENSE file. android:layout_width="52dp" style="@style/ToolbarHoverableButton"/> @@ -2082,15 +2014,15 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import android.view.ViewStub; import android.widget.LinearLayout; -@@ -20,6 +21,7 @@ import org.chromium.chrome.browser.tab.Tab; - import org.chromium.chrome.browser.tabmodel.TabCreator; +@@ -22,6 +23,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; +import org.chromium.chrome.browser.ui.extensions.ExtensionUi; import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.ui.base.WindowAndroid; -@@ -51,6 +53,11 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina +@@ -54,6 +56,11 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina extensionToolbarStub.setLayoutResource(R.layout.extension_toolbar_container); LinearLayout container = (LinearLayout) extensionToolbarStub.inflate(); @@ -2102,8 +2034,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mExtensionActionListCoordinator = new ExtensionActionListCoordinator( context, -@@ -66,7 +73,8 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina - themeColorProvider, +@@ -71,7 +78,8 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina + taskSupplier, profileSupplier, currentTabSupplier, - tabCreator); @@ -2115,25 +2047,25 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java -@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.tab.TabLaunchType; - import org.chromium.chrome.browser.tabmodel.TabCreator; +@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.toolbar.MenuBuilderHelper; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; +import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator; import org.chromium.chrome.browser.ui.extensions.R; import org.chromium.chrome.browser.ui.theme.BrandedColorScheme; import org.chromium.components.embedder_support.util.UrlConstants; -@@ -82,7 +83,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { - ThemeColorProvider themeColorProvider, - ObservableSupplier profileSupplier, - ObservableSupplier currentTabSupplier, +@@ -86,7 +87,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { + OneshotSupplier taskSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, - TabCreator tabCreator) { + TabCreator tabCreator, + ExtensionActionListCoordinator extensionActionListCoordinator) { mContext = context; mCurrentTabSupplier = currentTabSupplier; mTabCreator = tabCreator; -@@ -160,7 +162,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { +@@ -165,7 +167,8 @@ public class ExtensionsMenuCoordinator implements Destroyable { mExtensionsMenuButton.setVisibility(visibility); mExtensionsMenuTabSwitcherDivider.setVisibility(visibility); }, @@ -2174,34 +2106,35 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java -@@ -17,6 +17,7 @@ import org.chromium.build.annotations.Nullable; - import org.chromium.chrome.browser.extensions.ContextMenuSource; +@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.extensions.ContextMenuSource; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; +import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator; import org.chromium.chrome.browser.ui.extensions.ExtensionAction; import org.chromium.chrome.browser.ui.extensions.ExtensionActionContextMenuBridge; import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge; -@@ -41,6 +42,7 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -44,6 +45,7 @@ class ExtensionsMenuMediator implements Destroyable { private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; - private final Callback mProfileUpdatedCallback = this::onProfileUpdated; + private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated; private final View mRootView; + private final ExtensionActionListCoordinator mExtensionActionListCoordinator; - @Nullable private Profile mProfile; - -@@ -51,7 +53,9 @@ class ExtensionsMenuMediator implements Destroyable { + public ExtensionsMenuMediator( + Context context, +@@ -53,8 +55,10 @@ class ExtensionsMenuMediator implements Destroyable { ModelList extensionModels, Runnable onUpdateFinishedRunnable, Callback onExtensionsAvailableCallback, - View rootView) { + View rootView, + ExtensionActionListCoordinator extensionActionListCoordinator) { + mTaskSupplier = taskSupplier; + mExtensionActionListCoordinator = extensionActionListCoordinator; mProfileSupplier = profileSupplier; mProfileSupplier.addObserver(mProfileUpdatedCallback); -@@ -169,6 +173,9 @@ class ExtensionsMenuMediator implements Destroyable { +@@ -164,6 +168,9 @@ class ExtensionsMenuMediator implements Destroyable { new PropertyModel.Builder(ExtensionsMenuItemProperties.ALL_KEYS) .with(ExtensionsMenuItemProperties.TITLE, action.getTitle()) .with(ExtensionsMenuItemProperties.ICON, icon) @@ -2235,7 +2168,7 @@ diff --git a/chrome/browser/ui/browser_navigator_params.cc b/chrome/browser/ui/b diff --git a/chrome/browser/ui/browser_navigator_params.h b/chrome/browser/ui/browser_navigator_params.h --- a/chrome/browser/ui/browser_navigator_params.h +++ b/chrome/browser/ui/browser_navigator_params.h -@@ -77,7 +77,7 @@ struct NavigateParams { +@@ -76,7 +76,7 @@ struct NavigateParams { std::unique_ptr contents_to_insert); #endif @@ -2244,7 +2177,7 @@ diff --git a/chrome/browser/ui/browser_navigator_params.h b/chrome/browser/ui/br NavigateParams(BrowserWindowInterface* a_browser, const GURL& a_url, ui::PageTransition a_transition); -@@ -264,7 +264,7 @@ struct NavigateParams { +@@ -263,7 +263,7 @@ struct NavigateParams { }; PathBehavior path_behavior = RESPECT; @@ -2280,7 +2213,7 @@ diff --git a/chrome/browser/ui/browser_window/internal/BUILD.gn b/chrome/browser diff --git a/chrome/browser/ui/prefs/BUILD.gn b/chrome/browser/ui/prefs/BUILD.gn --- a/chrome/browser/ui/prefs/BUILD.gn +++ b/chrome/browser/ui/prefs/BUILD.gn -@@ -63,7 +63,7 @@ source_set("impl") { +@@ -67,7 +67,7 @@ source_set("impl") { } } @@ -2289,7 +2222,7 @@ diff --git a/chrome/browser/ui/prefs/BUILD.gn b/chrome/browser/ui/prefs/BUILD.gn source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] -@@ -81,7 +81,7 @@ if (!is_android || enable_desktop_android_extensions) { +@@ -85,7 +85,7 @@ if (!is_android || enable_desktop_android_extensions) { "//third_party/blink/public/common:headers", ] @@ -2301,16 +2234,16 @@ diff --git a/chrome/browser/ui/prefs/BUILD.gn b/chrome/browser/ui/prefs/BUILD.gn diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/prefs/prefs_tab_helper.cc --- a/chrome/browser/ui/prefs/prefs_tab_helper.cc +++ b/chrome/browser/ui/prefs/prefs_tab_helper.cc -@@ -64,7 +64,7 @@ +@@ -65,7 +65,7 @@ #endif #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || \ -- BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) -+ BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) +- BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) ++ BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE) // If a font name in prefs default values starts with a comma, consider it's a // comma-separated font list and resolve it to the first available font. #define PREFS_FONT_LIST 1 -@@ -78,7 +78,7 @@ using content::WebContents; +@@ -79,7 +79,7 @@ using content::WebContents; namespace { @@ -2319,7 +2252,7 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre // Registers a preference under the path |pref_name| for each script used for // per-script font prefs. // For example, for WEBKIT_WEBPREFS_FONTS_SERIF ("fonts.serif"): -@@ -151,7 +151,7 @@ constexpr auto kFontDefaults = std::to_array({ +@@ -152,7 +152,7 @@ constexpr auto kFontDefaults = std::to_array({ {prefs::kWebKitFantasyFontFamily, IDS_FANTASY_FONT_FAMILY}, {prefs::kWebKitMathFontFamily, IDS_MATH_FONT_FAMILY}, #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ @@ -2328,7 +2261,7 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre {prefs::kWebKitStandardFontFamilyJapanese, IDS_STANDARD_FONT_FAMILY_JAPANESE}, {prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE}, -@@ -290,7 +290,7 @@ void OverrideFontFamily(blink::web_pref::WebPreferences* prefs, +@@ -291,7 +291,7 @@ void OverrideFontFamily(blink::web_pref::WebPreferences* prefs, (*map)[script] = base::UTF8ToUTF16(pref_value); } @@ -2337,7 +2270,7 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre void RegisterLocalizedFontPref(user_prefs::PrefRegistrySyncable* registry, const char* path, int default_message_id) { -@@ -446,7 +446,7 @@ void PrefsTabHelper::RegisterProfilePrefs( +@@ -452,7 +452,7 @@ void PrefsTabHelper::RegisterProfilePrefs( } // Register font prefs. This is only configurable on desktop Chrome. @@ -2346,18 +2279,6 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre RegisterFontFamilyPrefs(registry, fonts_with_defaults); registry->RegisterIntegerPref(prefs::kWebKitDefaultFontSize, 16); -diff --git a/chrome/browser/ui/tab_contents/BUILD.gn b/chrome/browser/ui/tab_contents/BUILD.gn ---- a/chrome/browser/ui/tab_contents/BUILD.gn -+++ b/chrome/browser/ui/tab_contents/BUILD.gn -@@ -88,7 +88,7 @@ source_set("impl") { - "//chrome/browser/ui/views/side_panel", - ] - } -- if (!is_android || is_desktop_android) { -+ if (!is_android || is_desktop_android_cromite) { - deps += [ "//chrome/browser/ui/browser_window" ] - } - if (enable_extensions) { diff --git a/chrome/browser/ui/tabs/tab_list_interface.h b/chrome/browser/ui/tabs/tab_list_interface.h --- a/chrome/browser/ui/tabs/tab_list_interface.h +++ b/chrome/browser/ui/tabs/tab_list_interface.h @@ -2394,7 +2315,7 @@ diff --git a/chrome/browser/ui/webid/BUILD.gn b/chrome/browser/ui/webid/BUILD.gn diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_web_ui_configs.cc --- a/chrome/browser/ui/webui/chrome_web_ui_configs.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_configs.cc -@@ -180,7 +180,7 @@ +@@ -181,7 +181,7 @@ // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2403,7 +2324,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #include "chrome/browser/ui/webui/discards/discards_ui.h" #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID) -@@ -408,7 +408,7 @@ void RegisterChromeWebUIConfigs() { +@@ -414,7 +414,7 @@ void RegisterChromeWebUIConfigs() { // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2466,7 +2387,7 @@ diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni -@@ -509,7 +509,7 @@ template("chrome_extra_paks") { +@@ -513,7 +513,7 @@ template("chrome_extra_paks") { deps += [ "//chrome/browser/resources/app_settings:resources" ] } @@ -2475,22 +2396,10 @@ diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni sources += [ "$root_gen_dir/chrome/discards_resources.pak" ] deps += [ "//chrome/browser/resources/discards:resources" ] } -diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn ---- a/chrome/common/BUILD.gn -+++ b/chrome/common/BUILD.gn -@@ -28,7 +28,7 @@ assert(enable_supervised_users) - assert(!is_fuchsia, "Fuchsia shouldn't use anything in //chrome") - - declare_args() { -- enable_android_site_isolation = is_desktop_android -+ enable_android_site_isolation = is_desktop_android_cromite - } - - fuzzer_test("ini_parser_fuzzer") { diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc -@@ -784,7 +784,7 @@ const char kMarketUrlForTesting[] = "market-url-for-testing"; +@@ -802,7 +802,7 @@ const char kMarketUrlForTesting[] = "market-url-for-testing"; const char kRequestDesktopSites[] = "request-desktop-sites"; #endif // BUILDFLAG(IS_ANDROID) @@ -2502,7 +2411,7 @@ diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h -@@ -231,7 +231,7 @@ extern const char kMarketUrlForTesting[]; +@@ -238,7 +238,7 @@ extern const char kMarketUrlForTesting[]; extern const char kRequestDesktopSites[]; #endif // BUILDFLAG(IS_ANDROID) @@ -2514,7 +2423,7 @@ diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extensions/api/api_sources.gni --- a/chrome/common/extensions/api/api_sources.gni +++ b/chrome/common/extensions/api/api_sources.gni -@@ -64,6 +64,13 @@ uncompiled_sources_ = [ +@@ -66,6 +66,13 @@ uncompiled_sources_ = [ "top_sites.json", ] @@ -2531,7 +2440,7 @@ diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extens diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc -@@ -204,7 +204,7 @@ base::span ChromeURLHosts() { +@@ -207,7 +207,7 @@ base::span ChromeURLHosts() { kChromeUIInternetDetailDialogHost, #endif #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2543,7 +2452,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h -@@ -565,7 +565,7 @@ inline constexpr char kChromeUIOsUrlAppURL[] = "chrome://internal/"; +@@ -566,7 +566,7 @@ inline constexpr char kChromeUIOsUrlAppURL[] = "chrome://internal/"; #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -2586,7 +2495,7 @@ diff --git a/chrome/renderer/sandbox_status_extension_android.h b/chrome/rendere diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -367,7 +367,7 @@ static_library("test_support") { +@@ -364,7 +364,7 @@ static_library("test_support") { ] } @@ -2595,7 +2504,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn public_deps += [ "//extensions/browser:test_support", "//extensions/common:test_support", -@@ -484,7 +484,7 @@ static_library("test_support") { +@@ -477,7 +477,7 @@ static_library("test_support") { # TODO(https://crbug.com/356905053): Continue pulling more common test # support pieces into here and eventually merge this with the # `enable_extensions` block above. @@ -2604,7 +2513,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn deps += [ "//chrome/renderer/extensions" ] public_deps += [ -@@ -1527,7 +1527,7 @@ source_set("platform_browser_tests") { +@@ -1535,7 +1535,7 @@ source_set("platform_browser_tests") { sources += [ "../browser/enterprise/remote_commands/user_remote_commands_service_browsertest.cc" ] } @@ -2613,7 +2522,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn deps += [ "//chrome/browser/ui/prefs:browser_tests" ] } -@@ -1777,7 +1777,7 @@ source_set("platform_browser_tests") { +@@ -1788,7 +1788,7 @@ source_set("platform_browser_tests") { "//chrome/browser/ui/browser_window", ] } @@ -2622,7 +2531,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn sources += [ "../browser/devtools/global_confirm_info_bar_browsertest.cc" ] } -@@ -2065,7 +2065,7 @@ if (is_android) { +@@ -2074,7 +2074,7 @@ if (is_android) { extra_args = [] @@ -2631,7 +2540,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn sources += [ "../browser/ui/android/browser_navigator_android_browsertest.cc" ] deps += [ -@@ -2161,7 +2161,7 @@ if (is_android) { +@@ -2175,7 +2175,7 @@ if (is_android) { ] } @@ -2640,8 +2549,8 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn sources += [ # These API tests can't be part of platform_browser_tests because they # run in interactive_ui_tests on Win/Mac/Linux. -@@ -8041,7 +8041,7 @@ test("unit_tests") { - deps += [ "//chrome/browser/android/extensions:android" ] +@@ -8063,7 +8063,7 @@ test("unit_tests") { + deps += [ "//chrome/browser/ui/browser_window/internal:unit_tests" ] } - if (is_desktop_android) { @@ -2652,16 +2561,16 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn diff --git a/chrome/version.gni b/chrome/version.gni --- a/chrome/version.gni +++ b/chrome/version.gni -@@ -323,7 +323,7 @@ if (is_android) { - # in the android_chrome_versions.txt above - if (_use_stable_package_name_for_trichrome) { - chrome_version_code = chrome_beta_version_code -- } else if (is_desktop_android) { -+ } else if (is_desktop_android_false) { - chrome_version_code = chrome_desktop_version_code - } - -@@ -355,7 +355,7 @@ if (is_android) { +@@ -56,7 +56,7 @@ if (target_os == "android") { + # Generate hybrid configurations for target_cpu's that can run in hybrid configurations. + # i.e. "riscv64" does not show up in this list, as it's a 64-bit-only target_cpu. + if (target_cpu == "arm64" || target_cpu == "x64") { +- if (is_desktop_android) { ++ if (is_desktop_android_false) { + _version_dictionary_template += + "chrome_desktop_version_code = \"@CHROME_DESKTOP_VERSION_CODE@\" " + _version_dictionary_template += +@@ -383,7 +383,7 @@ if (is_android) { } else { true_true_true_true = trichrome_64_32_version_code } @@ -2689,7 +2598,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java -@@ -429,7 +429,7 @@ public class ContentView extends FrameLayout +@@ -449,7 +449,7 @@ public class ContentView extends FrameLayout } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && Build.VERSION.SDK_INT <= 38 @@ -2813,7 +2722,7 @@ diff --git a/components/policy/core/browser/configuration_policy_handler_list.cc diff --git a/components/policy/core/common/cloud/cloud_policy_constants.cc b/components/policy/core/common/cloud/cloud_policy_constants.cc --- a/components/policy/core/common/cloud/cloud_policy_constants.cc +++ b/components/policy/core/common/cloud/cloud_policy_constants.cc -@@ -132,7 +132,7 @@ const char* GetChromeUserPolicyType() { +@@ -142,7 +142,7 @@ const char* GetChromeUserPolicyType() { #if BUILDFLAG(IS_CHROMEOS) return "google/chromeos/user"; #elif BUILDFLAG(IS_ANDROID) @@ -2832,8 +2741,8 @@ diff --git a/components/policy/core/common/features.cc b/components/policy/core/ -#if BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE) BASE_FEATURE(kFuturePoliciesOnDesktopAndroid, - "FuturePoliciesOnDesktopAndroid", base::FEATURE_DISABLED_BY_DEFAULT); + #endif // BUILDFLAG(IS_DESKTOP_ANDROID) diff --git a/components/variations/service/variations_service_client.cc b/components/variations/service/variations_service_client.cc --- a/components/variations/service/variations_service_client.cc +++ b/components/variations/service/variations_service_client.cc @@ -2966,7 +2875,7 @@ diff --git a/content/browser/renderer_host/media/video_capture_manager.h b/conte 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 -@@ -182,7 +182,7 @@ bool IsTooltipsEnabled() { +@@ -183,7 +183,7 @@ bool IsTooltipsEnabled() { // Only show on desktop devices up to B due to tooltips bug b/445244223. if (base::android::android_info::sdk_int() <= base::android::android_info::SDK_VERSION_BAKLAVA) { @@ -2995,7 +2904,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Conten diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -577,7 +577,7 @@ BASE_FEATURE(kLoadingPredictorLimitPreconnectSocketCount, +@@ -622,7 +622,7 @@ BASE_FEATURE(kLoadingPredictorLimitPreconnectSocketCount, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kLogJsConsoleMessages, @@ -3061,7 +2970,7 @@ diff --git a/cromite_flags/chrome/browser/about_flags_cc/Webstore-protection.inc diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn -@@ -9,7 +9,7 @@ import("//pdf/features.gni") +@@ -10,7 +10,7 @@ import("//pdf/features.gni") import("//rlz/buildflags/buildflags.gni") import("//testing/libfuzzer/fuzzer_test.gni") @@ -3070,7 +2979,7 @@ diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn import("//build/config/android/rules.gni") } -@@ -1094,7 +1094,7 @@ source_set("unit_tests") { +@@ -1161,7 +1161,7 @@ source_set("unit_tests") { configs += [ "//build/config/compiler:no_exit_time_destructors" ] } @@ -3228,7 +3137,7 @@ diff --git a/extensions/common/api/schema.gni b/extensions/common/api/schema.gni diff --git a/extensions/common/command.cc b/extensions/common/command.cc --- a/extensions/common/command.cc +++ b/extensions/common/command.cc -@@ -119,7 +119,7 @@ std::string Command::CommandPlatform() { +@@ -118,7 +118,7 @@ std::string Command::CommandPlatform() { return ui::kKeybindingPlatformChromeOs; #elif BUILDFLAG(IS_LINUX) return ui::kKeybindingPlatformLinux; @@ -3240,7 +3149,7 @@ diff --git a/extensions/common/command.cc b/extensions/common/command.cc diff --git a/extensions/common/extension_features.cc b/extensions/common/extension_features.cc --- a/extensions/common/extension_features.cc +++ b/extensions/common/extension_features.cc -@@ -56,7 +56,7 @@ BASE_FEATURE(kSkipResetServiceWorkerURLLoaderFactories, +@@ -58,7 +58,7 @@ BASE_FEATURE(kSkipResetServiceWorkerURLLoaderFactories, BASE_FEATURE(kEnableWebHidInWebView, base::FEATURE_ENABLED_BY_DEFAULT); @@ -3249,7 +3158,7 @@ diff --git a/extensions/common/extension_features.cc b/extensions/common/extensi // Disabled by default because on first-run we don't have a Finch seed yet, so // we want to default to the safe behavior of no extensions. BASE_FEATURE(kEnableExtensionsForCorpDesktopAndroid, -@@ -150,7 +150,7 @@ BASE_FEATURE(kDisableExtensionsOnChromeUrlsSwitch, +@@ -151,7 +151,7 @@ BASE_FEATURE(kDisableExtensionsOnChromeUrlsSwitch, // TODO (crbug.com/426554244): Determine if this switch should be // removed for desktop-android builds as well. #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && !BUILDFLAG(IS_CHROMEOS) && \ @@ -3258,7 +3167,7 @@ diff --git a/extensions/common/extension_features.cc b/extensions/common/extensi base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT -@@ -189,4 +189,10 @@ CROMITE_FEATURE(kEnableExtensionAutoupdate, +@@ -190,4 +190,10 @@ CROMITE_FEATURE(kEnableExtensionAutoupdate, CROMITE_FEATURE(kEnableExtensionManagementToChromeStore, "EnableExtensionToChromeStore", base::FEATURE_DISABLED_BY_DEFAULT); @@ -3281,7 +3190,7 @@ diff --git a/extensions/common/extension_features.h b/extensions/common/extensio // If enabled, extensions will be enabled for @google.com and @managedchrome.com // users on desktop Android. Otherwise they will be blocked. BASE_DECLARE_FEATURE(kEnableExtensionsForCorpDesktopAndroid); -@@ -310,6 +310,10 @@ BASE_DECLARE_FEATURE(kEnableExtensionAutoupdate); +@@ -317,6 +317,10 @@ BASE_DECLARE_FEATURE(kEnableExtensionAutoupdate); // Allows the installation of new extensions. // If active, exposes all features to the chrome web store like chromium. BASE_DECLARE_FEATURE(kEnableExtensionManagementToChromeStore); @@ -3319,7 +3228,7 @@ diff --git a/extensions/renderer/bindings/api_binding_util.cc b/extensions/rende diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc --- a/gpu/config/gpu_finch_features.cc +++ b/gpu/config/gpu_finch_features.cc -@@ -572,7 +572,7 @@ bool IsSkiaGraphiteSupportedByDevice(const base::CommandLine* command_line) { +@@ -587,7 +587,7 @@ bool IsSkiaGraphiteSupportedByDevice(const base::CommandLine* command_line) { // Desktop Android isn't ready to pick up the fieldtrial_testing_config.json // change that enables graphite. However, it's the same platform as regular // Android and does. Skip enabling the feature there for now. @@ -3328,7 +3237,7 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc return false; } -@@ -685,7 +685,7 @@ bool ShouldEnableDrDc() { +@@ -700,7 +700,7 @@ bool ShouldEnableDrDc() { // Chrome on Android desktop aims to be Vulkan-only, which can result // in crashes when enabled together with DrDc. Re-enable DrDc after // crbug.com/380295059 is fixed if it is shown beneficial on desktop. @@ -3366,7 +3275,7 @@ diff --git a/skia/features.gni b/skia/features.gni diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -2386,7 +2386,7 @@ BASE_FEATURE(kStopInBackground, +@@ -2340,7 +2340,7 @@ BASE_FEATURE(kStopInBackground, // b/248036988 - Disable this for Chromecast on Android builds to prevent apps // that play audio in the background from stopping. #if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CAST_ANDROID) && \ @@ -3378,24 +3287,24 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc --- a/third_party/blink/renderer/modules/modules_initializer.cc +++ b/third_party/blink/renderer/modules/modules_initializer.cc -@@ -121,7 +121,7 @@ +@@ -119,7 +119,7 @@ + namespace blink { - namespace { -#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) class SuspendCaptureObserver : public GarbageCollected, - public Supplement, -@@ -369,7 +369,7 @@ void ModulesInitializer::ProvideModulesToPage( + public PageVisibilityObserver { +@@ -365,7 +365,7 @@ void ModulesInitializer::ProvideModulesToPage( const SessionStorageNamespaceId& namespace_id) const { StorageNamespace::ProvideSessionStorageNamespaceTo(page, namespace_id); AudioGraphTracer::ProvideAudioGraphTracerTo(page); -#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) +#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) - page.ProvideSupplement(MakeGarbageCollected(page)); + page.SetSuspendCaptureObserver( + MakeGarbageCollected(page)); #endif // BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) - } diff --git a/tools/grit/grit_args.gni b/tools/grit/grit_args.gni --- a/tools/grit/grit_args.gni +++ b/tools/grit/grit_args.gni @@ -3443,31 +3352,31 @@ diff --git a/ui/android/java/src/org/chromium/ui/widget/PopupSpecCalculator.java diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java --- a/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java -@@ -44,7 +44,7 @@ public class UiDisableIfSkipCheck extends DisableIfSkipCheck { - } - - private boolean isDesktop() { -- return DeviceInfo.isDesktop(); -+ return DeviceInfo.isDesktopFalse(); - } - - private boolean isTablet() { +@@ -38,7 +38,7 @@ public class UiDisableIfSkipCheck extends DisableIfSkipCheck { + case DeviceFormFactor.TABLET_OR_DESKTOP: + return isTablet(); + case DeviceFormFactor.PHONE_OR_TABLET: +- return !DeviceInfo.isDesktop(); ++ return !DeviceInfo.isDesktopFalse(); + default: + return false; + } diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java --- a/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java -@@ -24,7 +24,7 @@ public final class UiRestriction { - - private static boolean isDesktop() { - if (sIsDesktop == null) { -- sIsDesktop = DeviceInfo.isDesktop(); -+ sIsDesktop = DeviceInfo.isDesktopFalse(); - } - return sIsDesktop; +@@ -31,7 +31,7 @@ public final class UiRestriction { + if (sIsDesktop == null) { + // See the following link for implementation details: + // https://source.chromium.org/chromium/chromium/src/+/main:base/android/java/src/org/chromium/base/DeviceInfo.java;l=285-287;drc=61d3d9feb38d8045309dd9e237f5305de987523d +- sIsDesktop = DeviceInfo.isDesktop(); ++ sIsDesktop = DeviceInfo.isDesktopFalse(); + } + return sIsDesktop; } diff --git a/ui/base/accelerators/command.cc b/ui/base/accelerators/command.cc --- a/ui/base/accelerators/command.cc +++ b/ui/base/accelerators/command.cc -@@ -87,7 +87,7 @@ std::string Command::CommandPlatform() { +@@ -86,7 +86,7 @@ std::string Command::CommandPlatform() { // TODO(crbug.com/40220501): Change this once we decide what string should be // used for Fuchsia. return ui::kKeybindingPlatformLinux; @@ -3500,27 +3409,6 @@ diff --git a/ui/gl/features.gni b/ui/gl/features.gni # Should Dawn test binaries (unittests, end2end_tests, perf_tests) be built? # Independent of use_dawn, which controls whether Dawn is used in Chromium. -diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc ---- a/ui/gl/gl_switches.cc -+++ b/ui/gl/gl_switches.cc -@@ -269,7 +269,7 @@ BASE_FEATURE(kDefaultANGLEMetal, base::FEATURE_ENABLED_BY_DEFAULT); - - // Default to using ANGLE's Vulkan backend. - BASE_FEATURE(kDefaultANGLEVulkan, --#if BUILDFLAG(IS_DESKTOP_ANDROID) -+#if false //BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) - base::FEATURE_ENABLED_BY_DEFAULT); - #else - base::FEATURE_DISABLED_BY_DEFAULT); -@@ -282,7 +282,7 @@ BASE_FEATURE(kTrackCurrentShaders, base::FEATURE_DISABLED_BY_DEFAULT); - - // Enable sharing Vulkan device queue with ANGLE's Vulkan backend. - BASE_FEATURE(kVulkanFromANGLE, --#if BUILDFLAG(IS_DESKTOP_ANDROID) -+#if false //BUILDFLAG(IS_DESKTOP_ANDROID_FALSE) - base::FEATURE_ENABLED_BY_DEFAULT); - #else - base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd --- a/ui/resources/ui_resources.grd +++ b/ui/resources/ui_resources.grd diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index bc2a2bc1..53384cb2 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -56,10 +56,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/toolbar/ToolbarManager.java | 37 ++++- .../chrome/browser/ui/BottomContainer.java | 18 +++ .../ui/system/StatusBarColorController.java | 8 + - .../android/compositor/layer/toolbar_layer.cc | 10 +- + .../android/compositor/layer/toolbar_layer.cc | 5 + .../scene_layer/tab_strip_scene_layer.cc | 16 +- .../BottomControlsStacker.java | 2 +- - .../BrowserControlsMarginSupplier.java | 5 + + .../BrowserControlsMarginAdapter.java | 5 + .../BrowserControlsStateProvider.java | 6 + .../browser/feed/FeedListContentManager.java | 6 +- .../flags/android/chrome_feature_list.cc | 3 + @@ -68,10 +68,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../chrome/browser/hub/HubCoordinator.java | 9 ++ .../chrome/browser/hub/HubManagerImpl.java | 16 +- .../browser/hub/ReversedLinearLayout.java | 42 +++++ - .../android/res/layout/hub_layout.xml | 24 ++- + .../android/res/layout/hub_layout.xml | 9 +- .../android/res/layout/hub_toolbar_layout.xml | 4 +- chrome/browser/prefs/browser_prefs.cc | 2 +- - .../chrome/browser/ui/appmenu/AppMenu.java | 39 ++++- + .../chrome/browser/ui/appmenu/AppMenu.java | 38 ++++- .../ui/appmenu/AppMenuHandlerImpl.java | 10 ++ .../EdgeToEdgeControllerImpl.java | 1 + .../ui/edge_to_edge/EdgeToEdgeUtils.java | 2 + @@ -104,7 +104,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ .../renderer/core/frame/viewport_data.cc | 1 + - 91 files changed, 1074 insertions(+), 95 deletions(-) + 91 files changed, 1060 insertions(+), 88 deletions(-) create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc @@ -164,7 +164,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -5279,6 +5279,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -5292,6 +5292,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -195,7 +195,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser ObservableSupplierImpl tabStripTokenSupplier = new ObservableSupplierImpl<>(); var currentTabGroupModelFilterSupplier = -@@ -291,7 +293,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -293,7 +295,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T sharedImageTilesConfigBuilder, mThemeColorProvider, onSnapshotTokenChange, @@ -312,7 +312,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser private void setupToolbarButtons() { View.OnClickListener showGroupDialogOnClickListener = view -> { -@@ -587,6 +635,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -585,6 +633,7 @@ public class TabGroupUiMediator implements BackPressHandler { @SuppressWarnings("NullAway") public void destroy() { @@ -432,7 +432,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import android.graphics.Rect; import android.util.Size; import android.view.InputDevice; -@@ -74,6 +80,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; +@@ -75,6 +81,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.recyclerview.widget.ItemTouchHelper2; import org.chromium.ui.widget.ViewLookupCachingFrameLayout; @@ -441,7 +441,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -162,6 +170,124 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -163,6 +171,124 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO private int mAwaitingTabId = Tab.INVALID_TAB_ID; private @TabActionState int mTabActionState; @@ -566,7 +566,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Construct a coordinator for UI that shows a list of tabs. * -@@ -417,6 +543,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -423,6 +549,12 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO checkAwaitingLayout(); } }; @@ -579,7 +579,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -436,6 +568,17 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -442,6 +574,17 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO } }; mRecyclerView.setLayoutManager(layoutManager); @@ -597,16 +597,16 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -456,7 +599,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO - assumeNonNull(mTabListEmptyCoordinator); +@@ -461,7 +604,7 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO + if (emptyViewParent != null) { mTabListEmptyCoordinator = new TabListEmptyCoordinator( -- parentView, mModelList, this::runOnItemAnimatorFinished); -+ parentView, mModelList, this::runOnItemAnimatorFinished, mBrowserControlsStateProvider); +- emptyViewParent, mModelList, this::runOnItemAnimatorFinished); ++ emptyViewParent, mModelList, this::runOnItemAnimatorFinished, mBrowserControlsStateProvider); } mTabListHighlighter = new TabListHighlighter(mModelList); mTabListMergeAnimationManager = new TabListMergeAnimationManager(mRecyclerView); -@@ -793,6 +936,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO +@@ -798,6 +941,9 @@ public class TabListCoordinator implements PriceWelcomeMessageProvider, DestroyO void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); @@ -676,7 +676,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 -@@ -45,6 +45,7 @@ import org.chromium.build.BuildConfig; +@@ -44,6 +44,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; @@ -684,7 +684,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import org.chromium.chrome.browser.hub.DisplayButtonData; import org.chromium.chrome.browser.hub.FadeHubLayoutAnimationFactory; import org.chromium.chrome.browser.hub.FullButtonData; -@@ -177,6 +178,7 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc +@@ -174,6 +175,7 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc private @Nullable PaneHubController mPaneHubController; private @Nullable Long mWaitForTabStateInitializedStartTimeMs; private final @Nullable ObservableSupplier mXrSpaceModeObservableSupplier; @@ -692,7 +692,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * @param context The activity context. -@@ -493,6 +495,13 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc +@@ -490,6 +492,13 @@ public abstract class TabSwitcherPaneBase implements Pane, TabSwitcher, TabSwitc Log.d(TAG, "Geometry not ready using fallback animation."); useFallbackAnimation = true; } @@ -709,7 +709,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java -@@ -19,6 +19,7 @@ import android.os.Looper; +@@ -21,6 +21,7 @@ import android.os.Looper; import android.os.SystemClock; import android.view.Gravity; import android.view.LayoutInflater; @@ -717,7 +717,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; -@@ -697,6 +698,9 @@ public class FeedSurfaceCoordinator +@@ -763,6 +764,9 @@ public class FeedSurfaceCoordinator ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMarginStart(margin); layoutParams.setMarginEnd(margin); @@ -754,7 +754,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1077,7 +1077,8 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -1074,7 +1074,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt mRootUiCoordinator.getDataSharingTabManager(), mRootUiCoordinator.getBottomSheetController(), mRootUiCoordinator.getShareDelegateSupplier(), @@ -985,7 +985,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.ArrayList; import java.util.List; -@@ -525,7 +527,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -527,7 +529,11 @@ public class ToolbarSwipeLayout extends Layout { mLeftToolbarOverlay.setXOffset(leftX * dpToPx); } mLeftTab.setX(leftX); @@ -998,7 +998,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo needUpdate = updateSnap(dt, mLeftTab) || needUpdate; } else if (mLeftToolbarOverlay != null) { mLeftToolbarOverlay.setManualVisibility(false); -@@ -538,7 +544,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -540,7 +546,11 @@ public class ToolbarSwipeLayout extends Layout { mRightToolbarOverlay.setXOffset(rightX * dpToPx); } mRightTab.setX(rightX); @@ -1026,7 +1026,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -112,6 +112,8 @@ import org.chromium.ui.interpolators.Interpolators; +@@ -116,6 +116,8 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; @@ -1035,7 +1035,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.util.ArrayList; import java.util.List; -@@ -269,12 +271,16 @@ public class StripLayoutHelperManager +@@ -276,12 +278,16 @@ public class StripLayoutHelperManager // Drag-Drop private @Nullable TabStripDragHandler mTabStripDragHandler; @@ -1052,7 +1052,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null && mModelSelectorButton.onDown(x, y, buttons)) { return; } -@@ -299,6 +305,7 @@ public class StripLayoutHelperManager +@@ -306,6 +312,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1060,7 +1060,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null) { mModelSelectorButton.drag(x, y); } -@@ -310,6 +317,7 @@ public class StripLayoutHelperManager +@@ -317,6 +324,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1068,7 +1068,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); -@@ -323,6 +331,7 @@ public class StripLayoutHelperManager +@@ -330,6 +338,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1076,7 +1076,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().fling(time(), velocityX); } -@@ -331,6 +340,7 @@ public class StripLayoutHelperManager +@@ -338,6 +347,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1084,7 +1084,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(x, y); } -@@ -470,7 +480,8 @@ public class StripLayoutHelperManager +@@ -477,7 +487,8 @@ public class StripLayoutHelperManager DataSharingTabManager dataSharingTabManager, BottomSheetController bottomSheetController, Supplier shareDelegateSupplier, @@ -1094,7 +1094,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mContext = context; Resources res = context.getResources(); mManagerHost = managerHost; -@@ -590,6 +601,8 @@ public class StripLayoutHelperManager +@@ -597,6 +608,8 @@ public class StripLayoutHelperManager multiInstanceManager, shareDelegateSupplier, TabGroupListBottomSheetCoordinator::new); @@ -1103,8 +1103,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over tabHoverCardViewStub.setOnInflateListener( (viewStub, view) -> { -@@ -856,6 +869,10 @@ public class StripLayoutHelperManager - yOffset = 0; +@@ -861,6 +874,10 @@ public class StripLayoutHelperManager + getStripTransitionScrimColor(), mStripTransitionScrimOpacity); } + int topControlsHeight = 0; @@ -1114,7 +1114,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mTabStripTreeProvider.pushAndUpdateStrip( this, mLayerTitleCacheSupplier.get(), -@@ -869,7 +886,9 @@ public class StripLayoutHelperManager +@@ -874,7 +891,9 @@ public class StripLayoutHelperManager mStripTransitionScrimOpacity, getActiveStripLayoutHelper().getLeftPaddingToDraw(), getActiveStripLayoutHelper().getRightPaddingToDraw(), @@ -1122,10 +1122,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over + mTopPadding, + viewport.height(), + topControlsHeight); - return mTabStripTreeProvider; } -@@ -935,11 +954,21 @@ public class StripLayoutHelperManager + private float getVisibleHeightDp(float topControlOffsetDp) { +@@ -976,11 +995,21 @@ public class StripLayoutHelperManager mRightPadding, mTopPadding); @@ -1276,7 +1276,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 { -@@ -618,6 +620,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -581,6 +583,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon } } @@ -1291,7 +1291,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow @Override public int getTopControlsMinHeight() { return mTopControlsMinHeight; -@@ -719,6 +729,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -682,6 +692,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon @Override public float getTopVisibleContentOffset() { @@ -1342,19 +1342,19 @@ 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 -@@ -354,7 +354,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter - Resources resources, BrowserControlsStateProvider provider) { - int scrimVerticalMargin = - resources.getDimensionPixelSize(R.dimen.tab_modal_scrim_vertical_margin); -- return provider.getTopControlsHeight() - scrimVerticalMargin; -+ return provider.getTopControlsHeightRealOffset() - scrimVerticalMargin; +@@ -348,7 +348,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter + * @return The container top margin. + */ + public static int getContainerTopMargin(BrowserControlsStateProvider provider) { +- return provider.getTopControlsHeight(); ++ return provider.getTopControlsHeightRealOffset(); } /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -129,6 +129,7 @@ import org.chromium.content_public.browser.NavigationController; +@@ -132,6 +132,7 @@ import org.chromium.content_public.browser.NavigationController; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1362,7 +1362,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; -@@ -873,11 +874,16 @@ public class NewTabPage +@@ -916,11 +917,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1381,7 +1381,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -893,9 +899,7 @@ public class NewTabPage +@@ -936,9 +942,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1548,7 +1548,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -207,6 +207,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -189,6 +189,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } @@ -1589,18 +1589,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java -@@ -18,6 +18,7 @@ import org.chromium.chrome.browser.layouts.components.VirtualView; +@@ -15,6 +15,7 @@ import org.chromium.chrome.browser.layouts.SceneOverlay; import org.chromium.chrome.browser.layouts.scene_layer.SceneLayer; import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; import org.chromium.ui.resources.ResourceManager; +import org.chromium.chrome.browser.flags.ChromeFeatureList; - import java.util.List; - -@@ -80,7 +81,10 @@ class StatusIndicatorSceneLayer extends SceneOverlayLayer implements SceneOverla + /** + * A composited view that is positioned below the status bar and is persistent. Typically used to +@@ -75,7 +76,10 @@ class StatusIndicatorSceneLayer extends SceneOverlayLayer implements SceneOverla @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { - final int offset = mBrowserControlsStateProvider.getTopControlsMinHeightOffset(); + int offset = mBrowserControlsStateProvider.getTopControlsMinHeightOffset(); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -1612,7 +1612,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -232,6 +232,9 @@ import org.chromium.url.GURL; +@@ -235,6 +235,9 @@ import org.chromium.url.GURL; import java.util.List; import java.util.function.Supplier; @@ -1622,7 +1622,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -892,6 +895,17 @@ public class ToolbarManager +@@ -904,6 +907,17 @@ public class ToolbarManager /* matchTrustedCdnUrl= */ mIsCustomTab); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1640,7 +1640,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1568,6 +1582,7 @@ public class ToolbarManager +@@ -1623,6 +1637,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1648,7 +1648,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1581,6 +1596,7 @@ public class ToolbarManager +@@ -1636,6 +1651,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1656,7 +1656,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -2206,9 +2222,21 @@ public class ToolbarManager +@@ -2264,9 +2280,21 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarViewRectProvider(); } @@ -1679,7 +1679,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar assert mTabGroupUiOneshotSupplier == null; assert mUndoBarThrottle != null; assert mLayoutManager != null; -@@ -2226,7 +2254,7 @@ public class ToolbarManager +@@ -2284,7 +2312,7 @@ public class ToolbarManager mActivityTabProvider, mTabModelSelector, mActivity, @@ -1688,7 +1688,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsSizer, mScrimManager, mOmniboxFocusStateSupplier, -@@ -2253,7 +2281,7 @@ public class ToolbarManager +@@ -2311,7 +2339,7 @@ public class ToolbarManager mControlsVisibilityDelegate, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1697,7 +1697,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -2261,7 +2289,8 @@ public class ToolbarManager +@@ -2319,7 +2347,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1750,15 +1750,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContai diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java -@@ -8,6 +8,7 @@ import android.content.Context; - import android.graphics.Color; +@@ -12,6 +12,7 @@ import android.graphics.Color; + import android.os.Build; import android.view.View; import android.view.Window; +import android.os.Build; import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; -@@ -20,6 +21,7 @@ import org.chromium.build.annotations.NullMarked; +@@ -24,6 +25,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -1766,19 +1766,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu import org.chromium.chrome.browser.layouts.LayoutManager; import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; -@@ -537,6 +539,12 @@ public class StatusBarColorController - UiUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); +@@ -586,6 +588,12 @@ public class StatusBarColorController UiUtils.setStatusBarColor(window, color); } + + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled() && + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + UiUtils.setNavigationBarIconColor(window.getDecorView().getRootView(), + needsDarkStatusBarIcons); + window.setNavigationBarColor(color); + } - } - - /** + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + var taskDescription = + new ActivityManager.TaskDescription.Builder().setStatusBarColor(color).build(); diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/browser/android/compositor/layer/toolbar_layer.cc --- a/chrome/browser/android/compositor/layer/toolbar_layer.cc +++ b/chrome/browser/android/compositor/layer/toolbar_layer.cc @@ -1790,22 +1790,17 @@ 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" -@@ -118,8 +119,13 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, - debug_layer_->RemoveFromParent(); +@@ -134,6 +135,10 @@ void ToolbarLayer::PushResource(int toolbar_resource_id, + y_offset = legacy_content_offset - layer_->bounds().height(); + } - // Position the toolbar at the bottom of the space available for top controls. -- layer_->SetPosition( -- gfx::PointF(x_offset, content_offset - layer_->bounds().height())); + if (base::FeatureList::IsEnabled(::features::kMoveTopToolbarToBottom)) { -+ layer_->SetPosition( -+ gfx::PointF(x_offset, content_offset + layer_->bounds().height())); -+ } else { -+ layer_->SetPosition( -+ gfx::PointF(x_offset, content_offset - layer_->bounds().height())); ++ y_offset = legacy_content_offset + layer_->bounds().height(); + } ++ + layer_->SetPosition(gfx::PointF(x_offset, y_offset)); 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 @@ -1865,18 +1860,18 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom return mBrowserControlsSizer; } -diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginSupplier.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginSupplier.java ---- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginSupplier.java -+++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginSupplier.java -@@ -9,6 +9,7 @@ import android.graphics.Rect; - import org.chromium.base.supplier.DestroyableObservableSupplier; +diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginAdapter.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginAdapter.java +--- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginAdapter.java ++++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsMarginAdapter.java +@@ -10,6 +10,7 @@ import org.chromium.base.lifetime.Destroyable; + import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.build.annotations.NullMarked; +import org.chromium.chrome.browser.flags.ChromeFeatureList; /** - * An implementation of {@link DestroyableObservableSupplier} that monitors changes to browser -@@ -63,6 +64,10 @@ public class BrowserControlsMarginSupplier extends ObservableSupplierImpl + * An implementation of {@link ObservableSupplier} that monitors changes to browser controls and +@@ -75,6 +76,10 @@ public class BrowserControlsMarginAdapter int bottomMargin = mBrowserControlsStateProvider.getBottomControlsHeight() - mBrowserControlsStateProvider.getBottomControlOffset(); @@ -1884,7 +1879,7 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom + bottomMargin += topMargin; + topMargin = 0; + } - super.set(new Rect(0, topMargin, 0, bottomMargin)); + mTargetSupplier.set(new Rect(0, topMargin, 0, bottomMargin)); } } 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 @@ -1937,7 +1932,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse #include "chrome/browser/android/webapk/webapk_features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/contextmenu/context_menu_features.h" -@@ -375,6 +376,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -377,6 +378,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNewTabPageCustomizationToolbarButton, &kNewTabPageCustomizationV2, &kNotificationPermissionBottomSheet, @@ -1949,7 +1944,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -507,6 +507,10 @@ public abstract class ChromeFeatureList { +@@ -513,6 +513,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"; @@ -1960,9 +1955,9 @@ 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"; -@@ -1016,6 +1020,10 @@ public abstract class ChromeFeatureList { - public static final CachedFlag sOptimizationGuidePushNotifications = - newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true); +@@ -1023,6 +1027,10 @@ public abstract class ChromeFeatureList { + public static final CachedFlag sNotificationTrampoline = + newCachedFlag(NOTIFICATION_TRAMPOLINE, false); public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true); + public static final CachedFlag sDisableToolbarSwipeUp = + newCachedFlag(DISABLE_TOOLBAR_SWIPE_UP, false); @@ -1971,9 +1966,9 @@ 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); -@@ -1248,6 +1256,8 @@ public abstract class ChromeFeatureList { +@@ -1260,6 +1268,8 @@ public abstract class ChromeFeatureList { + sNewTabPageCustomizationV2, sNotificationTrampoline, - sOptimizationGuidePushNotifications, sPCctMinimumHeight, + sMoveTopToolbarToBottom, + sDisableToolbarSwipeUp, @@ -2013,7 +2008,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.base.Callback; import org.chromium.base.DeviceInfo; -@@ -24,6 +25,7 @@ import org.chromium.base.supplier.TransitiveObservableSupplier; +@@ -23,6 +24,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; @@ -2021,7 +2016,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; -@@ -172,6 +174,13 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { +@@ -171,6 +173,13 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { paneManager.getFocusedPaneSupplier(), hubColorMixer, defaultPaneId); @@ -2034,7 +2029,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br + } ObservableSupplier<@Nullable View> overlayViewSupplier = - new TransitiveObservableSupplier( + mPaneManager diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java --- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java +++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java @@ -2138,7 +2133,7 @@ new file mode 100644 diff --git a/chrome/browser/hub/internal/android/res/layout/hub_layout.xml b/chrome/browser/hub/internal/android/res/layout/hub_layout.xml --- a/chrome/browser/hub/internal/android/res/layout/hub_layout.xml +++ b/chrome/browser/hub/internal/android/res/layout/hub_layout.xml -@@ -8,20 +8,28 @@ found in the LICENSE file. +@@ -8,11 +8,14 @@ found in the LICENSE file. android:layout_width="match_parent" android:layout_height="match_parent"> @@ -2149,28 +2144,18 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_layout.xml b/chr android:layout_width="match_parent" android:layout_height="match_parent"> -- -- - - -- -+ -+ -+ ++ + + + + +- +- +- + @@ -2199,7 +2184,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 -@@ -2282,7 +2282,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2034,7 +2034,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2219,45 +2204,47 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch import android.os.SystemClock; import android.view.Gravity; import android.view.KeyEvent; -@@ -256,6 +257,12 @@ class AppMenu implements OnKeyListener { +@@ -424,6 +425,13 @@ class AppMenu implements OnKeyListener { + mListView.setVerticalScrollBarEnabled(false); } - mListView = contentView.findViewById(R.id.app_menu_list); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // always scroll to the bottom to show new items + mListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); + // fill content starting from the bottom of the view + mListView.setStackFromBottom(true); + } - ++ int footerHeight = attachFooter(footer, (ViewGroup) contentView, menuWidth); int headerHeight = attachHeader(header, menuWidth); -@@ -294,7 +301,7 @@ class AppMenu implements OnKeyListener { - Math.min( - Math.abs(mTempLocation[1] - visibleDisplayFrame.top), - Math.abs(mTempLocation[1] - visibleDisplayFrame.bottom)); -- setMenuHeight( -+ int popupHeight = setMenuHeight( - mInitialSizingHelper, - visibleDisplayFrame, - sizingPadding, -@@ -312,8 +319,14 @@ class AppMenu implements OnKeyListener { - sizingPadding, + +@@ -471,7 +479,8 @@ class AppMenu implements OnKeyListener { + anchorView, + anchorViewOffset); + +- popup.setHeight(calculateMenuHeight()); ++ int popupHeight = calculateMenuHeight(); ++ popup.setHeight(popupHeight); + + int[] popupPosition = + getPopupPosition( +@@ -483,8 +492,14 @@ class AppMenu implements OnKeyListener { + padding, anchorView, popupWidth, - anchorView.getRootView().getLayoutDirection()); + anchorView.getRootView().getLayoutDirection(), + popupHeight); - mPopup.setContentView(contentView); + popup.setContentView(contentView); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // due to some unknown behaviour, the popup must be resized to + // allow selection without leaving touch + mPopup.setHeight(popupHeight - 1); + } - // Post the show call to handle keyboard click events. - if (ChromeFeatureList.sAndroidWebAppMenuButton.isEnabled()) { -@@ -385,11 +398,20 @@ class AppMenu implements OnKeyListener { + mHierarchicalMenuController.setupFlyoutController( + /* flyoutHandler= */ flyoutHandler, +@@ -609,11 +624,20 @@ class AppMenu implements OnKeyListener { Rect padding, View anchorView, int popupWidth, @@ -2279,18 +2266,9 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch int[] offsets = new int[2]; // If we have a hardware menu button, locate the app menu closer to the estimated // hardware menu button location. -@@ -495,7 +517,7 @@ class AppMenu implements OnKeyListener { - } - - @RequiresNonNull("mPopup") -- private void setMenuHeight( -+ private int setMenuHeight( - InitialSizingHelper sizingHelper, - Rect appDimensions, - Rect padding, -@@ -513,7 +535,13 @@ class AppMenu implements OnKeyListener { - - footerHeight - - headerHeight +@@ -744,7 +768,13 @@ class AppMenu implements OnKeyListener { + - mMenuSpec.footerHeight + - mMenuSpec.headerHeight - anchorViewImpactHeight; - + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -2300,21 +2278,13 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch + availableScreenSpace -= anchorView.getHeight(); + } + } - if (mIsByPermanentButton) availableScreenSpace -= padding.top; + if (mIsByPermanentButton) availableScreenSpace -= mMenuSpec.padding.top; if (availableScreenSpace <= 0 && sExceptionReporter != null) { String logMessage = -@@ -550,6 +578,7 @@ class AppMenu implements OnKeyListener { - int menuHeight = calculateHeightForItems(heightList, canBeLastList, availableScreenSpace); - menuHeight += footerHeight + headerHeight + padding.top + padding.bottom; - mPopup.setHeight(menuHeight); -+ return menuHeight; - } - - @VisibleForTesting diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java -@@ -28,6 +28,7 @@ import androidx.core.content.ContextCompat; +@@ -29,6 +29,7 @@ import androidx.core.content.ContextCompat; import org.chromium.base.Callback; import org.chromium.base.metrics.RecordUserAction; @@ -2322,7 +2292,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch import org.chromium.build.annotations.MonotonicNonNull; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; -@@ -274,7 +275,16 @@ class AppMenuHandlerImpl +@@ -295,7 +296,16 @@ class AppMenuHandlerImpl assert !(isByPermanentButton && startDragging); mModelList = mDelegate.getMenuItems(); @@ -2408,7 +2378,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/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 -@@ -232,6 +232,7 @@ public class LocationBarCoordinator +@@ -259,6 +259,7 @@ public class LocationBarCoordinator ? ControlsPosition.TOP : mBrowserControlsStateProvider.getControlsPosition(), mDeferredIMEWindowInsetApplicationCallback::getCurrentKeyboardHeight, @@ -2492,7 +2462,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow } if (isTablet()) { -@@ -343,6 +360,13 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -335,6 +352,13 @@ class OmniboxSuggestionsDropdownEmbedderImpl height = Math.min(windowSpace, contentSpace) - top; } @@ -2506,7 +2476,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 = -@@ -351,6 +375,14 @@ class OmniboxSuggestionsDropdownEmbedderImpl +@@ -343,6 +367,14 @@ class OmniboxSuggestionsDropdownEmbedderImpl mOmniboxAlignmentSupplier.set(omniboxAlignment); } @@ -2532,7 +2502,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; -@@ -52,6 +53,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; +@@ -51,6 +52,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; @@ -2540,7 +2510,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; -@@ -72,6 +74,7 @@ public class AutocompleteCoordinator +@@ -70,6 +72,7 @@ public class AutocompleteCoordinator implements OmniboxSuggestionsVisualState { private @Nullable OmniboxSuggestionsDropdown mDropdown; private final ObserverList mScrollListenerList = new ObserverList<>(); @@ -2548,7 +2518,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 { -@@ -106,6 +109,7 @@ public class AutocompleteCoordinator +@@ -104,6 +107,7 @@ public class AutocompleteCoordinator implements OmniboxSuggestionsVisualState { Context context = parent.getContext(); ModelList listItems = new ModelList(); @@ -2556,7 +2526,7 @@ 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) -@@ -231,6 +235,18 @@ public class AutocompleteCoordinator +@@ -229,6 +233,18 @@ public class AutocompleteCoordinator implements OmniboxSuggestionsVisualState { container.findViewById(R.id.omnibox_suggestions_dropdown); dropdown.setAdapter(mAdapter); @@ -2578,7 +2548,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java -@@ -73,6 +73,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; @@ -2587,7 +2557,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.List; import java.util.function.Supplier; -@@ -1241,7 +1243,9 @@ class AutocompleteMediator +@@ -1304,7 +1306,9 @@ class AutocompleteMediator @Override public void onSuggestionDropdownScroll() { mSuggestionsListScrolled = true; @@ -2675,7 +2645,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 -@@ -1530,6 +1530,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1539,6 +1539,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2691,7 +2661,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 -@@ -216,6 +216,7 @@ android_library("java") { +@@ -219,6 +219,7 @@ android_library("java") { "//content/public/android:content_java", "//third_party/android_deps:material_design_java", "//third_party/androidx:androidx_annotation_annotation_experimental_java", @@ -2702,7 +2672,7 @@ diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/andr diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java -@@ -18,6 +18,7 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; +@@ -20,6 +20,7 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.util.ColorUtils; @@ -2710,7 +2680,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Handles showing and hiding a scrim when url bar focus changes. */ @NullMarked -@@ -63,6 +64,10 @@ public class LocationBarFocusScrimHandler implements UrlFocusChangeListener { +@@ -68,6 +69,10 @@ public class LocationBarFocusScrimHandler implements UrlFocusChangeListener { mContext = context; int topMargin = tabStripHeightSupplier.get() == null ? 0 : tabStripHeightSupplier.get(); @@ -2774,7 +2744,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; @@ -2783,7 +2753,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import java.util.HashSet; import java.util.Set; -@@ -90,6 +92,8 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -88,6 +90,8 @@ public class BottomControlsCoordinator implements BackPressHandler { * @param constraintsSupplier Used to access current constraints of the browser controls. * @param readAloudRestoringSupplier Supplier that returns true if Read Aloud is currently * restoring its player, e.g. after theme change. @@ -2792,7 +2762,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow */ @SuppressLint("CutPasteId") // Not actually cut and paste since it's View vs ViewGroup. public BottomControlsCoordinator( -@@ -105,7 +109,9 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -103,7 +107,9 @@ public class BottomControlsCoordinator implements BackPressHandler { TabObscuringHandler tabObscuringHandler, ObservableSupplier overlayPanelVisibilitySupplier, ObservableSupplier<@Nullable Integer> constraintsSupplier, @@ -2803,7 +2773,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mRootFrameLayout = root; root.setConstraintsSupplier(constraintsSupplier); PropertyModel model = new PropertyModel(BottomControlsProperties.ALL_KEYS); -@@ -173,7 +179,8 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -171,7 +177,8 @@ public class BottomControlsCoordinator implements BackPressHandler { mMediator.setBottomControlsVisible(isVisible); } }, @@ -2913,16 +2883,16 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java -@@ -24,6 +24,8 @@ import org.chromium.ui.resources.ResourceManager; - - import java.util.List; +@@ -20,6 +20,8 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; + import org.chromium.components.browser_ui.widget.ViewResourceFrameLayout; + import org.chromium.ui.resources.ResourceManager; +import org.chromium.chrome.browser.flags.ChromeFeatureList; + /** * A composited view that sits at the bottom of the screen and listens to changes in the browser * controls. When visible, the view will mimic the behavior of the top browser controls when -@@ -44,6 +46,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -40,6 +42,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements /** The current Y offset of the bottom view in px. */ private int mCurrentYOffsetPx; @@ -2932,7 +2902,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The current X offset of the bottom view in px. */ private int mCurrentXOffsetPx; -@@ -101,6 +106,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -97,6 +102,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements mOffsetTag = offsetTag; } @@ -2946,7 +2916,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * @param visible Whether this {@link SceneLayer} is visible. */ -@@ -132,6 +144,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -128,6 +140,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements isShadowVisible = mBottomView.getVisibility() != View.VISIBLE; } @@ -2958,7 +2928,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow ScrollingBottomViewSceneLayerJni.get() .updateScrollingBottomViewLayer( mNativePtr, -@@ -139,7 +156,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -135,7 +152,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements mResourceId, mTopShadowHeightPx, mCurrentXOffsetPx, @@ -2970,7 +2940,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/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.RetentionPolicy; +@@ -78,6 +78,10 @@ import java.lang.annotation.RetentionPolicy; import java.util.function.BooleanSupplier; import java.util.function.Supplier; @@ -2981,7 +2951,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 -@@ -184,6 +188,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -191,6 +195,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout if (view != null) ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; } @@ -2996,15 +2966,14 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java -@@ -23,12 +23,15 @@ import org.chromium.chrome.browser.tab.Tab; - import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +@@ -23,11 +23,14 @@ import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; import org.chromium.chrome.browser.toolbar.R; + import org.chromium.chrome.browser.toolbar.ToolbarProgressBar; import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.resources.ResourceManager; - import java.util.List; import java.util.function.Supplier; +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; @@ -3025,10 +2994,10 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow .build(); mSceneLayer = new TopToolbarSceneLayer(resourceManagerSupplier); mChangeProcessor = -@@ -138,6 +147,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { +@@ -151,6 +160,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { @Override public SceneOverlayLayer getUpdatedSceneOverlayTree( - RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { + RectF viewport, RectF visibleViewport, ResourceManager resourceManager) { + mModel.set(TopToolbarOverlayProperties.VIEWPORT_HEIGHT, viewport.height()); return mSceneLayer; } @@ -3036,7 +3005,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/TopToolbarOverlayProperties.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayProperties.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayProperties.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayProperties.java -@@ -58,6 +58,12 @@ public class TopToolbarOverlayProperties { +@@ -71,6 +71,12 @@ public class TopToolbarOverlayProperties { public static final WritableLongPropertyKey CAPTURE_RESOURCE_ID = new WritableLongPropertyKey(); @@ -3049,8 +3018,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow public static final PropertyKey[] ALL_KEYS = new PropertyKey[] { ANONYMIZE, -@@ -72,5 +78,5 @@ public class TopToolbarOverlayProperties { - CONTENT_OFFSET, +@@ -86,5 +92,5 @@ public class TopToolbarOverlayProperties { + LEGACY_CONTENT_OFFSET, TOOLBAR_OFFSET_TAG, CAPTURE_RESOURCE_ID - }; @@ -3071,7 +3040,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Push all information about the texture to native at once. */ private void pushProperties(PropertyModel model) { if (mResourceManagerSupplier.get() == null) return; -+ float offsetY = model.get(TopToolbarOverlayProperties.CONTENT_OFFSET); ++ float offsetY = model.get(TopToolbarOverlayProperties.LEGACY_CONTENT_OFFSET); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + // fix the offset of the fake top controls, used only for animations + offsetY = model.get(TopToolbarOverlayProperties.VIEWPORT_HEIGHT) - @@ -3081,11 +3050,11 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow TopToolbarSceneLayerJni.get() .updateToolbarLayer( mNativePtr, -@@ -54,7 +62,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { - model.get(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID), +@@ -55,7 +63,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer { model.get(TopToolbarOverlayProperties.URL_BAR_COLOR), model.get(TopToolbarOverlayProperties.X_OFFSET), -- model.get(TopToolbarOverlayProperties.CONTENT_OFFSET), + model.get(TopToolbarOverlayProperties.Y_OFFSET), +- model.get(TopToolbarOverlayProperties.LEGACY_CONTENT_OFFSET), + offsetY, model.get(TopToolbarOverlayProperties.SHOW_SHADOW), model.get(TopToolbarOverlayProperties.VISIBLE), @@ -3093,7 +3062,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -@@ -66,4 +66,12 @@ found in the LICENSE file. +@@ -71,4 +71,12 @@ found in the LICENSE file. app:featureName="disable-pull-to-refresh-effect" app:needRestart="true" /> @@ -3109,7 +3078,7 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -49,6 +49,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -55,6 +55,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment private BooleanPreferenceDelegate mForceTabletUIDelegate; static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; @@ -3121,7 +3090,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -64,6 +69,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -71,6 +76,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate = delegate; } @@ -3132,7 +3101,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -@@ -129,6 +138,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -136,6 +145,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment forceTabletUiPref.setChecked(mForceTabletUIDelegate.getValue()); forceTabletUiPref.setOnPreferenceChangeListener(this); @@ -3151,7 +3120,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -217,6 +238,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -238,6 +259,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -3219,7 +3188,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ #include "cc/base/math_util.h" #include "cc/slim/layer.h" #include "components/input/cursor_manager.h" -@@ -956,6 +957,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -957,6 +958,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/Multi-Screen-Window-Placement-API-fix.patch b/build/patches/Multi-Screen-Window-Placement-API-fix.patch index 5aee8319..7598ae24 100644 --- a/build/patches/Multi-Screen-Window-Placement-API-fix.patch +++ b/build/patches/Multi-Screen-Window-Placement-API-fix.patch @@ -7,38 +7,32 @@ granted by user License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../permissions/permission_service_impl.cc | 6 +++- + .../permissions/permission_service_impl.cc | 1 - .../renderer_host/render_frame_host_impl.cc | 3 +- - .../core/frame/cached_permission_status.cc | 2 +- + .../core/frame/cached_permission_status.cc | 4 +-- .../core/frame/cached_permission_status.h | 1 + .../blink/renderer/core/frame/screen.cc | 35 +++++++++++++++++-- - .../blink/renderer/core/frame/screen.h | 16 +++++++++ - 6 files changed, 58 insertions(+), 5 deletions(-) + .../blink/renderer/core/frame/screen.h | 17 ++++++++- + 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc --- a/content/browser/permissions/permission_service_impl.cc +++ b/content/browser/permissions/permission_service_impl.cc -@@ -388,8 +388,12 @@ void PermissionServiceImpl::AddPageEmbeddedPermissionObserver( +@@ -384,7 +384,6 @@ void PermissionServiceImpl::AddPermissionObserver( ReceivedBadMessage(); return; } -+ bool should_include_device_status = -+ PermissionUtil::IsDevicePermission(permission); - PermissionResult current_result = -- GetCombinedPermissionAndDeviceResult(permission); -+ should_include_device_status -+ ? GetCombinedPermissionAndDeviceResult(permission) -+ : GetPermissionResultForCurrentContext(permission); +- + PermissionResult current_result = GetPermissionResult(permission); context_->CreateSubscription( permission, origin_, current_result, PermissionResult(last_known_status), - /*should_include_device_status=*/true, std::move(observer)); diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc -@@ -19291,7 +19291,8 @@ RenderFrameHostImpl::GetCachedPermissionStatuses() { - std::to_array>( - {{PermissionName::VIDEO_CAPTURE, PermissionType::VIDEO_CAPTURE}, - {PermissionName::AUDIO_CAPTURE, PermissionType::AUDIO_CAPTURE}, +@@ -19186,7 +19186,8 @@ RenderFrameHostImpl::GetCachedPermissionStatuses() { + {PermissionName::WEB_APP_INSTALLATION, + PermissionType::WEB_APP_INSTALLATION}, + #endif - {PermissionName::GEOLOCATION, PermissionType::GEOLOCATION}}); + {PermissionName::GEOLOCATION, PermissionType::GEOLOCATION}, + {PermissionName::WINDOW_MANAGEMENT, PermissionType::WINDOW_MANAGEMENT}}); @@ -48,19 +42,22 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b diff --git a/third_party/blink/renderer/core/frame/cached_permission_status.cc b/third_party/blink/renderer/core/frame/cached_permission_status.cc --- a/third_party/blink/renderer/core/frame/cached_permission_status.cc +++ b/third_party/blink/renderer/core/frame/cached_permission_status.cc -@@ -36,7 +36,7 @@ CachedPermissionStatus::CachedPermissionStatus(LocalDOMWindow* local_dom_window) +@@ -32,9 +32,9 @@ CachedPermissionStatus::CachedPermissionStatus(LocalDOMWindow* local_dom_window) permission_service_(local_dom_window), permission_observer_receivers_(this, local_dom_window) { CHECK(local_dom_window); -- CHECK(RuntimeEnabledFeatures::PermissionElementEnabled(local_dom_window)); -+ // CHECK(RuntimeEnabledFeatures::PermissionElementEnabled(local_dom_window)); see https://source.chromium.org/chromium/chromium/src/+/81a9e9b66a03e12cb438eef0834f5e5f7a0506ee +- CHECK(RuntimeEnabledFeatures::PermissionElementEnabled(local_dom_window) || ++ // CHECK(RuntimeEnabledFeatures::PermissionElementEnabled(local_dom_window) || + RuntimeEnabledFeatures::GeolocationElementEnabled(local_dom_window) || +- RuntimeEnabledFeatures::UserMediaElementEnabled(local_dom_window)); ++ RuntimeEnabledFeatures::UserMediaElementEnabled(local_dom_window)); see https://source.chromium.org/chromium/chromium/src/+/81a9e9b66a03e12cb438eef0834f5e5f7a0506ee } void CachedPermissionStatus::Trace(Visitor* visitor) const { diff --git a/third_party/blink/renderer/core/frame/cached_permission_status.h b/third_party/blink/renderer/core/frame/cached_permission_status.h --- a/third_party/blink/renderer/core/frame/cached_permission_status.h +++ b/third_party/blink/renderer/core/frame/cached_permission_status.h -@@ -71,6 +71,7 @@ class CORE_EXPORT CachedPermissionStatus final +@@ -68,6 +68,7 @@ class CORE_EXPORT CachedPermissionStatus final private: friend class HTMLPermissionElement; @@ -133,10 +130,10 @@ diff --git a/third_party/blink/renderer/core/frame/screen.h b/third_party/blink/ #include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/frame/cached_permission_status.h" - #include "third_party/blink/renderer/platform/heap/garbage_collected.h" + #include "third_party/blink/renderer/platform/forward_declared_member.h" +#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" - #include "third_party/blink/renderer/platform/supplementable.h" + #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" #include "ui/gfx/geometry/rect.h" @@ -145,15 +142,16 @@ diff --git a/third_party/blink/renderer/core/frame/screen.h b/third_party/blink/ namespace display { struct ScreenInfo; } -@@ -47,6 +52,7 @@ class LocalDOMWindow; +@@ -46,7 +51,7 @@ namespace blink { + class LocalDOMWindow; + class ScreenScreenOrientation; - class CORE_EXPORT Screen : public EventTarget, - public ExecutionContextClient, -+ public CachedPermissionStatus::Client, - public Supplementable { +-class CORE_EXPORT Screen : public EventTarget, public ExecutionContextClient { ++class CORE_EXPORT Screen : public EventTarget, public CachedPermissionStatus::Client, public ExecutionContextClient { DEFINE_WRAPPERTYPEINFO(); -@@ -89,8 +95,18 @@ class CORE_EXPORT Screen : public EventTarget, + public: +@@ -97,10 +102,20 @@ class CORE_EXPORT Screen : public EventTarget, public ExecutionContextClient { gfx::Rect GetRect(bool available) const; const display::ScreenInfo& GetScreenInfo() const; @@ -166,6 +164,8 @@ diff --git a/third_party/blink/renderer/core/frame/screen.h b/third_party/blink/ + // The internal id of the underlying display, to support multi-screen devices. int64_t display_id_; + + ForwardDeclaredMember screen_screen_orientation_; + + private: + bool window_management_permission_granted_ = false; diff --git a/build/patches/User-agent-customization.patch b/build/patches/User-agent-customization.patch index 1de68144..01b74bd8 100644 --- a/build/patches/User-agent-customization.patch +++ b/build/patches/User-agent-customization.patch @@ -18,13 +18,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../layout/custom_useragent_preferences.xml | 106 ++++++++++ .../android/java/res/xml/main_preferences.xml | 5 + .../java/res/xml/useragent_preferences.xml | 25 +++ - .../chrome/browser/app/ChromeActivity.java | 1 + + .../chrome/browser/app/ChromeActivity.java | 5 +- .../init/ChromeBrowserInitializer.java | 3 + .../PrivacyPreferencesManagerImpl.java | 42 ++++ .../settings/UserAgentPreferences.java | 189 ++++++++++++++++++ - .../browser/tab/RequestDesktopUtils.java | 1 + .../chromium/chrome/browser/tab/TabImpl.java | 64 +++++- - .../chromium/chrome/browser/tab/TabUtils.java | 7 +- + .../chromium/chrome/browser/tab/TabUtils.java | 8 +- .../browser/android/content/content_utils.cc | 32 ++- .../preferences/browser_prefs_android.cc | 7 + .../privacy_preferences_manager_impl.cc | 126 ++++++++++++ @@ -35,6 +34,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../org/chromium/chrome/browser/tab/Tab.java | 2 + .../browser/tabwindow/TabWindowManager.java | 2 + .../tabwindow/TabWindowManagerImpl.java | 18 ++ + .../desktop_site/DesktopSiteUtils.java | 1 + .../strings/android_chrome_strings.grd | 26 +++ chrome/common/pref_names.h | 8 + ...omiteRequestDesktopSiteContentSetting.java | 76 +++++++ @@ -46,7 +46,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/web_contents/web_contents_impl.cc | 6 +- .../framehost/NavigationControllerImpl.java | 3 +- content/renderer/render_thread_impl.cc | 1 - - 36 files changed, 800 insertions(+), 17 deletions(-) + 36 files changed, 803 insertions(+), 19 deletions(-) create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java @@ -92,7 +92,7 @@ diff --git a/base/base_switches.h b/base/base_switches.h 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 -@@ -665,6 +665,8 @@ chrome_java_resources = [ +@@ -684,6 +684,8 @@ chrome_java_resources = [ "java/res/xml/search_widget_info.xml", "java/res/xml/tracing_preferences.xml", "java/res/xml/unified_account_settings_preferences.xml", @@ -104,7 +104,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -919,6 +919,7 @@ chrome_java_sources = [ +@@ -932,6 +932,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/payments/ui/DimmingDialog.java", "java/src/org/chromium/chrome/browser/payments/ui/LineItem.java", "java/src/org/chromium/chrome/browser/payments/ui/PaymentAppComparator.java", @@ -271,14 +271,18 @@ new file mode 100644 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 -@@ -2776,6 +2776,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity - TabUtils.switchUserAgent( - currentTab, - usingDesktopUserAgent, -+ /* forcedByUser= */ true, - UseDesktopUserAgentCaller.ON_MENU_OR_KEYBOARD_ACTION); +@@ -2814,7 +2814,10 @@ public abstract class ChromeActivity extends AsyncInitializationActivity + profile, currentTab.getUrl(), usingDesktopUserAgent); + // Use TabUtils.switchUserAgent() instead of Tab.reload(). Because we need to reload + // with LoadOriginalRequestURL. See http://crbug/1418587 for details. +- TabUtils.switchUserAgent(currentTab, usingDesktopUserAgent); ++ TabUtils.switchUserAgent( ++ currentTab, ++ usingDesktopUserAgent, ++ /* forcedByUser= */ true); TrackerFactory.getTrackerForProfile(profile) .notifyEvent(EventConstants.APP_MENU_DESKTOP_SITE_EXCEPTION_ADDED); + RequestDesktopUtils.recordUserChangeUserAgent(usingDesktopUserAgent, getActivityTab()); 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 @@ -556,17 +560,6 @@ new file mode 100644 + UpdateAllTabs(); + } +} -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java -@@ -142,6 +142,7 @@ public class RequestDesktopUtils { - */ - public static void setRequestDesktopSiteContentSettingsForUrl( - Profile profile, GURL url, boolean useDesktopUserAgent) { -+ if ((true)) return; - boolean isOffTheRecord = profile.isOffTheRecord(); - String domainWildcardPattern = - WebsitePreferenceBridge.toDomainWildcardPattern(url.getSpec()); 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 @@ -590,17 +583,17 @@ 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. -@@ -2318,9 +2324,6 @@ class TabImpl implements Tab { +@@ -2342,9 +2348,6 @@ class TabImpl implements Tab { } if (mWebContents != null) { - // Invoke switchUserAgentIfNeeded() from restoreIfNeeded() instead of loadIfNeeded() - // to avoid reload without explicit user intent. -- switchUserAgentIfNeeded(UseDesktopUserAgentCaller.LOAD_IF_NEEDED + caller); +- switchUserAgentIfNeeded(); mWebContents.getNavigationController().loadIfNecessary(); } mIsBeingRestored = true; -@@ -2720,6 +2723,11 @@ class TabImpl implements Tab { +@@ -2744,6 +2747,11 @@ class TabImpl implements Tab { url = webContents.getVisibleUrl(); } @@ -610,18 +603,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav + return UserAgentOverrideOption.TRUE; + boolean shouldRequestDesktopSite = - RequestDesktopUtils.shouldOverrideDesktopSite(mProfile, url, getContext()); + DesktopSiteUtils.shouldOverrideDesktopSite(mProfile, url, getContext()); -@@ -2749,7 +2757,7 @@ class TabImpl implements Tab { +@@ -2773,7 +2781,7 @@ class TabImpl implements Tab { } boolean usingDesktopUserAgent = getWebContents().getNavigationController().getUseDesktopUserAgent(); -- TabUtils.switchUserAgent(this, /* switchToDesktop= */ !usingDesktopUserAgent, caller); -+ TabUtils.switchUserAgent(this, /* switchToDesktop= */ !usingDesktopUserAgent, /* forcedByUser= */ false, caller); +- TabUtils.switchUserAgent(this, /* switchToDesktop= */ !usingDesktopUserAgent); ++ TabUtils.switchUserAgent(this, /* switchToDesktop= */ !usingDesktopUserAgent, /* forcedByUser= */ false); } /** Sets the TabLaunchType for tabs launched with an unset launch type. */ -@@ -2899,6 +2907,54 @@ class TabImpl implements Tab { +@@ -2923,6 +2931,54 @@ class TabImpl implements Tab { /* allowDialog= */ false); } @@ -679,16 +672,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java -@@ -130,11 +130,8 @@ public class TabUtils { +@@ -113,12 +113,8 @@ public class TabUtils { * @param switchToDesktop Whether switching the user agent to desktop. * @param caller The caller of this method. */ -- public static void switchUserAgent(Tab tab, boolean switchToDesktop, int caller) { +- public static void switchUserAgent(Tab tab, boolean switchToDesktop) { - final boolean reloadOnChange = !tab.isNativePage(); - assumeNonNull(tab.getWebContents()) - .getNavigationController() -- .setUseDesktopUserAgent(switchToDesktop, reloadOnChange, caller); -+ public static void switchUserAgent(Tab tab, boolean switchToDesktop, boolean forcedByUser, int caller) { +- .setUseDesktopUserAgent( +- switchToDesktop, reloadOnChange, /* skipOnInitialNavigation= */ true); ++ public static void switchUserAgent(Tab tab, boolean switchToDesktop, boolean forcedByUser) { + tab.SetOverrideUserAgent(switchToDesktop, forcedByUser); } @@ -815,11 +809,10 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl static jboolean JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingEnabled( JNIEnv* env) { PrefService* local_state = g_browser_process->local_state(); -@@ -36,3 +62,103 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy( - metrics::prefs::kMetricsReportingEnabled) && +@@ -37,4 +63,104 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy( !local_state->GetBoolean(metrics::prefs::kMetricsReportingEnabled); } -+ + +static void UpdateOverrideUserAgent() { + bool overrideUserAgentEnabled = + g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentEnabled); @@ -919,6 +912,8 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl + enabled); + UpdateOverrideUserAgent(); +} ++ + DEFINE_JNI(PrivacyPreferencesManagerImpl) diff --git a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc --- a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc +++ b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc @@ -976,7 +971,7 @@ diff --git a/chrome/browser/content_settings/request_desktop_site_web_contents_o 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 -@@ -1243,8 +1243,6 @@ public final class ChromePreferenceKeys { +@@ -1281,8 +1281,6 @@ public final class ChromePreferenceKeys { SIGNIN_PROMO_NTP_LAST_SHOWN_TIME, SYNC_PROMO_TOTAL_SHOW_COUNT, SEARCH_RESUMPTION_MODULE_COLLAPSE_ON_NTP, @@ -1006,7 +1001,7 @@ diff --git a/chrome/browser/privacy/settings/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java -@@ -388,6 +388,8 @@ public interface Tab extends TabLifecycle { +@@ -391,6 +391,8 @@ public interface Tab extends TabLifecycle { /** Goes to the navigation entry after the current one. */ void goForward(); @@ -1018,7 +1013,7 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.jav diff --git a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java b/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java --- a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java +++ b/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManager.java -@@ -174,6 +174,8 @@ public interface TabWindowManager { +@@ -177,6 +177,8 @@ public interface TabWindowManager { @Nullable List getGroupedTabsByWindow( @WindowId int windowId, Token tabGroupId, boolean isIncognito); @@ -1030,7 +1025,7 @@ diff --git a/chrome/browser/tabwindow/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java b/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java --- a/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java +++ b/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chrome/browser/tabwindow/TabWindowManagerImpl.java -@@ -499,6 +499,24 @@ public class TabWindowManagerImpl implements TabWindowManager { +@@ -501,6 +501,24 @@ public class TabWindowManagerImpl implements TabWindowManager { return null; } @@ -1055,10 +1050,21 @@ diff --git a/chrome/browser/tabwindow/internal/android/java/src/org/chromium/chr @Override public @Nullable Tab getTabById(@TabId int tabId) { for (TabModelSelector selector : getAllTabModelSelectors()) { +diff --git a/chrome/browser/ui/android/desktop_site/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteUtils.java b/chrome/browser/ui/android/desktop_site/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteUtils.java +--- a/chrome/browser/ui/android/desktop_site/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteUtils.java ++++ b/chrome/browser/ui/android/desktop_site/java/src/org/chromium/chrome/browser/desktop_site/DesktopSiteUtils.java +@@ -66,6 +66,7 @@ public class DesktopSiteUtils { + */ + public static void setRequestDesktopSiteContentSettingsForUrl( + Profile profile, GURL url, boolean useDesktopUserAgent) { ++ if ((true)) return; + boolean isOffTheRecord = profile.isOffTheRecord(); + String domainWildcardPattern = + WebsitePreferenceBridge.toDomainWildcardPattern(url.getSpec()); 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 -@@ -238,6 +238,32 @@ CHAR_LIMIT guidelines: +@@ -250,6 +250,32 @@ CHAR_LIMIT guidelines: Visit help page @@ -1094,7 +1100,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd 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 -@@ -1899,6 +1899,14 @@ inline constexpr char kNaviOnboardGroup[] = "browser.navi_onboard_group"; +@@ -1916,6 +1916,14 @@ inline constexpr char kNaviOnboardGroup[] = "browser.navi_onboard_group"; inline constexpr char kHadThreeConsecutiveNotificationPermissionDenies[] = "profile.content_settings.had_three_consecutive_denies.notifications"; @@ -1269,7 +1275,7 @@ diff --git a/content/browser/renderer_host/navigation_controller_android.h b/con diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -3815,6 +3815,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3842,6 +3842,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( #if BUILDFLAG(IS_CHROMEOS) switches::kSchedulerBoostUrgent, #endif @@ -1288,7 +1294,7 @@ diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser #include "base/check_op.h" #include "base/command_line.h" #include "base/containers/contains.h" -@@ -2449,8 +2450,6 @@ void WebContentsImpl::SetUserAgentOverride( +@@ -2375,8 +2376,6 @@ void WebContentsImpl::SetUserAgentOverride( OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::SetUserAgentOverride", "ua_override", ua_override.ua_string_override, "override_in_new_tabs", override_in_new_tabs); @@ -1297,7 +1303,7 @@ diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser if (GetUserAgentOverride() == ua_override) { return; -@@ -3818,6 +3817,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences( +@@ -3750,6 +3749,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences( #else prefs.viewport_meta_enabled = false; #endif @@ -1318,7 +1324,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/frameh params.getInitiatorOrigin(), params.getHasUserGesture(), params.getShouldClearHistoryList(), -@@ -445,7 +446,7 @@ import org.chromium.url.Origin; +@@ -447,7 +448,7 @@ import org.chromium.url.Origin; @Nullable String dataUrlAsString, boolean canLoadLocalResources, boolean isRendererInitiated, @@ -1330,7 +1336,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/frameh diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -850,7 +850,6 @@ void RenderThreadImpl::InitializeRenderer( +@@ -848,7 +848,6 @@ void RenderThreadImpl::InitializeRenderer( uint64_t trace_id) { TRACE_EVENT("navigation", "RenderThreadImpl::InitializeRenderer", perfetto::TerminatingFlow::Global(trace_id));