From a048d60ff4bfdd021df0f7b9247298ec6b1010ba Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Sat, 30 Aug 2025 12:52:14 +0200 Subject: [PATCH] Patches for 140 (need work) --- build/cromite_patches_list.txt | 3 +- .../Add-an-always-incognito-mode.patch | 210 +- .../Add-bookmark-import-export-actions.patch | 176 +- ...Add-lifetime-options-for-permissions.patch | 251 ++- .../Add-menu-item-to-bookmark-all-tabs.patch | 54 +- .../patches/Android-Pixel-Perfect-Mode.patch | 313 +-- ...roid-fonts-fingerprinting-mitigation.patch | 94 +- .../Content-settings-infrastructure.patch | 317 +-- build/patches/Enable-component-updater.patch | 38 +- .../Enable-network-isolation-features.patch | 30 +- .../Experimental-user-scripts-support.patch | 100 +- build/patches/Eyeo-Adblock-for-Cromite.patch | 90 +- build/patches/Fix-chromium-build-bugs.patch | 44 +- .../Fonts-fingerprinting-mitigation.patch | 16 +- build/patches/JIT-site-settings.patch | 16 +- .../Move-navigation-bar-to-bottom.patch | 396 ++-- .../Partition-blobs-by-top-frame-URL.patch | 210 +- ...vate-network-access-content-settings.patch | 87 +- build/patches/Remove-EV-certificates.patch | 4 +- .../Restore-Simplified-NTP-launch.patch | 321 +-- .../Restore-chrome-password-store.patch | 1739 ++++++++++++++++- .../Switch-to-fstack-protector-strong.patch | 4 +- build/patches/Viewport-Protection-flag.patch | 44 +- build/patches/eyeo-133.0.6943.49-base.patch | 130 +- 24 files changed, 3089 insertions(+), 1598 deletions(-) diff --git a/build/cromite_patches_list.txt b/build/cromite_patches_list.txt index 82d99987..c3434a9c 100644 --- a/build/cromite_patches_list.txt +++ b/build/cromite_patches_list.txt @@ -6,7 +6,7 @@ Force-use-vpython3-for-some-scripts.patch Permit-PGO-for-debug-builds.patch Fix-chromium-vanilla.patch Final-patch-for-chromium-vanilla.patch - +Restore-chrome-password-store.patch Remove-EV-certificates.patch do-not-hide-.orig-files.patch do-not-add-suffix-to-package-name.patch @@ -275,7 +275,6 @@ Enable-Global-Privacy-Control.patch Enable-Do-Not-Track-by-default.patch Media-fingerprinting-mitigations.patch Use-BoringSSL-for-RandBytes.patch -Restore-chrome-password-store.patch Disable-support-for-pointer-device-id.patch Disable-CSS-blink-feature-support.patch Close-Sessions-On-Ip-Change.patch diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 0e1c53ec..12e8aa56 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../java/res/xml/incognito_preferences.xml | 37 ++++ .../java/res/xml/privacy_preferences.xml | 5 + .../AlwaysIncognitoLinkInterceptor.java | 54 ++++++ - .../chrome/browser/ChromeTabbedActivity.java | 28 ++- + .../chrome/browser/ChromeTabbedActivity.java | 25 ++- .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 7 +- .../ChromeContextMenuPopulator.java | 6 +- @@ -69,7 +69,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/profiles/profile_selections.h | 7 +- .../browser/ui/android/native_page/BUILD.gn | 2 + .../browser/ui/native_page/NativePage.java | 22 ++- - .../browser/omnibox/LocationBarMediator.java | 10 +- + .../browser/omnibox/LocationBarMediator.java | 8 + .../strings/android_chrome_strings.grd | 25 +++ .../browser/toolbar/LocationBarModel.java | 5 +- chrome/browser/ui/messages/android/BUILD.gn | 1 + @@ -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, 800 insertions(+), 113 deletions(-) + 69 files changed, 797 insertions(+), 111 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 -@@ -639,6 +639,7 @@ chrome_java_resources = [ +@@ -620,6 +620,7 @@ chrome_java_resources = [ "java/res/xml/main_preferences_legacy.xml", "java/res/xml/manage_sync_preferences.xml", "java/res/xml/personalize_google_services_preferences.xml", @@ -120,7 +120,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -902,6 +903,7 @@ chrome_java_sources = [ +@@ -907,6 +908,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", @@ -258,7 +258,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.IntentHandler.ExternalAppId; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; -@@ -761,14 +765,19 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -794,14 +798,19 @@ public class ChromeTabbedActivity extends ChromeActivity { Profile profile = mTabModelSelector.getCurrentModel().getProfile(); // For saving non-incognito tab closures for Recent Tabs. @@ -285,18 +285,15 @@ 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( -@@ -2951,8 +2960,9 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3152,7 +3161,7 @@ public class ChromeTabbedActivity extends ChromeActivity { + } // We determine the model as soon as possible so every systems get initialized coherently. - boolean startIncognito = -- savedInstanceState != null -- && savedInstanceState.getBoolean(IS_INCOGNITO_SELECTED, false); -+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() -+ || (savedInstanceState != null -+ && savedInstanceState.getBoolean(IS_INCOGNITO_SELECTED, false)); - - mNextTabPolicySupplier = new ChromeNextTabPolicySupplier(mLayoutStateProviderSupplier); - +- boolean startIncognito = ++ boolean startIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() || + (mSupportedProfileType == SupportedProfileType.OFF_THE_RECORD) + || (mSupportedProfileType == SupportedProfileType.MIXED + && savedInstanceState != null 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 @@ -308,7 +305,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.download.DownloadManagerService; -@@ -1981,6 +1982,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2000,6 +2001,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -345,25 +342,25 @@ 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 -@@ -34,6 +34,7 @@ import org.chromium.base.metrics.RecordUserAction; - import org.chromium.base.shared_preferences.SharedPreferencesManager; - import org.chromium.base.supplier.Supplier; +@@ -41,6 +41,7 @@ import org.chromium.base.supplier.Supplier; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; - import org.chromium.chrome.browser.download.DownloadUtils; -@@ -370,6 +371,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { - public List> buildContextMenu() { + import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ContextMenuItemType; +@@ -420,6 +421,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { mShowEphemeralTabNewLabel = null; + mCustomActionMap.clear(); + boolean always_incognito = + AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); + - List> groupedItems = new ArrayList<>(); + List groupedItems = new ArrayList<>(); if (mParams.isPage() && shouldShowEmptySpaceContextMenu()) { -@@ -438,7 +442,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -489,7 +493,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { @@ -424,15 +421,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -18,6 +18,7 @@ import org.chromium.base.supplier.ObservableSupplier; - import org.chromium.base.supplier.Supplier; +@@ -21,6 +21,7 @@ import org.chromium.base.supplier.Supplier; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.DefaultBrowserInfo; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.bookmarks.BookmarkModel; -@@ -218,6 +219,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat +@@ -221,6 +222,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat openInChromeItemVisible = false; tryAddingReadAloud = false; } @@ -445,7 +442,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -99,6 +99,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -101,6 +101,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.net.NetId; @@ -472,15 +469,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -36,6 +36,7 @@ import org.chromium.base.FileUtils; - import org.chromium.base.IntentUtils; - import org.chromium.base.Log; +@@ -39,6 +39,7 @@ import org.chromium.base.Log; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.download.home.DownloadActivityLauncher; -@@ -78,6 +79,10 @@ import org.chromium.url.GURL; +@@ -82,6 +83,10 @@ import org.chromium.url.GURL; import java.io.File; @@ -489,9 +486,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo +import org.chromium.chrome.browser.preferences.Pref; + /** A class containing some utility static methods. */ + @NullMarked public class DownloadUtils { - private static final String TAG = "download"; -@@ -303,7 +308,13 @@ public class DownloadUtils { +@@ -313,7 +318,13 @@ public class DownloadUtils { public static boolean isAllowedToDownloadPage(Tab tab) { if (tab == null) return false; @@ -509,7 +506,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java -@@ -302,7 +302,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -307,7 +307,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.generateFooterItems(); // Listen to changes in sign in state. @@ -520,7 +517,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // Create PrefChangeRegistrar to receive notifications on preference changes. mPrefChangeRegistrar = PrefServiceUtil.createFor(profile); -@@ -378,7 +380,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -383,7 +385,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.onDestroyed(); mLargeIconBridge.destroy(); mLargeIconBridge = null; @@ -533,7 +530,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/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java -@@ -56,6 +56,14 @@ import org.chromium.ui.base.Clipboard; +@@ -57,6 +57,14 @@ import org.chromium.ui.base.Clipboard; import java.util.List; import java.util.function.Function; @@ -548,7 +545,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History /** Combines and manages the different UI components of browsing history. */ public class HistoryManager implements OnMenuItemClickListener, -@@ -161,7 +169,7 @@ public class HistoryManager +@@ -162,7 +170,7 @@ public class HistoryManager mUmaRecorder.recordOpenHistory(); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -557,7 +554,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -413,9 +421,22 @@ public class HistoryManager +@@ -415,9 +423,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -581,7 +578,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; } -@@ -475,7 +496,7 @@ public class HistoryManager +@@ -477,7 +498,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -634,7 +631,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; -@@ -351,7 +352,8 @@ public class NativePageFactory { +@@ -371,7 +372,8 @@ public class NativePageFactory { String url, NativePage candidatePage, Tab tab, boolean isIncognito, PdfInfo pdfInfo) { NativePage page; @@ -647,7 +644,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java -@@ -40,6 +40,15 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; +@@ -44,6 +44,15 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.sync.SyncService; import org.chromium.url.GURL; @@ -663,7 +660,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM import java.util.HashMap; import java.util.List; import java.util.Map; -@@ -108,7 +117,8 @@ public class RecentTabsManager +@@ -113,7 +122,8 @@ public class RecentTabsManager Profile profile, Context context, Runnable showHistoryManager) { @@ -673,7 +670,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM mActiveTab = tab; mTabModelSelector = tabModelSelector; mShowHistoryManager = showHistoryManager; -@@ -291,6 +301,22 @@ public class RecentTabsManager +@@ -301,6 +311,22 @@ public class RecentTabsManager */ public void openRecentlyClosedTab(RecentlyClosedTab tab, int windowDisposition) { if (mIsDestroyed) return; @@ -879,7 +876,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.sync.settings.AccountManagementFragment; +@@ -47,6 +47,7 @@ import org.chromium.chrome.browser.sync.settings.AccountManagementFragment; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; @@ -887,7 +884,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; -@@ -244,6 +245,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -226,6 +227,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl SigninAndHistorySyncActivityLauncherImpl.get(), new SettingsCustomTabLauncherImpl())); } @@ -1006,15 +1003,15 @@ 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 -@@ -25,6 +25,7 @@ import org.chromium.base.supplier.Supplier; - import org.chromium.build.BuildConfig; +@@ -27,6 +27,7 @@ import org.chromium.base.supplier.Supplier; + import org.chromium.build.annotations.Contract; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ai.AiAssistantService; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; -@@ -219,7 +220,10 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -220,7 +221,10 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm } // New Tab @@ -1029,7 +1026,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 -@@ -218,6 +218,8 @@ import org.chromium.components.webapps.bottomsheet.PwaBottomSheetControllerFacto +@@ -212,6 +212,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; @@ -1038,7 +1035,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.display.DisplayUtil; -@@ -1238,7 +1240,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1247,7 +1249,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1050,7 +1047,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 -@@ -52,6 +52,10 @@ import org.chromium.ui.base.PageTransition; +@@ -53,6 +53,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1061,9 +1058,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome /** This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ @NullMarked public class ChromeTabCreator extends TabCreator -@@ -567,7 +571,6 @@ public class ChromeTabCreator extends TabCreator +@@ -580,7 +584,6 @@ public class ChromeTabCreator extends TabCreator // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. - public Tab launchUrlFromExternalApp( + public @Nullable Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { - assert !mIncognito; // Don't re-use tabs for intents from Chrome. Note that this can be spoofed so shouldn't be @@ -1092,16 +1089,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java -@@ -54,6 +54,8 @@ import org.chromium.chrome.browser.tabwindow.TabWindowManager; +@@ -61,6 +61,8 @@ import org.chromium.components.browser_ui.util.ConversionUtils; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import java.io.BufferedInputStream; - import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; -@@ -844,6 +846,13 @@ public class TabPersistentStore { + import java.io.DataInputStream; +@@ -838,6 +840,13 @@ public class TabPersistentStore { } } } @@ -1126,7 +1123,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -856,7 +857,7 @@ public class ToolbarManager +@@ -859,7 +860,7 @@ public class ToolbarManager TraceEvent.end("isOfflinePage"); return ret; } @@ -1196,7 +1193,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and using base::android::JavaParamRef; using base::android::JavaRef; using base::android::ScopedJavaLocalRef; -@@ -104,7 +109,8 @@ std::vector> StringsToUuids( +@@ -101,7 +106,8 @@ std::vector> StringsToUuids( void CreateHistoricalTab( TabAndroid* tab_android, @@ -1206,7 +1203,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!tab_android) { return; } -@@ -115,9 +121,14 @@ void CreateHistoricalTab( +@@ -112,9 +118,14 @@ void CreateHistoricalTab( return; } @@ -1223,7 +1220,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!service) { return; } -@@ -181,7 +192,7 @@ void CreateHistoricalBulkClosure( +@@ -178,7 +189,7 @@ void CreateHistoricalBulkClosure( per_tab_optional_tab_group_ids, std::vector> tabs, std::vector web_contents_state) { @@ -1232,7 +1229,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and DCHECK_EQ(tab_group_ids.size(), group_titles.size()); DCHECK_EQ(tab_group_ids.size(), group_colors.size()); DCHECK_EQ(tab_group_ids.size(), tab_group_ids.size()); -@@ -294,11 +305,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( +@@ -291,11 +302,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( JNIEnv* env, const JavaParamRef& jtab_android, const JavaParamRef& state, @@ -1250,8 +1247,8 @@ 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 -@@ -418,6 +418,15 @@ ChromeAutocompleteProviderClient::GetTabGroupSyncService() const { - return tab_groups::TabGroupSyncServiceFactory::GetForProfile(profile_); +@@ -427,6 +427,15 @@ ChromeAutocompleteProviderClient::GetAimEligibilityService() const { + return AimEligibilityServiceFactory::GetForProfile(profile_); } +bool ChromeAutocompleteProviderClient::IsAlwaysIncognitoEnabled() const { @@ -1269,9 +1266,9 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h -@@ -96,6 +96,7 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { - ProviderStateService* GetProviderStateService() const override; - tab_groups::TabGroupSyncService* GetTabGroupSyncService() const override; +@@ -99,6 +99,7 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { + AimEligibilityService* GetAimEligibilityService() const override; + bool IsOffTheRecord() const override; + bool IsAlwaysIncognitoEnabled() const override; bool IsIncognitoProfile() const override; @@ -1387,7 +1384,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -@@ -568,6 +571,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -598,6 +601,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -1401,7 +1398,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return nullptr; -@@ -575,6 +585,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -605,6 +615,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -1421,7 +1418,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 -@@ -15,6 +15,8 @@ +@@ -17,6 +17,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" @@ -1430,8 +1427,8 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor namespace history { struct HistoryAddPageArgs; -@@ -54,6 +56,11 @@ class HistoryTabHelper - void SetAppId(const std::string& app_id) { app_id_ = app_id; } +@@ -59,6 +61,11 @@ class HistoryTabHelper + std::optional GetAppId() { return app_id_; } #endif + static void RegisterProfilePrefs(PrefRegistrySimple* registry); @@ -1442,7 +1439,7 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor private: explicit HistoryTabHelper(content::WebContents* web_contents); friend class content::WebContentsUserData; -@@ -91,9 +98,6 @@ class HistoryTabHelper +@@ -101,9 +108,6 @@ class HistoryTabHelper void OnLanguageDetermined( const translate::LanguageDetectionDetails& details) override; @@ -1465,7 +1462,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrom // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/OfflinePageBridge_jni.h" -@@ -757,9 +760,15 @@ void OfflinePageBridge::GetPageByOfflineIdDone( +@@ -731,9 +734,15 @@ void OfflinePageBridge::GetPageByOfflineIdDone( } if (offline_page_model_->IsArchiveInInternalDir(offline_page->file_path)) { @@ -1750,7 +1747,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 -@@ -256,6 +256,7 @@ +@@ -254,6 +254,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1758,7 +1755,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" -@@ -2142,6 +2143,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2061,6 +2062,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1844,7 +1841,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 { -@@ -179,7 +181,8 @@ public interface NativePage { +@@ -187,7 +189,8 @@ public interface NativePage { */ static boolean isNativePageUrl(GURL url, boolean isIncognito, boolean hasPdfDownload) { return url != null @@ -1854,7 +1851,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -189,7 +192,7 @@ public interface NativePage { +@@ -197,7 +200,7 @@ public interface NativePage { * not have chrome or chrome-native scheme. */ static boolean isChromePageUrl(GURL url, boolean isIncognito) { @@ -1863,7 +1860,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -201,11 +204,12 @@ public interface NativePage { +@@ -209,11 +212,12 @@ public interface NativePage { */ // TODO(crbug.com/40549331) - Convert to using GURL. static @NativePageType int nativePageType( @@ -1878,7 +1875,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -219,7 +223,8 @@ public interface NativePage { +@@ -227,7 +231,8 @@ public interface NativePage { GURL url, @Nullable NativePage candidatePage, boolean isIncognito, @@ -1888,7 +1885,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. -@@ -237,7 +242,7 @@ public interface NativePage { +@@ -245,7 +250,7 @@ public interface NativePage { // created after the pdf document is re-downloaded in other parts of the code. return NativePageType.NONE; } else { @@ -1897,7 +1894,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } } -@@ -249,7 +254,7 @@ public interface NativePage { +@@ -257,7 +262,7 @@ public interface NativePage { * which do not have chrome or chrome-native scheme. */ private static @NativePageType int chromePageType( @@ -1906,7 +1903,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) -@@ -269,7 +274,8 @@ public interface NativePage { +@@ -277,7 +282,8 @@ public interface NativePage { return NativePageType.DOWNLOADS; } else if (UrlConstants.HISTORY_HOST.equals(host)) { return NativePageType.HISTORY; @@ -1919,7 +1916,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 -@@ -91,6 +91,11 @@ import org.chromium.ui.base.WindowAndroid; +@@ -92,6 +92,11 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.interpolators.Interpolators; import org.chromium.url.GURL; @@ -1931,25 +1928,20 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; -@@ -1300,10 +1305,13 @@ class LocationBarMediator - } +@@ -419,6 +424,9 @@ class LocationBarMediator + if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) return; Tab tab = mLocationBarDataProvider.getTab(); - if (tab == null) return false; + if (tab == null) return; + PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); + boolean historyEnabledInIncognito = + prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); - // The save offline button should not be shown on native pages. Currently, trying to - // save an offline page in incognito crashes, so don't show it on incognito either. - return shouldShowPageActionButtons() -- && (!tab.isOffTheRecord() -+ && (!tab.isOffTheRecord() || historyEnabledInIncognito - || ChromeFeatureList.isEnabled( - ChromeFeatureList.ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD)); - } + boolean onNtp = UrlUtilities.isNtpUrl(tab.getUrl()); + + if (ChromeAccessibilityUtil.get().isAccessibilityEnabled() 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 -@@ -6796,6 +6796,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6554,6 +6554,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -2073,7 +2065,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 -@@ -4090,6 +4090,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4108,6 +4108,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2089,7 +2081,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 -@@ -111,10 +111,12 @@ void PrefProvider::RegisterProfilePrefs( +@@ -114,10 +114,12 @@ void PrefProvider::RegisterProfilePrefs( PrefProvider::PrefProvider(PrefService* prefs, bool off_the_record, @@ -2102,7 +2094,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"); -@@ -137,11 +139,13 @@ PrefProvider::PrefProvider(PrefService* prefs, +@@ -140,11 +142,13 @@ PrefProvider::PrefProvider(PrefService* prefs, WebsiteSettingsRegistry* website_settings = WebsiteSettingsRegistry::GetInstance(); for (const WebsiteSettingsInfo* info : *website_settings) { @@ -2139,7 +2131,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc --- a/components/content_settings/core/browser/host_content_settings_map.cc +++ b/components/content_settings/core/browser/host_content_settings_map.cc -@@ -269,6 +269,7 @@ struct ContentSettingEntry { +@@ -287,6 +287,7 @@ struct ContentSettingEntry { HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, bool is_off_the_record, @@ -2147,7 +2139,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics) -@@ -278,6 +279,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -296,6 +297,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, #endif prefs_(prefs), is_off_the_record_(is_off_the_record), @@ -2155,7 +2147,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. store_last_modified_(store_last_modified), allow_invalid_secondary_pattern_for_testing_(false), clock_(base::DefaultClock::GetInstance()) { -@@ -291,7 +293,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -309,7 +311,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, policy_provider->AddObserver(this); auto pref_provider_ptr = std::make_unique( @@ -2167,7 +2159,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h --- a/components/content_settings/core/browser/host_content_settings_map.h +++ b/components/content_settings/core/browser/host_content_settings_map.h -@@ -83,6 +83,7 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -84,6 +84,7 @@ class HostContentSettingsMap : public content_settings::Observer, // profile or a guest session. HostContentSettingsMap(PrefService* prefs, bool is_off_the_record, @@ -2175,7 +2167,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics); -@@ -511,6 +512,8 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -544,6 +545,8 @@ class HostContentSettingsMap : public content_settings::Observer, // Whether this settings map is for an incognito or guest session. bool is_off_the_record_; @@ -2187,7 +2179,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/components/omnibox/browser/autocomplete_provider_client.cc --- a/components/omnibox/browser/autocomplete_provider_client.cc +++ b/components/omnibox/browser/autocomplete_provider_client.cc -@@ -65,3 +65,7 @@ base::WeakPtr +@@ -66,3 +66,7 @@ base::WeakPtr AutocompleteProviderClient::GetWeakPtr() { return nullptr; } @@ -2198,7 +2190,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 -@@ -152,6 +152,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; @@ -2209,7 +2201,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 -@@ -413,7 +413,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( +@@ -431,7 +431,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( // Don't make a suggest request if in incognito mode; unless for the Lens // searchboxes. @@ -2221,7 +2213,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 -@@ -915,7 +915,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( +@@ -916,7 +916,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-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 2ad28dbd..cafe1a00 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -37,9 +37,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../preferences/ChromePreferenceKeys.java | 3 + .../strings/android_chrome_strings.grd | 18 ++ chrome/common/BUILD.gn | 3 + - chrome/utility/BUILD.gn | 7 +- - .../utility/importer/bookmark_html_reader.cc | 28 +- - .../utility/importer/bookmark_html_reader.h | 8 + + chrome/utility/BUILD.gn | 5 + .../headless_select_file_dialog.cc | 4 + .../add-bookmark-import-export-actions.inc | 12 + .../add-bookmark-import-export-actions.inc | 4 + @@ -52,7 +50,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog_linux.cc | 4 + ui/shell_dialogs/select_file_dialog_linux.h | 2 + ui/shell_dialogs/select_file_dialog_win.cc | 5 + - 41 files changed, 905 insertions(+), 29 deletions(-) + 39 files changed, 872 insertions(+), 24 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc @@ -103,8 +101,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.CompositorViewHolder; -@@ -55,7 +56,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; - * {@link ChromeTabbedActivity}. +@@ -60,7 +61,7 @@ import java.util.List; + * ChromeTabbedActivity}. */ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { - private final Activity mActivity; @@ -112,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe private final BrowserControlsVisibilityDelegate mAppBrowserControlsVisibilityDelegate; private final Supplier mShareDelegateSupplier; private final Supplier mEphemeralTabCoordinatorSupplier; -@@ -85,7 +86,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { +@@ -91,7 +92,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { private NativePageFactory mNativePageFactory; public TabbedModeTabDelegateFactory( @@ -208,7 +206,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier; -@@ -62,7 +63,7 @@ import org.chromium.ui.util.ColorUtils; +@@ -63,7 +64,7 @@ import org.chromium.ui.util.ColorUtils; * Creates NativePage objects to show chrome-native:// URLs using the native Android view system. */ public class NativePageFactory { @@ -217,7 +215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final BrowserControlsManager mBrowserControlsManager; private final Supplier mCurrentTabSupplier; -@@ -85,7 +86,7 @@ public class NativePageFactory { +@@ -87,7 +88,7 @@ public class NativePageFactory { private static NativePage sTestPage; public NativePageFactory( @@ -226,7 +224,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat @NonNull BottomSheetController sheetController, @NonNull BrowserControlsManager browserControlsManager, @NonNull Supplier currentTabSupplier, -@@ -157,7 +158,7 @@ public class NativePageFactory { +@@ -162,7 +163,7 @@ public class NativePageFactory { @VisibleForTesting static class NativePageBuilder { @@ -235,7 +233,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final Supplier mNewTabPageCreationTracker; private final BrowserControlsManager mBrowserControlsManager; -@@ -262,7 +263,7 @@ public class NativePageFactory { +@@ -271,7 +272,7 @@ public class NativePageFactory { mBrowserControlsManager, mTabModelSelector, mEdgeToEdgeControllerSupplier), @@ -247,7 +245,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -248,6 +248,8 @@ static_library("browser") { +@@ -245,6 +245,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -256,7 +254,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bookmarks/chrome_bookmark_client.cc", "bookmarks/chrome_bookmark_client.h", "bookmarks/managed_bookmark_service_factory.cc", -@@ -1760,6 +1762,13 @@ static_library("browser") { +@@ -1721,6 +1723,13 @@ static_library("browser") { ] } @@ -270,7 +268,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3684,8 +3693,6 @@ static_library("browser") { +@@ -3697,8 +3706,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -637,7 +635,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef& j_folders_obj, -@@ -390,6 +411,8 @@ class BookmarkBridge : public ProfileObserver, +@@ -385,6 +406,8 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr profile_; // weak @@ -646,7 +644,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaGlobalRef java_bookmark_model_; const raw_ptr bookmark_model_; // weak const raw_ptr -@@ -404,6 +427,7 @@ class BookmarkBridge : public ProfileObserver, +@@ -399,6 +422,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; @@ -654,7 +652,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -437,6 +461,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -432,6 +456,10 @@ class BookmarkBridge : public ProfileObserver, base::TimeTicks load_start_time_; bool loading_notification_sent_ = false; @@ -724,7 +722,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Synchronously gets a list of bookmarks that match the specified search query. * -@@ -1124,6 +1159,10 @@ class BookmarkBridge { +@@ -1108,6 +1143,10 @@ class BookmarkBridge { void getChildIds( long nativeBookmarkBridge, long id, int type, List bookmarksList); @@ -784,7 +782,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java -@@ -62,6 +62,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; +@@ -63,6 +63,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.PowerBookmarkType; @@ -793,7 +791,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.ui.accessibility.AccessibilityState; import org.chromium.ui.listmenu.ListMenu; import org.chromium.ui.listmenu.ListMenuItemProperties; -@@ -80,6 +82,47 @@ import java.util.function.BooleanSupplier; +@@ -81,6 +83,47 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Predicate; @@ -841,7 +839,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Responsible for BookmarkManager business logic. */ // TODO(crbug.com/40256938): Remove BookmarkDelegate if possible. @NullMarked -@@ -90,6 +133,9 @@ class BookmarkManagerMediator +@@ -91,6 +134,9 @@ class BookmarkManagerMediator private static boolean sPreventLoadingForTesting; @@ -851,7 +849,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Keeps track of whether drag is enabled / active for bookmark lists. */ private class BookmarkDragStateDelegate implements DragStateDelegate { private BookmarkDelegate mBookmarkDelegate; -@@ -596,6 +642,14 @@ class BookmarkManagerMediator +@@ -597,6 +643,14 @@ class BookmarkManagerMediator mNativePage = nativePage; } @@ -866,7 +864,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** See BookmarkManager(Coordinator)#updateForUrl */ void updateForUrl(String url) { // Bookmark model is null if the manager has been destroyed. -@@ -768,6 +822,235 @@ class BookmarkManagerMediator +@@ -769,6 +823,235 @@ class BookmarkManagerMediator } } @@ -1196,7 +1194,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java -@@ -140,6 +140,10 @@ class BookmarkToolbarMediator +@@ -139,6 +139,10 @@ class BookmarkToolbarMediator mBookmarkDelegate = bookmarkDelegate; mModel.set( BookmarkToolbarProperties.NAVIGATE_BACK_RUNNABLE, this::onNavigateBack); @@ -1315,7 +1313,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse private boolean mLocationDialogManaged; -@@ -153,7 +153,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. +@@ -154,7 +154,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. * Called after retrieved the download directory options. * @param dirs An list of available download directories. */ @@ -1327,18 +1325,18 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -236,6 +236,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -251,6 +251,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kBatchTabRestore, &kBlockIntentsWhileLocked, &kBookmarkPaneAndroid, + &kBookmarksExportUseSaf, - &kBottomBrowserControlsRefactor, - &kTabClosureMethodRefactor, &kBrowserControlsDebugging, + &kBrowserControlsEarlyResize, + &kCacheActivityTaskID, 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 -@@ -662,6 +662,7 @@ public abstract class ChromeFeatureList { +@@ -689,6 +689,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; @@ -1401,7 +1399,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** Whether Chrome is set as the default browser. Default value is false. */ public static final String CHROME_DEFAULT_BROWSER = "applink.chrome_default_browser"; -@@ -1008,6 +1010,7 @@ public final class ChromePreferenceKeys { +@@ -1017,6 +1019,7 @@ public final class ChromePreferenceKeys { AUXILIARY_SEARCH_SCHEMA_VERSION, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, @@ -1440,7 +1438,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -352,6 +352,9 @@ static_library("common_lib") { +@@ -339,6 +339,9 @@ static_library("common_lib") { "chrome_descriptors_android.h", "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -1453,16 +1451,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn -@@ -88,8 +88,6 @@ static_library("utility") { - - if (!is_android) { - sources += [ -- "importer/bookmark_html_reader.cc", -- "importer/bookmark_html_reader.h", - "importer/bookmarks_file_importer.cc", - "importer/bookmarks_file_importer.h", - "importer/external_process_importer_bridge.cc", -@@ -222,6 +220,11 @@ static_library("utility") { +@@ -222,6 +222,11 @@ static_library("utility") { deps += [ "//chrome/services/pdf:lib" ] } @@ -1474,107 +1463,6 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn # NSS decryptor is not needed on ChromeOS. if (!is_chromeos && use_nss_certs) { sources += [ -diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/importer/bookmark_html_reader.cc ---- a/chrome/utility/importer/bookmark_html_reader.cc -+++ b/chrome/utility/importer/bookmark_html_reader.cc -@@ -16,7 +16,9 @@ - #include "base/strings/string_util.h" - #include "base/strings/utf_string_conversions.h" - #include "base/time/time.h" -+#if !BUILDFLAG(IS_ANDROID) - #include "chrome/utility/importer/favicon_reencode.h" -+#endif - #include "components/search_engines/search_terms_data.h" - #include "components/search_engines/template_url.h" - #include "components/user_data_importer/common/imported_bookmark_entry.h" -@@ -55,6 +57,7 @@ bool GetAttribute(const std::string& attribute_list, - return true; - } - -+#if !BUILDFLAG(IS_ANDROID) - // Given the URL of a page and a favicon data URL, adds an appropriate record - // to the given favicon usage vector. - void DataURLToFaviconUsage(const GURL& link_url, -@@ -88,6 +91,7 @@ void DataURLToFaviconUsage(const GURL& link_url, - - favicons->push_back(usage); - } -+#endif - - } // namespace - -@@ -108,14 +112,29 @@ static std::string stripDt(const std::string& lineDt) { - } - - void ImportBookmarksFile( -- base::RepeatingCallback cancellation_callback, -- base::RepeatingCallback valid_url_callback, -+ const base::RepeatingCallback cancellation_callback, -+ const base::RepeatingCallback valid_url_callback, - const base::FilePath& file_path, - std::vector* bookmarks, - std::vector* search_engines, - favicon_base::FaviconUsageDataList* favicons) { - std::string content; -- base::ReadFileToString(file_path, &content); -+ if (!base::ReadFileToString(file_path, &content)) { -+ LOG(ERROR) << "Could not directly read bookmarks import file"; -+ return; -+ } -+ -+ ImportBookmarksFile(cancellation_callback, valid_url_callback, -+ content, bookmarks, search_engines, favicons); -+} -+ -+void ImportBookmarksFile( -+ base::RepeatingCallback cancellation_callback, -+ base::RepeatingCallback valid_url_callback, -+ const std::string& content, -+ std::vector* bookmarks, -+ std::vector* search_engines, -+ favicon_base::FaviconUsageDataList* favicons) { - std::vector lines = base::SplitString( - content, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - -@@ -128,6 +147,7 @@ void ImportBookmarksFile( - std::vector path; - size_t toolbar_folder_index = 0; - std::string charset = "UTF-8"; // If no charset is specified, assume utf-8. -+ - for (size_t i = 0; - i < lines.size() && - (cancellation_callback.is_null() || !cancellation_callback.Run()); -@@ -219,10 +239,12 @@ void ImportBookmarksFile( - } - bookmarks->push_back(entry); - -+#if !BUILDFLAG(IS_ANDROID) - // Save the favicon. DataURLToFaviconUsage will handle the case where - // there is no favicon. - if (favicons) - DataURLToFaviconUsage(url, favicon, favicons); -+#endif - - continue; - } -diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h ---- a/chrome/utility/importer/bookmark_html_reader.h -+++ b/chrome/utility/importer/bookmark_html_reader.h -@@ -53,6 +53,14 @@ void ImportBookmarksFile( - std::vector* search_engines, - favicon_base::FaviconUsageDataList* favicons); - -+void ImportBookmarksFile( -+ const base::RepeatingCallback cancellation_callback, -+ const base::RepeatingCallback valid_url_callback, -+ const std::string& content, -+ std::vector* bookmarks, -+ std::vector* search_engines, -+ favicon_base::FaviconUsageDataList* favicons); -+ - // Returns true if |url| should be imported as a search engine, i.e. because it - // has replacement terms. Chrome treats such bookmarks as search engines rather - // than true bookmarks. diff --git a/components/headless/select_file_dialog/headless_select_file_dialog.cc b/components/headless/select_file_dialog/headless_select_file_dialog.cc --- a/components/headless/select_file_dialog/headless_select_file_dialog.cc +++ b/components/headless/select_file_dialog/headless_select_file_dialog.cc @@ -1732,7 +1620,7 @@ diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_fil diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc --- a/ui/shell_dialogs/select_file_dialog_android.cc +++ b/ui/shell_dialogs/select_file_dialog_android.cc -@@ -175,6 +175,12 @@ void SelectFileDialogImpl::SelectFileImpl( +@@ -171,6 +171,12 @@ void SelectFileDialogImpl::SelectFileImpl(Type type, owning_window->GetJavaObject()); } @@ -1748,7 +1636,7 @@ diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/s diff --git a/ui/shell_dialogs/select_file_dialog_android.h b/ui/shell_dialogs/select_file_dialog_android.h --- a/ui/shell_dialogs/select_file_dialog_android.h +++ b/ui/shell_dialogs/select_file_dialog_android.h -@@ -53,6 +53,8 @@ class SelectFileDialogImpl : public SelectFileDialog { +@@ -49,6 +49,8 @@ class SelectFileDialogImpl : public SelectFileDialog { gfx::NativeWindow owning_window, const GURL* caller) override; diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index fb76237b..72e125ba 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -52,18 +52,17 @@ See also: https://github.com/bromite/bromite/issues/1549 Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../permissions/last_tab_standing_tracker.cc | 32 ++++++++ - .../one_time_permissions_tracker.cc | 33 +++++++- + .../permissions/last_tab_standing_tracker.cc | 33 ++++++++ + .../one_time_permissions_tracker.cc | 34 +++++++- .../one_time_permissions_tracker.h | 5 +- .../one_time_permissions_tracker_factory.cc | 2 +- .../views/permissions/chip/chip_controller.cc | 2 +- ...exclusive_access_permission_prompt_view.cc | 2 +- .../permission_prompt_bubble_base_view.cc | 2 +- - .../site_settings/PermissionInfo.java | 1 + .../site_settings/SingleWebsiteSettings.java | 9 ++ .../android/website_preference_bridge.cc | 2 +- .../strings/android/browser_ui_strings.grd | 5 ++ - .../core/browser/content_settings_utils.cc | 42 ++++++++-- + .../core/browser/content_settings_utils.cc | 44 ++++++++-- .../core/browser/content_settings_utils.h | 6 ++ .../core/common/content_settings_enums.mojom | 9 ++ .../page_info/PageInfoController.java | 4 +- @@ -72,7 +71,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/page_info/page_info.cc | 2 + components/page_info/page_info.h | 1 + .../permissions/PermissionDialogDelegate.java | 13 +++ - .../PermissionDialogModelFactory.java | 82 ++++++++++++++++++- + .../PermissionDialogModelFactory.java | 83 ++++++++++++++++++- .../embedded_permission_prompt_android.cc | 3 +- .../embedded_permission_prompt_android.h | 2 +- .../permission_dialog_delegate.cc | 24 +++++- @@ -80,17 +79,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../permission_prompt_android.cc | 8 +- .../permission_prompt_android.h | 3 +- .../android/permissions_android_strings.grd | 17 ++++ - .../geolocation_permission_context_android.cc | 30 +++++-- + .../geolocation_permission_context_android.cc | 27 ++++-- .../geolocation_permission_context_android.h | 10 ++- .../embedded_permission_prompt_flow_model.cc | 2 +- - .../permissions/permission_context_base.cc | 64 +++++++++++++-- + .../permissions/permission_context_base.cc | 64 ++++++++++++-- .../permissions/permission_context_base.h | 26 +++++- components/permissions/permission_prompt.h | 3 +- components/permissions/permission_request.cc | 34 +++++++- components/permissions/permission_request.h | 18 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- - 38 files changed, 506 insertions(+), 72 deletions(-) + 37 files changed, 506 insertions(+), 73 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 @@ -128,13 +127,14 @@ diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/br LastTabStandingTracker::LastTabStandingTracker(content::BrowserContext* context) : context_(context) {} -@@ -56,4 +82,10 @@ void LastTabStandingTracker::WebContentsUnloadedOrigin( +@@ -56,4 +82,11 @@ void LastTabStandingTracker::WebContentsUnloadedOrigin( for (auto& observer : observer_list_) { observer.OnLastPageFromOriginClosed(origin); } + HostContentSettingsMap* content_settings = + permissions::PermissionsClient::Get()->GetSettingsMap(context_); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::GEOLOCATION); ++ RemoveSessionSettings(content_settings, origin, ContentSettingsType::GEOLOCATION_WITH_OPTIONS); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_MIC); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_CAMERA); + } @@ -178,13 +178,14 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.cc b/chrome OneTimePermissionsTracker::~OneTimePermissionsTracker() = default; OneTimePermissionsTracker::OriginTrackEntry::OriginTrackEntry() = default; -@@ -254,6 +280,11 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( +@@ -254,6 +280,12 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( for (auto& observer : observer_list_) { observer.OnLastPageFromOriginClosed(origin); } + HostContentSettingsMap* content_settings = + permissions::PermissionsClient::Get()->GetSettingsMap(context_); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::GEOLOCATION); ++ RemoveSessionSettings(content_settings, origin, ContentSettingsType::GEOLOCATION_WITH_OPTIONS); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_MIC); + RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_CAMERA); } @@ -232,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 -@@ -224,7 +224,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: @@ -256,7 +257,7 @@ diff --git a/chrome/browser/ui/views/permissions/exclusive_access_permission_pro diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc -@@ -297,7 +297,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { +@@ -294,7 +294,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { delegate_->Accept(); return; case PermissionDialogButton::kAcceptOnce: @@ -265,21 +266,10 @@ diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_v return; case PermissionDialogButton::kDeny: #if BUILDFLAG(IS_CHROMEOS) -diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java ---- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java -+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java -@@ -12,6 +12,7 @@ import org.chromium.components.content_settings.SessionModel; - import org.chromium.components.permissions.PermissionsAndroidFeatureList; - import org.chromium.components.permissions.PermissionsAndroidFeatureMap; - import org.chromium.content_public.browser.BrowserContextHandle; -+import org.chromium.components.content_settings.SessionModel; - - import java.io.Serializable; - import java.util.Objects; 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 -@@ -620,6 +620,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -630,6 +630,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } @RequiresNonNull({"mSite"}) @@ -291,9 +281,9 @@ 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(); -@@ -1292,6 +1297,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - AppCompatResources.getColorStateList(getContext(), mHighlightColor) - .getDefaultColor()); +@@ -1316,6 +1321,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + .getDefaultColor()); + } } + if (isSessionPermission(contentType)) { + switchPreference.setSummary(switchPreference.getSummary() + " " + @@ -305,7 +295,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc --- a/components/browser_ui/site_settings/android/website_preference_bridge.cc +++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc -@@ -209,7 +209,7 @@ void GetOrigins(JNIEnv* env, +@@ -218,7 +218,7 @@ void GetOrigins(JNIEnv* env, seen_origins.push_back(origin); insertionFunc(env, static_cast(content_type), list, ConvertOriginToJavaString(env, origin), jembedder, @@ -317,7 +307,7 @@ diff --git a/components/browser_ui/site_settings/android/website_preference_brid diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd -@@ -643,6 +643,11 @@ +@@ -646,6 +646,11 @@ URL truncated @@ -332,7 +322,7 @@ diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/comp diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc -@@ -157,6 +157,42 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints) { +@@ -182,6 +182,42 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints) { return constraints.session_model() == mojom::SessionModel::DURABLE; } @@ -373,23 +363,25 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc +} + bool CanTrackLastVisit(ContentSettingsType type) { - // Last visit is not tracked for notification permission as it shouldn't be - // auto-revoked. -@@ -240,9 +276,6 @@ const std::vector& GetTypesWithTemporaryGrants() { + DCHECK(WebsiteSettingsRegistry::GetInstance()->Get(type)) << type; + +@@ -261,10 +297,6 @@ const std::vector& GetTypesWithTemporaryGrants() { ContentSettingsType::CAPTURED_SURFACE_CONTROL, #endif ContentSettingsType::KEYBOARD_LOCK, - ContentSettingsType::GEOLOCATION, +- ContentSettingsType::GEOLOCATION_WITH_OPTIONS, - ContentSettingsType::MEDIASTREAM_MIC, - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, ContentSettingsType::SMART_CARD_DATA, ContentSettingsType::AR, -@@ -258,9 +291,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { +@@ -280,10 +312,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { ContentSettingsType::CAPTURED_SURFACE_CONTROL, #endif ContentSettingsType::KEYBOARD_LOCK, - ContentSettingsType::GEOLOCATION, +- ContentSettingsType::GEOLOCATION_WITH_OPTIONS, - ContentSettingsType::MEDIASTREAM_MIC, - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, @@ -398,7 +390,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc diff --git a/components/content_settings/core/browser/content_settings_utils.h b/components/content_settings/core/browser/content_settings_utils.h --- a/components/content_settings/core/browser/content_settings_utils.h +++ b/components/content_settings/core/browser/content_settings_utils.h -@@ -73,6 +73,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); +@@ -78,6 +78,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); // Returns whether the given type supports tracking last_visit timestamps. bool CanTrackLastVisit(ContentSettingsType type); @@ -433,7 +425,7 @@ 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 -@@ -367,9 +367,9 @@ public class PageInfoController +@@ -378,9 +378,9 @@ public class PageInfoController String name, String nameMidSentence, int type, @@ -491,7 +483,7 @@ 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 -@@ -171,6 +171,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -186,6 +186,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( std::map user_specified_settings_to_display; @@ -500,7 +492,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp for (const auto& permission : permission_info_list) { if (base::Contains(permissions_to_display, permission.type)) { -@@ -179,6 +181,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -194,6 +196,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( if (setting_to_display) { user_specified_settings_to_display[permission.type] = *setting_to_display; @@ -509,7 +501,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp } } } -@@ -195,7 +199,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -210,7 +214,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( ConvertUTF16ToJavaString(env, setting_title), ConvertUTF16ToJavaString(env, setting_title_mid_sentence), static_cast(permission), @@ -519,7 +511,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp } } -@@ -208,7 +213,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -223,7 +228,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( env, controller_jobject_, ConvertUTF16ToJavaString(env, object_title), ConvertUTF16ToJavaString(env, object_title), static_cast(chosen_object->ui_info->content_settings_type), @@ -532,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 -@@ -1253,6 +1253,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1256,6 +1256,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -544,7 +536,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h --- a/components/page_info/page_info.h +++ b/components/page_info/page_info.h -@@ -150,6 +150,7 @@ class PageInfo : private content_settings::CookieControlsObserver, +@@ -151,6 +151,7 @@ class PageInfo : private content_settings::CookieControlsObserver, content_settings::SettingSource::kNone; // Whether the permission is a one-time grant. bool is_one_time = false; @@ -555,15 +547,15 @@ 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.chromium.build.annotations.NullMarked; +@@ -16,6 +16,7 @@ import org.jni_zero.NativeMethods; + import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; - import org.chromium.components.content_settings.ContentSettingsType; import org.chromium.ui.base.WindowAndroid; +import org.chromium.components.content_settings.LifetimeMode; import java.util.ArrayList; - import java.util.Arrays; -@@ -72,6 +73,9 @@ public class PermissionDialogDelegate { + import java.util.List; +@@ -67,6 +68,9 @@ public class PermissionDialogDelegate { // Prompt(screen) variant we want to display on the dialog. private @EmbeddedPromptVariant int mEmbeddedPromptVariant; @@ -573,8 +565,8 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** * Defines a (potentially empty) list of ranges represented as pairs of , * which shall be used by the UI to format the specified ranges as bold text. -@@ -145,6 +149,15 @@ public class PermissionDialogDelegate { - .acceptThisTime(mNativeDelegatePtr, PermissionDialogDelegate.this); +@@ -139,6 +143,15 @@ public class PermissionDialogDelegate { + PermissionDialogDelegateJni.get().acceptThisTime(mNativeDelegatePtr); } + public void setSelectedLifetimeOption(int idx) { @@ -588,7 +580,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per + public void onDeny() { assert mNativeDelegatePtr != 0; - PermissionDialogDelegateJni.get().deny(mNativeDelegatePtr, PermissionDialogDelegate.this); + PermissionDialogDelegateJni.get().deny(mNativeDelegatePtr); diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModelFactory.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModelFactory.java --- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModelFactory.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModelFactory.java @@ -611,7 +603,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** This class creates the model for the permission dialog. */ @NullMarked class PermissionDialogModelFactory { -@@ -67,7 +79,75 @@ class PermissionDialogModelFactory { +@@ -67,7 +79,76 @@ class PermissionDialogModelFactory { ModalDialogProperties.ButtonStyles.PRIMARY_FILLED_NEGATIVE_OUTLINE) .with(ModalDialogProperties.CHANGE_CUSTOM_VIEW_OR_BUTTONS, true); } @@ -620,6 +612,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per + PropertyModel pm = builder.build(); + int[] types = delegate.getContentSettingsTypes(); + if (contains(types, ContentSettingsType.GEOLOCATION) || ++ contains(types, ContentSettingsType.GEOLOCATION_WITH_OPTIONS) || + contains(types, ContentSettingsType.MEDIASTREAM_MIC) || + contains(types, ContentSettingsType.MEDIASTREAM_CAMERA)) + { @@ -691,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 -@@ -119,7 +119,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { +@@ -118,7 +118,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } @@ -716,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 -@@ -139,6 +139,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { +@@ -137,6 +137,11 @@ void PermissionDialogJavaDelegate::UpdateDialog() { static_cast(permission_prompt_->GetEmbeddedPromptVariant())); } @@ -728,9 +721,9 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ // static std::unique_ptr PermissionDialogDelegate::Create( content::WebContents* web_contents, -@@ -168,6 +173,13 @@ PermissionDialogDelegate::CreateForTesting( - void PermissionDialogDelegate::Accept(JNIEnv* env, - const JavaParamRef& obj) { +@@ -165,12 +170,22 @@ PermissionDialogDelegate::CreateForTesting( + + void PermissionDialogDelegate::Accept(JNIEnv* env) { CHECK(permission_prompt_); + content_settings::mojom::LifetimeMode lifetimeOption = + static_cast( @@ -742,9 +735,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ permission_prompt_->Accept(); } -@@ -175,7 +187,10 @@ void PermissionDialogDelegate::AcceptThisTime( - JNIEnv* env, - const JavaParamRef& obj) { + void PermissionDialogDelegate::AcceptThisTime(JNIEnv* env) { CHECK(permission_prompt_); - permission_prompt_->AcceptThisTime(); + content_settings::mojom::LifetimeMode lifetimeOption = @@ -753,10 +744,10 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ + permission_prompt_->AcceptThisTime(lifetimeOption); } - void PermissionDialogDelegate::Acknowledge(JNIEnv* env, -@@ -187,6 +202,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env, - void PermissionDialogDelegate::Deny(JNIEnv* env, - const JavaParamRef& obj) { + void PermissionDialogDelegate::Acknowledge(JNIEnv* env) { +@@ -180,6 +195,13 @@ void PermissionDialogDelegate::Acknowledge(JNIEnv* env) { + + void PermissionDialogDelegate::Deny(JNIEnv* env) { CHECK(permission_prompt_); + content_settings::mojom::LifetimeMode lifetimeOption = + static_cast( @@ -782,7 +773,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.cc b/components/permissions/android/permission_prompt/permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/permission_prompt_android.cc -@@ -84,8 +84,12 @@ void PermissionPromptAndroid::Accept() { +@@ -85,8 +85,12 @@ void PermissionPromptAndroid::Accept() { delegate_->Accept(); } @@ -861,73 +852,71 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr bool is_default_search = IsRequestingOriginDSE(request_data.requesting_origin); if (decision == PermissionDecision::kAllow && -@@ -209,7 +220,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, +@@ -210,7 +221,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( request_data.embedding_origin, std::move(callback), false /* persist */, -- PermissionDecision::kDeny); -+ PermissionDecision::kDeny, lifetime_option); + PermissionDecision::kDeny, +- request_data.prompt_options); ++ request_data.prompt_options, lifetime_option); return; } -@@ -229,7 +240,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, +@@ -231,7 +242,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( request_data.embedding_origin, std::move(callback), false /* persist */, -- PermissionDecision::kDeny); -+ PermissionDecision::kDeny, lifetime_option); + PermissionDecision::kDeny, +- request_data.prompt_options); ++ request_data.prompt_options, lifetime_option); return; } -@@ -241,13 +252,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - base::BindOnce( +@@ -244,13 +255,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, weak_factory_.GetWeakPtr(), request_data.requesting_origin, -- request_data.embedding_origin, persist, decision)); -+ request_data.embedding_origin, persist, decision, lifetime_option)); + request_data.embedding_origin, persist, decision, +- request_data.prompt_options)); ++ request_data.prompt_options, lifetime_option)); return; } FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, request_data.embedding_origin, std::move(callback), -- persist, decision); -+ persist, decision, lifetime_option); +- persist, decision, request_data.prompt_options); ++ persist, decision, request_data.prompt_options, lifetime_option); } content::PermissionResult -@@ -424,7 +435,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -427,7 +438,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( const GURL& requesting_origin, const GURL& embedding_origin, bool persist, - PermissionDecision decision, + PermissionDecision decision, content_settings::mojom::LifetimeMode lifetime_option, + std::optional prompt_options, LocationSettingsDialogOutcome prompt_outcome) { bool is_default_search = IsRequestingOriginDSE(requesting_origin); - if (prompt_outcome == GRANTED) { -@@ -442,7 +453,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( - - FinishNotifyPermissionSet( - location_settings_dialog_request_id_, requesting_origin, embedding_origin, -- std::move(location_settings_dialog_callback_), persist, decision); -+ std::move(location_settings_dialog_callback_), persist, decision, -+ lifetime_option); +@@ -447,7 +458,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( + FinishNotifyPermissionSet(location_settings_dialog_request_id_, + requesting_origin, embedding_origin, + std::move(location_settings_dialog_callback_), +- persist, decision, prompt_options); ++ persist, decision, prompt_options, lifetime_option); location_settings_dialog_request_id_ = PermissionRequestID(content::GlobalRenderFrameHostId(0, 0), -@@ -455,15 +467,15 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( - const GURL& embedding_origin, +@@ -461,7 +472,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( BrowserPermissionCallback callback, bool persist, -- PermissionDecision decision) { -- GeolocationPermissionContext::NotifyPermissionSet( -+ PermissionDecision decision, content_settings::mojom::LifetimeMode lifetime_option) { -+ GeolocationPermissionContext::NotifyPermissionSetWithLifetime( - PermissionRequestData(this, id, - content::PermissionRequestDescription( - content::PermissionDescriptorUtil:: - CreatePermissionDescriptorForPermissionType( - blink::PermissionType::GEOLOCATION)), - requesting_origin), + PermissionDecision decision, +- std::optional prompt_options) { ++ std::optional prompt_options, content_settings::mojom::LifetimeMode lifetime_option) { + PermissionRequestData request_data( + this, id, + content::PermissionRequestDescription( +@@ -471,7 +482,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + request_data.prompt_options = prompt_options.value_or(std::monostate()); + GeolocationPermissionContext::NotifyPermissionSet( + request_data, - std::move(callback), persist, decision, /*is_final_decision=*/true); + std::move(callback), persist, decision, /*is_final_decision=*/true, lifetime_option); } @@ -949,20 +938,20 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr content::PermissionResult UpdatePermissionStatusWithDeviceStatus( content::WebContents* web_contents, content::PermissionResult result, -@@ -136,6 +142,7 @@ class GeolocationPermissionContextAndroid - const GURL& embedding_origin, +@@ -137,6 +143,7 @@ class GeolocationPermissionContextAndroid bool persist, PermissionDecision decision, + std::optional prompt_options, + content_settings::mojom::LifetimeMode lifetime_option, LocationSettingsDialogOutcome prompt_outcome); void FinishNotifyPermissionSet(const PermissionRequestID& id, -@@ -143,7 +150,8 @@ class GeolocationPermissionContextAndroid - const GURL& embedding_origin, +@@ -145,7 +152,8 @@ class GeolocationPermissionContextAndroid BrowserPermissionCallback callback, bool persist, -- PermissionDecision decision); -+ PermissionDecision decision, + PermissionDecision decision, +- std::optional prompt_options); ++ std::optional prompt_options, + content_settings::mojom::LifetimeMode lifetime_option); std::unique_ptr location_settings_; @@ -982,7 +971,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 -@@ -257,6 +257,17 @@ PermissionContextBase::CreatePermissionRequest( +@@ -260,6 +260,17 @@ PermissionContextBase::CreatePermissionRequest( std::move(request_finished_callback), UsesAutomaticEmbargo()); } @@ -1000,7 +989,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm bool PermissionContextBase::UsesAutomaticEmbargo() const { return true; } -@@ -548,7 +559,8 @@ void PermissionContextBase::DecidePermission( +@@ -551,7 +562,8 @@ void PermissionContextBase::DecidePermission( void PermissionContextBase::PermissionDecided( PermissionDecision decision, bool is_final_decision, @@ -1010,7 +999,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); -@@ -561,11 +573,12 @@ void PermissionContextBase::PermissionDecided( +@@ -564,11 +576,12 @@ void PermissionContextBase::PermissionDecided( // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { @@ -1027,7 +1016,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } } -@@ -655,6 +668,30 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -653,6 +666,30 @@ void PermissionContextBase::NotifyPermissionSet( bool persist, PermissionDecision decision, bool is_final_decision) { @@ -1058,7 +1047,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. -@@ -670,8 +707,8 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -668,8 +705,8 @@ void PermissionContextBase::NotifyPermissionSet( if (persist) { // Clone new value, because we need it again for the callback. @@ -1069,9 +1058,9 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } if (is_final_decision) { -@@ -708,6 +745,17 @@ void PermissionContextBase::UpdateSetting( +@@ -706,6 +743,17 @@ void PermissionContextBase::UpdateSetting( const PermissionRequestData& request_data, - base::Value setting, + PermissionSetting setting, bool is_one_time) { + UpdateSettingImpl(request_data, std::move(setting), + is_one_time, @@ -1087,7 +1076,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, -@@ -717,6 +765,8 @@ void PermissionContextBase::UpdateSetting( +@@ -715,6 +763,8 @@ void PermissionContextBase::UpdateSetting( constraints.set_session_model( is_one_time ? content_settings::mojom::SessionModel::ONE_TIME : content_settings::mojom::SessionModel::DURABLE); @@ -1128,7 +1117,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi + bool use_lifetime_option, + content_settings::mojom::LifetimeMode lifetime_option); virtual void UpdateSetting(const PermissionRequestData& request_data, - base::Value setting, + PermissionSetting setting, bool is_one_time); @@ -238,6 +255,12 @@ class PermissionContextBase : public content_settings::Observer { PermissionRequest::PermissionDecidedCallback permission_decided_callback, @@ -1156,7 +1145,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi diff --git a/components/permissions/permission_prompt.h b/components/permissions/permission_prompt.h --- a/components/permissions/permission_prompt.h +++ b/components/permissions/permission_prompt.h -@@ -68,8 +68,9 @@ class PermissionPrompt { +@@ -70,8 +70,9 @@ class PermissionPrompt { virtual GURL GetEmbeddingOrigin() const = 0; virtual void Accept() = 0; @@ -1170,7 +1159,7 @@ diff --git a/components/permissions/permission_prompt.h b/components/permissions diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc -@@ -33,6 +33,16 @@ PermissionRequest::PermissionRequest( +@@ -36,6 +36,16 @@ PermissionRequest::PermissionRequest( request_finished_callback_(std::move(request_finished_callback)), uses_automatic_embargo_(uses_automatic_embargo) {} @@ -1187,7 +1176,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio PermissionRequest::~PermissionRequest() { std::move(request_finished_callback_).Run(); } -@@ -419,20 +429,40 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -424,20 +434,40 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { return request_type() == RequestType::kStorageAccess; } @@ -1233,7 +1222,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio diff --git a/components/permissions/permission_request.h b/components/permissions/permission_request.h --- a/components/permissions/permission_request.h +++ b/components/permissions/permission_request.h -@@ -47,6 +47,12 @@ class PermissionRequest { +@@ -52,6 +52,12 @@ class PermissionRequest { bool /*is_final_decision*/, const PermissionRequestData& /*request_data*/)>; @@ -1246,7 +1235,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission // `permission_decided_callback` is called when the permission request is // resolved by the user (see comment on PermissionDecidedCallback above). // `request_finished_callback` is called when the permission request is being -@@ -61,6 +67,11 @@ class PermissionRequest { +@@ -66,6 +72,11 @@ class PermissionRequest { base::OnceClosure request_finished_callback = base::DoNothing(), bool uses_automatic_embargo = true); @@ -1258,7 +1247,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission PermissionRequest(const PermissionRequest&) = delete; PermissionRequest& operator=(const PermissionRequest&) = delete; -@@ -167,10 +178,10 @@ class PermissionRequest { +@@ -172,10 +183,10 @@ class PermissionRequest { // If |is_one_time| is true the permission will last until all tabs of // |origin| are closed or navigated away from, and then the permission will // automatically expire after 1 day. @@ -1271,7 +1260,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 -@@ -224,6 +235,9 @@ class PermissionRequest { +@@ -237,6 +248,9 @@ class PermissionRequest { // Called once a decision is made about the permission. PermissionDecidedCallback permission_decided_callback_; @@ -1284,7 +1273,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 -@@ -189,7 +189,7 @@ void PermissionRequestManager::AddRequest( +@@ -198,7 +198,7 @@ void PermissionRequestManager::AddRequest( if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDenyPermissionPrompts)) { @@ -1293,7 +1282,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p return; } -@@ -258,7 +258,7 @@ void PermissionRequestManager::AddRequest( +@@ -267,7 +267,7 @@ void PermissionRequestManager::AddRequest( if (should_auto_approve_request) { if (should_auto_approve_request == PermissionAction::GRANTED) { @@ -1302,7 +1291,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } return; } -@@ -623,7 +623,8 @@ void PermissionRequestManager::Accept() { +@@ -626,7 +626,8 @@ void PermissionRequestManager::Accept() { (*requests_iter)->request_type(), PermissionAction::GRANTED); PermissionGrantedIncludingDuplicates(requests_iter->get(), @@ -1312,7 +1301,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p #if !BUILDFLAG(IS_ANDROID) std::optional content_settings_type = -@@ -641,7 +642,7 @@ void PermissionRequestManager::Accept() { +@@ -644,7 +645,7 @@ void PermissionRequestManager::Accept() { CurrentRequestsDecided(PermissionAction::GRANTED); } @@ -1321,7 +1310,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (ignore_callbacks_from_prompt_) { return; } -@@ -655,7 +656,8 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -658,7 +659,8 @@ void PermissionRequestManager::AcceptThisTime() { (*requests_iter)->request_type(), PermissionAction::GRANTED_ONCE); PermissionGrantedIncludingDuplicates(requests_iter->get(), @@ -1331,7 +1320,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } NotifyRequestDecided(PermissionAction::GRANTED_ONCE); -@@ -663,6 +665,15 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -666,6 +668,15 @@ void PermissionRequestManager::AcceptThisTime() { } void PermissionRequestManager::Deny() { @@ -1347,7 +1336,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (ignore_callbacks_from_prompt_) { return; } -@@ -685,7 +696,7 @@ void PermissionRequestManager::Deny() { +@@ -688,7 +699,7 @@ void PermissionRequestManager::Deny() { StorePermissionActionForUMA((*requests_iter)->requesting_origin(), (*requests_iter)->request_type(), PermissionAction::DENIED); @@ -1411,7 +1400,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p diff --git a/components/permissions/permission_request_manager.h b/components/permissions/permission_request_manager.h --- a/components/permissions/permission_request_manager.h +++ b/components/permissions/permission_request_manager.h -@@ -165,8 +165,10 @@ class PermissionRequestManager +@@ -166,8 +166,10 @@ class PermissionRequestManager GURL GetRequestingOrigin() const override; GURL GetEmbeddingOrigin() const override; void Accept() override; @@ -1423,7 +1412,7 @@ diff --git a/components/permissions/permission_request_manager.h b/components/pe void Dismiss() override; void Ignore() override; void FinalizeCurrentRequests() override; -@@ -394,9 +396,12 @@ class PermissionRequestManager +@@ -413,9 +415,12 @@ class PermissionRequestManager // Calls PermissionGranted on a request and all its duplicates. void PermissionGrantedIncludingDuplicates(PermissionRequest* request, @@ -1436,6 +1425,6 @@ diff --git a/components/permissions/permission_request_manager.h b/components/pe + bool is_one_time, + content_settings::mojom::LifetimeMode lifetime_option); // Calls Cancelled on a request and all its duplicates. - void CancelledIncludingDuplicates(PermissionRequest* request, - bool is_final_decision = true); + void CancelRequestIncludingDuplicates(PermissionRequest* request, + bool is_final_decision = true); -- 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 3630cba2..3d18e982 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -29,14 +29,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/browser/bookmark_uuids.cc | 3 ++ components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 9 +++- - ...ookmark_model_merger_comparison_metrics.cc | 4 ++ .../bookmark_specifics_conversions.cc | 1 + - 27 files changed, 259 insertions(+), 14 deletions(-) + 26 files changed, 255 insertions(+), 14 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 -@@ -177,6 +177,7 @@ found in the LICENSE file. +@@ -180,6 +180,7 @@ found in the LICENSE file. @@ -55,26 +54,26 @@ 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; -@@ -276,6 +277,9 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; +@@ -287,6 +288,9 @@ import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTaskTrackerFac import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; - import org.chromium.chrome.browser.ui.extensions.ExtensionKeybindingRegistry; + import org.chromium.chrome.browser.ui.extensions.windowing.ExtensionWindowControllerBridgeFactory; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; 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; -@@ -285,6 +289,8 @@ import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController; - import org.chromium.chrome.browser.usage_stats.UsageStatsService; +@@ -298,6 +302,8 @@ import org.chromium.chrome.browser.usage_stats.UsageStatsService; 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.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.edge_to_edge.SystemBarColorHelper; import org.chromium.components.browser_ui.edge_to_edge.TabbedSystemBarColorHelper; -@@ -3497,6 +3503,8 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3739,6 +3745,8 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModelSelectorSupplier().get(), closeAllTabsRunnable); RecordUserAction.record("MobileMenuCloseAllTabs"); @@ -83,7 +82,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); -@@ -3610,6 +3618,41 @@ public class ChromeTabbedActivity extends ChromeActivity { +@@ -3863,6 +3871,41 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus); } @@ -128,7 +127,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 -@@ -264,6 +264,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -270,6 +270,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm // Bookmarks modelList.add(buildBookmarksItem()); @@ -143,7 +142,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab // Recent Tabs if (shouldShowRecentTabsItem()) modelList.add(buildRecentTabsItem()); -@@ -423,6 +431,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm +@@ -434,6 +442,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm } modelList.add(buildCloseAllTabsItem()); if (shouldShowTinkerTank()) modelList.add(buildTinkerTankItem()); @@ -212,7 +211,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( -@@ -1337,6 +1368,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1306,6 +1337,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -244,7 +243,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( -@@ -250,6 +254,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -245,6 +249,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef& j_list, jint type); @@ -299,7 +298,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Returns Id representing the special "other" folder from bookmark model. */ public @Nullable BookmarkId getOtherFolderId() { ThreadUtils.assertOnUiThread(); -@@ -898,6 +911,29 @@ class BookmarkBridge { +@@ -882,6 +895,29 @@ class BookmarkBridge { .addToReadingList(mNativeBookmarkBridge, parentId, title, url); } @@ -329,7 +328,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Helper method to mark an item as read. * -@@ -1115,6 +1151,9 @@ class BookmarkBridge { +@@ -1099,6 +1135,9 @@ class BookmarkBridge { BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl( long nativeBookmarkBridge, @JniType("GURL") GURL url); @@ -339,7 +338,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); void getTopLevelFolderIds( -@@ -1136,6 +1175,8 @@ class BookmarkBridge { +@@ -1120,6 +1159,8 @@ class BookmarkBridge { BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -460,7 +459,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 -@@ -4604,6 +4604,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4355,6 +4355,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs @@ -904,27 +903,6 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks &sync_metadata_str)) { details->set_local_or_syncable_sync_metadata_str( std::move(sync_metadata_str)); -diff --git a/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc b/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc ---- a/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc -+++ b/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc -@@ -38,6 +38,7 @@ const char kOtherBookmarksTag[] = "other_bookmarks"; - constexpr char16_t kBookmarkBarFolderName[] = u"__Bookmarks bar__"; - constexpr char16_t kOtherBookmarksFolderName[] = u"__Other bookmarks__"; - constexpr char16_t kMobileBookmarksFolderName[] = u"__Mobile bookmarks__"; -+constexpr char16_t kTabsCollectionBookmarksFolderName[] = u"__Tabs collection__"; - - using RemoteForest = BookmarkModelMerger::RemoteForest; - using RemoteTreeNode = BookmarkModelMerger::RemoteTreeNode; -@@ -129,6 +130,9 @@ std::u16string_view GetBookmarkNodeTitle(const bookmarks::BookmarkNode* node) { - return kOtherBookmarksFolderName; - case bookmarks::BookmarkNode::MOBILE: - return kMobileBookmarksFolderName; -+ case bookmarks::BookmarkNode::TABS_COLLECTION: -+ return kTabsCollectionBookmarksFolderName; -+ - } - NOTREACHED(); - } diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/components/sync_bookmarks/bookmark_specifics_conversions.cc --- a/components/sync_bookmarks/bookmark_specifics_conversions.cc +++ b/components/sync_bookmarks/bookmark_specifics_conversions.cc diff --git a/build/patches/Android-Pixel-Perfect-Mode.patch b/build/patches/Android-Pixel-Perfect-Mode.patch index 8ad6d0cc..2a869d26 100644 --- a/build/patches/Android-Pixel-Perfect-Mode.patch +++ b/build/patches/Android-Pixel-Perfect-Mode.patch @@ -20,7 +20,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html cc/trees/layer_tree_host.h | 4 ++ cc/trees/layer_tree_host_impl.cc | 4 +- cc/trees/layer_tree_impl.cc | 30 ++++++++---- - cc/trees/layer_tree_impl.h | 6 +++ + cc/trees/layer_tree_impl.h | 7 ++- cc/trees/property_tree.cc | 4 +- .../java/res/xml/developer_preferences.xml | 4 ++ .../chrome/browser/WarmupManager.java | 2 +- @@ -107,7 +107,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/display/mojom/screen_info_mojom_traits.h | 4 ++ ui/display/screen_info.h | 1 + ui/events/blink/blink_event_util.cc | 2 +- - 97 files changed, 526 insertions(+), 137 deletions(-) + 97 files changed, 526 insertions(+), 138 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sPixelPerfect.java create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Pixel-perfect-mode.grdp create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Pixel-perfect-mode.inc @@ -117,7 +117,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/cc/input/input_handler.cc b/cc/input/input_handler.cc --- a/cc/input/input_handler.cc +++ b/cc/input/input_handler.cc -@@ -671,7 +671,7 @@ InputHandlerPointerResult InputHandler::MouseMoveAt( +@@ -670,7 +670,7 @@ InputHandlerPointerResult InputHandler::MouseMoveAt( return result; } @@ -162,7 +162,7 @@ diff --git a/cc/layers/viewport.cc b/cc/layers/viewport.cc diff --git a/cc/mojo_embedder/viz_layer_context.cc b/cc/mojo_embedder/viz_layer_context.cc --- a/cc/mojo_embedder/viz_layer_context.cc +++ b/cc/mojo_embedder/viz_layer_context.cc -@@ -1238,7 +1238,7 @@ void VizLayerContext::SetVisible(bool visible) { +@@ -1242,7 +1242,7 @@ void VizLayerContext::SetVisible(bool visible) { service_->SetVisible(visible); } @@ -196,7 +196,7 @@ diff --git a/cc/trees/commit_state.h b/cc/trees/commit_state.h diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc -@@ -1348,7 +1348,7 @@ void LayerTreeHost::SetEventListenerProperties( +@@ -1347,7 +1347,7 @@ void LayerTreeHost::SetEventListenerProperties( SetNeedsCommit(); } @@ -205,7 +205,7 @@ diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc const gfx::Rect& device_viewport_rect, float device_scale_factor, const viz::LocalSurfaceId& local_surface_id_from_parent) { -@@ -1459,9 +1459,11 @@ void LayerTreeHost::SetOverscrollBehavior(const OverscrollBehavior& behavior) { +@@ -1458,9 +1458,11 @@ void LayerTreeHost::SetOverscrollBehavior(const OverscrollBehavior& behavior) { void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, float min_page_scale_factor, @@ -217,7 +217,7 @@ diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc pending_commit_state()->max_page_scale_factor == max_page_scale_factor) return; DCHECK_GE(page_scale_factor, min_page_scale_factor); -@@ -1477,6 +1479,7 @@ void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, +@@ -1476,6 +1478,7 @@ void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, pending_commit_state()->page_scale_factor = page_scale_factor; pending_commit_state()->min_page_scale_factor = min_page_scale_factor; @@ -249,16 +249,16 @@ diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h 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 -@@ -2487,7 +2487,7 @@ viz::RegionCaptureBounds LayerTreeHostImpl::CollectRegionCaptureBounds() { +@@ -2472,7 +2472,7 @@ viz::RegionCaptureBounds LayerTreeHostImpl::CollectRegionCaptureBounds() { return bounds; } -viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() { +viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() { // POI viz::CompositorFrameMetadata metadata; - metadata.frame_token = ++next_frame_token_; - metadata.device_scale_factor = active_tree_->painted_device_scale_factor() * -@@ -2646,7 +2646,7 @@ viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() { + if (settings().trees_in_viz_in_viz_process) { + // In TreesInViz mode, this function is called in client process already, +@@ -2639,7 +2639,7 @@ viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() { return metadata; } @@ -278,7 +278,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc max_page_scale_factor_(0), external_page_scale_factor_(1.f), device_scale_factor_(1.f), -@@ -449,7 +450,7 @@ void LayerTreeImpl::InvalidateRasterInducingScrolls( +@@ -451,7 +452,7 @@ void LayerTreeImpl::InvalidateRasterInducingScrolls( } } @@ -287,7 +287,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc if (!InnerViewportScrollNode()) return; -@@ -527,8 +528,13 @@ void LayerTreeImpl::UpdateViewportContainerSizes() { +@@ -526,8 +527,13 @@ void LayerTreeImpl::UpdateViewportContainerSizes() { // Adjust the outer viewport container as well, since adjusting only the // inner may cause its bounds to exceed those of the outer, causing scroll // clamping. @@ -303,7 +303,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc property_trees->SetOuterViewportContainerBoundsDelta(scaled_bounds_delta); // outer_viewport_container_bounds_delta and -@@ -819,6 +825,7 @@ void LayerTreeImpl::PullLayerTreePropertiesFrom(CommitState& commit_state) { +@@ -823,6 +829,7 @@ void LayerTreeImpl::PullLayerTreePropertiesFrom(CommitState& commit_state) { PushPageScaleFromMainThread(commit_state.page_scale_factor, commit_state.min_page_scale_factor, @@ -311,7 +311,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc commit_state.max_page_scale_factor); SetBrowserControlsParams(commit_state.browser_controls_params); -@@ -930,6 +937,7 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { +@@ -934,6 +941,7 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { // Active tree already shares the page_scale_factor object with pending // tree so only the limits need to be provided. target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), @@ -319,7 +319,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc max_page_scale_factor()); target_tree->SetExternalPageScaleFactor(external_page_scale_factor_); -@@ -1311,19 +1319,21 @@ void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { +@@ -1315,19 +1323,21 @@ void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, float min_page_scale_factor, @@ -343,7 +343,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc if (changed_page_scale) { DidUpdatePageScale(); -@@ -1332,12 +1342,13 @@ void LayerTreeImpl::SetPageScaleFactorAndLimitsForDisplayTree( +@@ -1336,12 +1346,13 @@ void LayerTreeImpl::SetPageScaleFactorAndLimitsForDisplayTree( void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, float min_page_scale_factor, @@ -358,7 +358,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc if (page_scale_factor) { DCHECK(!IsActiveTree() || !host_impl_->pending_tree()); -@@ -1442,12 +1453,15 @@ void LayerTreeImpl::PushBrowserControls( +@@ -1446,12 +1457,15 @@ void LayerTreeImpl::PushBrowserControls( } bool LayerTreeImpl::SetPageScaleFactorLimits(float min_page_scale_factor, @@ -374,7 +374,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc max_page_scale_factor_ = max_page_scale_factor; return true; -@@ -2366,7 +2380,7 @@ ScrollbarSet LayerTreeImpl::ScrollbarsFor(ElementId scroll_element_id) const { +@@ -2357,7 +2371,7 @@ ScrollbarSet LayerTreeImpl::ScrollbarsFor(ElementId scroll_element_id) const { return scrollbars; } @@ -383,7 +383,7 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc const gfx::PointF& screen_space_point, const gfx::Transform& local_space_to_screen_space_transform, const gfx::Rect& local_space_rect, -@@ -2952,7 +2966,7 @@ static gfx::SelectionBound ComputeViewportSelectionBound( +@@ -2943,7 +2957,7 @@ static gfx::SelectionBound ComputeViewportSelectionBound( return viewport_bound; } @@ -395,17 +395,24 @@ diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h -@@ -380,7 +380,9 @@ class CC_EXPORT LayerTreeImpl { +@@ -380,6 +380,7 @@ class CC_EXPORT LayerTreeImpl { void SetPageScaleOnActiveTree(float active_page_scale); void PushPageScaleFromMainThread(float page_scale_factor, float min_page_scale_factor, + float browser_control_scale_factor, float max_page_scale_factor); -+ float browser_control_scale_factor() const { return browser_control_scale_factor_; } + const LayerSelection& selection() const { return selection_; } float current_page_scale_factor() const { - return page_scale_factor()->Current(IsActiveTree()); +@@ -387,7 +388,7 @@ class CC_EXPORT LayerTreeImpl { } -@@ -845,6 +847,7 @@ class CC_EXPORT LayerTreeImpl { + float min_page_scale_factor() const { return min_page_scale_factor_; } + float max_page_scale_factor() const { return max_page_scale_factor_; } +- ++ float browser_control_scale_factor() const { return browser_control_scale_factor_; } + float page_scale_delta() const { return page_scale_factor()->Delta(); } + + SyncedScale* page_scale_factor(); +@@ -849,6 +850,7 @@ class CC_EXPORT LayerTreeImpl { void SetPageScaleFactorAndLimitsForDisplayTree(float page_scale_factor, float min_page_scale_factor, @@ -413,7 +420,7 @@ diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h float max_page_scale_factor); LayerTreeHostImpl* host_impl() { return host_impl_; } -@@ -869,8 +872,10 @@ class CC_EXPORT LayerTreeImpl { +@@ -873,8 +875,10 @@ class CC_EXPORT LayerTreeImpl { float ClampPageScaleFactorToLimits(float page_scale_factor) const; void PushPageScaleFactorAndLimits(const float* page_scale_factor, float min_page_scale_factor, @@ -424,7 +431,7 @@ diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h float max_page_scale_factor); void DidUpdatePageScale(); void PushBrowserControls(const float* top_controls_shown_ratio, -@@ -909,6 +914,7 @@ class CC_EXPORT LayerTreeImpl { +@@ -913,6 +917,7 @@ class CC_EXPORT LayerTreeImpl { scoped_refptr page_scale_factor_; float min_page_scale_factor_; @@ -468,12 +475,12 @@ 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/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java -@@ -312,7 +312,7 @@ public class WarmupManager { - Rect bounds = TabUtils.estimateContentSize(context); - int width = bounds.right - bounds.left; +@@ -321,7 +321,7 @@ public class WarmupManager { int height = bounds.bottom - bounds.top; -- tab.getWebContents().setSize(width, height); -+ tab.getWebContents().setSize(width, height, 0); + webContents = tab.getWebContents(); + assumeNonNull(webContents); +- webContents.setSize(width, height); ++ webContents.setSize(width, height, 0); // Reparent the tab to detach it from the current activity. ReparentingTask.from(tab).detach(); @@ -490,7 +497,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.base.ActivityState; import org.chromium.base.ApplicationStatus; import org.chromium.base.BuildInfo; -@@ -509,7 +512,25 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -516,7 +519,25 @@ public abstract class ChromeActivity extends AsyncInitializationActivity // Ensure that mConfig is initialized before tablet mode changes. mConfig = getResources().getConfiguration(); @@ -520,7 +527,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/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -@@ -925,7 +925,7 @@ public class CompositorViewHolder extends FrameLayout +@@ -929,7 +929,7 @@ public class CompositorViewHolder extends FrameLayout int viewportInsets = controlsInsets + keyboardInset; if (isAttachedToWindow(view)) { @@ -529,7 +536,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp // Dispatch the geometrychange JavaScript event to the page. // TODO(bokan): This doesn't belong in updateWebContentsSize. Ideally the content/ layer -@@ -945,7 +945,7 @@ public class CompositorViewHolder extends FrameLayout +@@ -949,7 +949,7 @@ public class CompositorViewHolder extends FrameLayout MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); @@ -541,19 +548,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java -@@ -610,7 +610,7 @@ public class OverlayPanelContent { +@@ -617,7 +617,7 @@ public class OverlayPanelContent { OverlayPanelContentJni.get() .onPhysicalBackingSizeChanged( mNativeOverlayPanelContentPtr, webContents, mContentViewWidth, viewHeight); -- mWebContents.setSize(mContentViewWidth, viewHeight); -+ mWebContents.setSize(mContentViewWidth, viewHeight, (mSubtractBarHeight ? mBarHeightPx : 0)); +- assumeNonNull(mWebContents).setSize(mContentViewWidth, viewHeight); ++ assumeNonNull(mWebContents).setSize(mContentViewWidth, viewHeight, (mSubtractBarHeight ? mBarHeightPx : 0)); } /** Destroy the native component of this class. */ 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 -@@ -1864,7 +1864,7 @@ class TabImpl implements Tab { +@@ -1869,7 +1869,7 @@ class TabImpl implements Tab { // so that next onShow() call won't send a resize message with zero size // to the renderer process. This prevents the size fluttering that may confuse // Blink and break rendered result (see http://crbug.com/340987). @@ -562,7 +569,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav if (bounds != null) { assert mNativeTabAndroid != 0; -@@ -2237,7 +2237,7 @@ class TabImpl implements Tab { +@@ -2243,7 +2243,7 @@ class TabImpl implements Tab { Supplier compositorViewHolderSupplier = assumeNonNull(getActivity()).getCompositorViewHolderSupplier(); View compositorView = compositorViewHolderSupplier.get(); @@ -607,7 +614,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/setting diff --git a/chrome/browser/android/bottombar/overlay_panel_content.cc b/chrome/browser/android/bottombar/overlay_panel_content.cc --- a/chrome/browser/android/bottombar/overlay_panel_content.cc +++ b/chrome/browser/android/bottombar/overlay_panel_content.cc -@@ -51,7 +51,7 @@ void OverlayPanelContent::OnPhysicalBackingSizeChanged( +@@ -53,7 +53,7 @@ void OverlayPanelContent::OnPhysicalBackingSizeChanged( jint height) { gfx::Size size(width, height); web_contents->GetNativeView()->OnPhysicalBackingSizeChanged(size); @@ -721,7 +728,7 @@ diff --git a/components/input/BUILD.gn b/components/input/BUILD.gn +++ b/components/input/BUILD.gn @@ -101,6 +101,7 @@ component("input") { "//ui/events:gesture_detection", - "//ui/events/blink:blink", + "//ui/events/blink", "//ui/events/gestures/blink", + "//tools/v8_context_snapshot:buildflags", ] @@ -730,7 +737,7 @@ diff --git a/components/input/BUILD.gn b/components/input/BUILD.gn diff --git a/components/input/android_input_helper.cc b/components/input/android_input_helper.cc --- a/components/input/android_input_helper.cc +++ b/components/input/android_input_helper.cc -@@ -132,7 +132,7 @@ void AndroidInputHelper::ProcessAckedTouchEvent( +@@ -144,7 +144,7 @@ void AndroidInputHelper::ProcessAckedTouchEvent( } } @@ -836,7 +843,7 @@ diff --git a/components/input/render_widget_targeter.cc b/components/input/rende diff --git a/components/thin_webview/internal/thin_webview.cc b/components/thin_webview/internal/thin_webview.cc --- a/components/thin_webview/internal/thin_webview.cc +++ b/components/thin_webview/internal/thin_webview.cc -@@ -107,7 +107,7 @@ void ThinWebView::ResizeWebContents(const gfx::Size& size) { +@@ -105,7 +105,7 @@ void ThinWebView::ResizeWebContents(const gfx::Size& size) { return; web_contents_->GetNativeView()->OnPhysicalBackingSizeChanged(size); @@ -848,7 +855,7 @@ diff --git a/components/thin_webview/internal/thin_webview.cc b/components/thin_ diff --git a/components/viz/service/input/input_manager.cc b/components/viz/service/input/input_manager.cc --- a/components/viz/service/input/input_manager.cc +++ b/components/viz/service/input/input_manager.cc -@@ -399,7 +399,7 @@ const DisplayHitTestQueryMap& InputManager::GetDisplayHitTestQuery() const { +@@ -418,7 +418,7 @@ const DisplayHitTestQueryMap& InputManager::GetDisplayHitTestQuery() const { return frame_sink_manager_->GetDisplayHitTestQuery(); } @@ -884,7 +891,7 @@ diff --git a/components/viz/service/input/render_input_router_support_child_fram diff --git a/components/viz/service/layers/layer_context_impl.cc b/components/viz/service/layers/layer_context_impl.cc --- a/components/viz/service/layers/layer_context_impl.cc +++ b/components/viz/service/layers/layer_context_impl.cc -@@ -1757,7 +1757,7 @@ base::expected LayerContextImpl::DoUpdateDisplayTree( +@@ -1781,7 +1781,7 @@ base::expected LayerContextImpl::DoUpdateDisplayTree( return base::unexpected("Invalid page scale factors"); } layers.SetPageScaleFactorAndLimitsForDisplayTree( @@ -896,7 +903,7 @@ diff --git a/components/viz/service/layers/layer_context_impl.cc b/components/vi diff --git a/content/browser/android/selection/selection_popup_controller.cc b/content/browser/android/selection/selection_popup_controller.cc --- a/content/browser/android/selection/selection_popup_controller.cc +++ b/content/browser/android/selection/selection_popup_controller.cc -@@ -182,7 +182,7 @@ void SelectionPopupController::MoveRangeSelectionExtent( +@@ -179,7 +179,7 @@ void SelectionPopupController::MoveRangeSelectionExtent( web_contents_impl->MoveRangeSelectionExtent(gfx::ToRoundedPoint(extent)); } @@ -905,7 +912,7 @@ diff --git a/content/browser/android/selection/selection_popup_controller.cc b/c const gfx::PointF& base, const gfx::PointF& extent) { auto* web_contents_impl = static_cast(web_contents()); -@@ -303,7 +303,8 @@ bool SelectionPopupController::ShowSelectionMenu( +@@ -300,7 +300,8 @@ bool SelectionPopupController::ShowSelectionMenu( is_password_type, jselected_text, params.selection_start_offset, can_select_all, can_edit_richly, should_suggest, static_cast(params.source_type), @@ -926,7 +933,7 @@ diff --git a/content/browser/renderer_host/cross_process_frame_connector.cc b/co #include "third_party/blink/public/common/frame/frame_visual_properties.h" #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/mojom/frame/intrinsic_sizing_info.mojom.h" -@@ -210,9 +211,12 @@ void CrossProcessFrameConnector::SynchronizeVisualProperties( +@@ -215,9 +216,12 @@ void CrossProcessFrameConnector::SynchronizeVisualProperties( render_widget_host->SetAutoResize(visual_properties.auto_resize_enabled, visual_properties.min_size_for_auto_resize, visual_properties.max_size_for_auto_resize); @@ -940,7 +947,7 @@ diff --git a/content/browser/renderer_host/cross_process_frame_connector.cc b/co visual_properties.is_pinch_gesture_active, visual_properties.visible_viewport_size, visual_properties.compositor_viewport, -@@ -465,7 +469,7 @@ void CrossProcessFrameConnector::SetVisibilityForChildViews( +@@ -470,7 +474,7 @@ void CrossProcessFrameConnector::SetVisibilityForChildViews( current_child_frame_host()->SetVisibilityForChildViews(visible); } @@ -949,7 +956,7 @@ diff --git a/content/browser/renderer_host/cross_process_frame_connector.cc b/co const gfx::Size& local_frame_size) { has_size_ = true; const float dsf = screen_infos_.current().device_scale_factor; -@@ -474,7 +478,7 @@ void CrossProcessFrameConnector::SetLocalFrameSize( +@@ -479,7 +483,7 @@ void CrossProcessFrameConnector::SetLocalFrameSize( gfx::ScaleToRoundedSize(local_frame_size, 1.f / dsf); } @@ -985,7 +992,7 @@ diff --git a/content/browser/renderer_host/input/touch_selection_controller_clie 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 -@@ -9204,7 +9204,7 @@ void RenderFrameHostImpl::ShowPopupMenu( +@@ -9260,7 +9260,7 @@ void RenderFrameHostImpl::ShowPopupMenu( #endif } @@ -997,7 +1004,7 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc -@@ -1041,7 +1041,20 @@ blink::VisualProperties RenderWidgetHostImpl::GetVisualProperties() { +@@ -1055,7 +1055,20 @@ blink::VisualProperties RenderWidgetHostImpl::GetVisualProperties() { blink::VisualProperties visual_properties; visual_properties.screen_infos = GetScreenInfos(); auto& current_screen_info = visual_properties.screen_infos.mutable_current(); @@ -1019,7 +1026,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/ // For testing, override the raster color profile. // Note: this needs to be done here and not earlier in the pipeline because // Mac uses the display color space to update an NSSurface and this setting -@@ -1146,6 +1159,13 @@ blink::VisualProperties RenderWidgetHostImpl::GetVisualProperties() { +@@ -1160,6 +1173,13 @@ blink::VisualProperties RenderWidgetHostImpl::GetVisualProperties() { visual_properties.compositing_scale_factor = properties_from_parent_local_root_.compositing_scale_factor; @@ -1033,7 +1040,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/ #if BUILDFLAG(IS_MAC) // Only macOS cursor scaling affects CSS custom cursor images for now. visual_properties.cursor_accessibility_scale_factor = -@@ -1326,8 +1346,10 @@ bool RenderWidgetHostImpl::SynchronizeVisualProperties( +@@ -1340,8 +1360,10 @@ bool RenderWidgetHostImpl::SynchronizeVisualProperties( } } @@ -1046,7 +1053,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/ // If we do not have a valid viz::LocalSurfaceId then we are a child frame // waiting on the id to be propagated from our parent. We cannot create a hash -@@ -3958,7 +3980,7 @@ void RenderWidgetHostImpl::IntrinsicSizingInfoChanged( +@@ -3987,7 +4009,7 @@ void RenderWidgetHostImpl::IntrinsicSizingInfoChanged( // porting drag-and-drop calls to Mojo, so that RenderWidgetHostImpl bypasses // RenderWidget to talk the the WebFrameWidget and needs to perform the scale // operation itself. @@ -1058,7 +1065,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/ 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 -@@ -82,6 +82,7 @@ +@@ -83,6 +83,7 @@ #include "content/public/browser/render_widget_host_iterator.h" #include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" @@ -1066,7 +1073,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ #include "third_party/blink/public/mojom/input/input_handler.mojom.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkCanvas.h" -@@ -951,7 +952,7 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -949,7 +950,7 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( ? SK_ColorTRANSPARENT : metadata.root_background_color.toSkColor()); @@ -1075,7 +1082,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ overscroll_controller_->OnFrameMetadataUpdated( metadata.page_scale_factor, metadata.device_scale_factor, metadata.scrollable_viewport_size, metadata.root_layer_size, -@@ -1262,6 +1263,12 @@ gfx::Size RenderWidgetHostViewAndroid::GetRequestedRendererSizeDevicePx() { +@@ -1248,6 +1249,12 @@ gfx::Size RenderWidgetHostViewAndroid::GetRequestedRendererSizeDevicePx() { default_bounds_dip_.height() * scale_factor); } @@ -1085,10 +1092,10 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ + DCHECK(size.width() == 0 || size.width() == 412 || size.height() == 412); + return size; + } - return view_.GetSizeDevicePx(); + const float scale_factor = GetDeviceScaleFactor() / view_.GetDipScale(); + return gfx::ScaleToCeiledSize(view_.GetSizeDevicePx(), scale_factor); } - -@@ -1286,6 +1293,10 @@ void RenderWidgetHostViewAndroid::SetInsets(const gfx::Insets& insets) { +@@ -1273,6 +1280,10 @@ void RenderWidgetHostViewAndroid::SetInsets(const gfx::Insets& insets) { NOTREACHED(); } @@ -1099,7 +1106,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ gfx::Size RenderWidgetHostViewAndroid::GetCompositorViewportPixelSize() { if (!view_.parent()) { if (default_bounds_dip_.IsEmpty()) { -@@ -1414,7 +1425,7 @@ viz::SurfaceId RenderWidgetHostViewAndroid::GetCurrentSurfaceId() const { +@@ -1408,7 +1419,7 @@ viz::SurfaceId RenderWidgetHostViewAndroid::GetCurrentSurfaceId() const { : viz::SurfaceId(); } @@ -1108,8 +1115,8 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ const gfx::PointF& point, RenderWidgetHostViewInput* target_view, gfx::PointF* transformed_point) { -@@ -1798,7 +1809,7 @@ bool RenderWidgetHostViewAndroid::HasFallbackSurface() const { - return delegated_frame_host_ && delegated_frame_host_->HasFallbackSurface(); +@@ -1822,7 +1833,7 @@ bool RenderWidgetHostViewAndroid::HasFallbackSurface() const { + return delegated_frame_host_->HasFallbackSurface(); } -void RenderWidgetHostViewAndroid::CopyFromSurface( @@ -1120,7 +1127,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h -@@ -159,6 +159,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid +@@ -161,6 +161,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid gfx::Size GetRequestedRendererSizeDevicePx() override; gfx::Size GetVisibleViewportSize() override; gfx::Size GetVisibleViewportSizeDevicePx() override; @@ -1154,7 +1161,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/con diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h --- a/content/browser/renderer_host/render_widget_host_view_base.h +++ b/content/browser/renderer_host/render_widget_host_view_base.h -@@ -274,6 +274,8 @@ class CONTENT_EXPORT RenderWidgetHostViewBase +@@ -273,6 +273,8 @@ class CONTENT_EXPORT RenderWidgetHostViewBase // The size of the view's backing surface in non-DPI-adjusted pixels. virtual gfx::Size GetCompositorViewportPixelSize(); @@ -1191,7 +1198,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc --- a/content/browser/web_contents/web_contents_android.cc +++ b/content/browser/web_contents/web_contents_android.cc -@@ -822,8 +822,11 @@ WebContentsAndroid::GetFullscreenVideoSize(JNIEnv* env) { +@@ -826,8 +826,11 @@ WebContentsAndroid::GetFullscreenVideoSize(JNIEnv* env) { return Java_WebContentsImpl_createSize(env, size.width(), size.height()); } @@ -1208,7 +1215,7 @@ diff --git a/content/browser/web_contents/web_contents_android.cc b/content/brow diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h --- a/content/browser/web_contents/web_contents_android.h +++ b/content/browser/web_contents/web_contents_android.h -@@ -183,7 +183,7 @@ class CONTENT_EXPORT WebContentsAndroid { +@@ -185,7 +185,7 @@ class CONTENT_EXPORT WebContentsAndroid { base::android::ScopedJavaLocalRef GetFullscreenVideoSize( JNIEnv* env); @@ -1220,7 +1227,7 @@ diff --git a/content/browser/web_contents/web_contents_android.h b/content/brows diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -533,7 +533,11 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( +@@ -527,7 +527,11 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( !command_line.HasSwitch(switches::kFingerprintingCanvasImageDataNoise)); // CAUTION: Only add custom enabling logic here if it cannot // be covered by the other functions. @@ -1236,7 +1243,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java -@@ -520,7 +520,8 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper +@@ -519,7 +519,8 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper boolean canRichlyEdit, boolean shouldSuggest, int sourceType, @@ -1246,7 +1253,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/select RecordHistogram.recordEnumeratedHistogram( "Android.ShowSelectionMenuSourceType", sourceType, -@@ -531,6 +532,8 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper +@@ -530,6 +531,8 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper mXDip = xDip; mYDip = yDip; mSelectionRect.set(left, top, right, offsetBottom); @@ -1258,7 +1265,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/select diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java -@@ -977,9 +977,9 @@ public class WebContentsImpl +@@ -982,9 +982,9 @@ public class WebContentsImpl } @Override @@ -1270,7 +1277,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/webcon } @Override -@@ -1442,7 +1442,7 @@ public class WebContentsImpl +@@ -1436,7 +1436,7 @@ public class WebContentsImpl Rect getFullscreenVideoSize(long nativeWebContentsAndroid); @@ -1282,7 +1289,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/webcon diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java -@@ -532,7 +532,7 @@ public interface WebContents extends Parcelable { +@@ -538,7 +538,7 @@ public interface WebContents extends Parcelable { * @param width The width of the view. * @param height The height of the view. */ @@ -1332,7 +1339,7 @@ new file mode 100644 diff --git a/services/viz/public/mojom/compositing/layer_context.mojom b/services/viz/public/mojom/compositing/layer_context.mojom --- a/services/viz/public/mojom/compositing/layer_context.mojom +++ b/services/viz/public/mojom/compositing/layer_context.mojom -@@ -74,6 +74,7 @@ struct LayerTreeUpdate { +@@ -81,6 +81,7 @@ struct LayerTreeUpdate { // The page scale factors set by the tree's client. All must be positive, // non-zero. float page_scale_factor; @@ -1426,7 +1433,7 @@ diff --git a/third_party/blink/public/mojom/widget/visual_properties.mojom b/thi diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/web/web_view.h --- a/third_party/blink/public/web/web_view.h +++ b/third_party/blink/public/web/web_view.h -@@ -238,6 +238,7 @@ class BLINK_EXPORT WebView { +@@ -243,6 +243,7 @@ class BLINK_EXPORT WebView { // Minimum and Maximum as computed as a combination of default, page defined, // UA, etc. constraints. virtual float MinimumPageScaleFactor() const = 0; @@ -1437,7 +1444,7 @@ diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/ diff --git a/third_party/blink/renderer/core/canvas_interventions/canvas_interventions_helper.cc b/third_party/blink/renderer/core/canvas_interventions/canvas_interventions_helper.cc --- a/third_party/blink/renderer/core/canvas_interventions/canvas_interventions_helper.cc +++ b/third_party/blink/renderer/core/canvas_interventions/canvas_interventions_helper.cc -@@ -50,6 +50,7 @@ namespace { +@@ -49,6 +49,7 @@ namespace { bool ShouldApplyNoise(CanvasRenderingContext* rendering_context, scoped_refptr& snapshot, ExecutionContext* execution_context) { @@ -1469,7 +1476,7 @@ diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/b 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 -@@ -1247,8 +1247,19 @@ void WebViewImpl::UpdateICBAndResizeViewport( +@@ -1258,8 +1258,19 @@ void WebViewImpl::UpdateICBAndResizeViewport( if (GetBrowserControls().PermittedState() == cc::BrowserControlsState::kBoth && !GetBrowserControls().ShrinkViewport()) { @@ -1491,7 +1498,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p } GetPageScaleConstraintsSet().DidChangeInitialContainingBlockSize(icb_size); -@@ -1328,7 +1339,8 @@ void WebViewImpl::DidUpdateBrowserControls() { +@@ -1339,7 +1350,8 @@ void WebViewImpl::DidUpdateBrowserControls() { ResizeViewportAnchor::ResizeScope resize_scope(*resize_viewport_anchor_); visual_viewport.SetBrowserControlsAdjustment( @@ -1501,7 +1508,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p } } -@@ -1392,7 +1404,7 @@ void WebViewImpl::ResizeWithBrowserControls( +@@ -1403,7 +1415,7 @@ void WebViewImpl::ResizeWithBrowserControls( float bottom_controls_height, bool browser_controls_shrink_layout) { ResizeWithBrowserControls( @@ -1510,7 +1517,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p {top_controls_height, GetBrowserControls().TopMinHeight(), bottom_controls_height, GetBrowserControls().BottomMinHeight(), GetBrowserControls().AnimateHeightChanges(), -@@ -1402,6 +1414,8 @@ void WebViewImpl::ResizeWithBrowserControls( +@@ -1413,6 +1425,8 @@ void WebViewImpl::ResizeWithBrowserControls( void WebViewImpl::ResizeWithBrowserControls( const gfx::Size& main_frame_widget_size, const gfx::Size& visible_viewport_size, @@ -1519,7 +1526,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p cc::BrowserControlsParams browser_controls_params) { if (should_auto_resize_) { // When auto-resizing only the viewport size comes from the browser, while -@@ -1410,6 +1424,11 @@ void WebViewImpl::ResizeWithBrowserControls( +@@ -1421,6 +1435,11 @@ void WebViewImpl::ResizeWithBrowserControls( return; } @@ -1531,7 +1538,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p if (size_ == main_frame_widget_size && GetPage()->GetVisualViewport().Size() == visible_viewport_size && GetBrowserControls().Params() == browser_controls_params) -@@ -2098,7 +2117,7 @@ void WebViewImpl::DidAttachLocalMainFrame() { +@@ -2092,7 +2111,7 @@ void WebViewImpl::DidAttachLocalMainFrame() { web_preferences_.prefers_reduced_motion); MainFrameImpl()->FrameWidgetImpl()->SetPageScaleStateAndLimits( viewport.Scale(), viewport.IsPinchGestureActive(), @@ -1540,7 +1547,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p // Prevent main frame updates while the main frame is loading until enough // progress is made and BeginMainFrames are explicitly asked for. scoped_defer_main_frame_update_ = -@@ -2903,7 +2922,7 @@ void WebViewImpl::RefreshPageScaleFactor() { +@@ -2900,7 +2919,7 @@ void WebViewImpl::RefreshPageScaleFactor() { auto& viewport = GetPage()->GetVisualViewport(); MainFrameImpl()->FrameWidgetImpl()->SetPageScaleStateAndLimits( viewport.Scale(), viewport.IsPinchGestureActive(), @@ -1549,7 +1556,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p } } -@@ -2980,7 +2999,7 @@ void WebViewImpl::UpdatePageDefinedViewportConstraints( +@@ -2977,7 +2996,7 @@ void WebViewImpl::UpdatePageDefinedViewportConstraints( TextAutosizer::UpdatePageInfoInAllFrames(GetPage()->MainFrame()); } @@ -1558,7 +1565,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p if (should_auto_resize_ || !MainFrameImpl()) return; -@@ -3214,6 +3233,10 @@ float WebViewImpl::MinimumPageScaleFactor() const { +@@ -3211,6 +3230,10 @@ float WebViewImpl::MinimumPageScaleFactor() const { return GetPageScaleConstraintsSet().FinalConstraints().minimum_scale; } @@ -1569,7 +1576,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p float WebViewImpl::MaximumPageScaleFactor() const { return GetPageScaleConstraintsSet().FinalConstraints().maximum_scale; } -@@ -3263,7 +3286,7 @@ void WebViewImpl::SendResizeEventForMainFrame() { +@@ -3260,7 +3283,7 @@ void WebViewImpl::SendResizeEventForMainFrame() { auto& viewport = GetPage()->GetVisualViewport(); MainFrameImpl()->FrameWidgetImpl()->SetPageScaleStateAndLimits( viewport.Scale(), viewport.IsPinchGestureActive(), @@ -1578,7 +1585,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p } } -@@ -3799,7 +3822,7 @@ void WebViewImpl::PageScaleFactorChanged() { +@@ -3800,7 +3823,7 @@ void WebViewImpl::PageScaleFactorChanged() { DCHECK(viewport.IsActiveViewport()); MainFrameImpl()->FrameWidgetImpl()->SetPageScaleStateAndLimits( viewport.Scale(), viewport.IsPinchGestureActive(), @@ -1590,7 +1597,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_p diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h --- a/third_party/blink/renderer/core/exported/web_view_impl.h +++ b/third_party/blink/renderer/core/exported/web_view_impl.h -@@ -168,6 +168,7 @@ class CORE_EXPORT WebViewImpl final : public WebView, +@@ -170,6 +170,7 @@ class CORE_EXPORT WebViewImpl final : public WebView, void AdvanceFocus(bool reverse) override; float PageScaleFactor() const override; float MinimumPageScaleFactor() const override; @@ -1598,7 +1605,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_pa float MaximumPageScaleFactor() const override; void SetDefaultPageScaleLimits(float min_scale, float max_scale) override; void SetInitialPageScaleOverride(float) override; -@@ -282,6 +283,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, +@@ -284,6 +285,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, // includes all browser controls params such as the min heights. void ResizeWithBrowserControls(const gfx::Size& main_frame_widget_size, const gfx::Size& visible_viewport_size, @@ -1607,7 +1614,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_pa cc::BrowserControlsParams); // Requests a page-scale animation based on the specified point/rect. -@@ -820,6 +823,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, +@@ -824,6 +827,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, // The upper bound on the size when auto-resizing. gfx::Size max_auto_size_; @@ -1619,7 +1626,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_pa diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc -@@ -1719,8 +1719,11 @@ void LocalFrameView::PerformPostLayoutTasks(bool visual_viewport_size_changed) { +@@ -1720,8 +1720,11 @@ void LocalFrameView::PerformPostLayoutTasks(bool visual_viewport_size_changed) { } float LocalFrameView::InputEventsScaleFactor() const { @@ -1755,7 +1762,7 @@ diff --git a/third_party/blink/renderer/core/frame/visual_viewport.h b/third_par diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc -@@ -1954,6 +1954,9 @@ void WebFrameWidgetImpl::UpdateVisualProperties( +@@ -1886,6 +1886,9 @@ void WebFrameWidgetImpl::UpdateVisualProperties( // All non-top-level Widgets (child local-root frames, GuestViews, // etc.) propagate and consume the page scale factor as "external", meaning // that it comes from the top level widget's page scale. @@ -1765,7 +1772,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th if (!ForTopMostMainFrame()) { // The main frame controls the page scale factor, from blink. For other // frame widgets, the page scale from pinch zoom and compositing scale is -@@ -1961,7 +1964,7 @@ void WebFrameWidgetImpl::UpdateVisualProperties( +@@ -1893,7 +1896,7 @@ void WebFrameWidgetImpl::UpdateVisualProperties( // blink doesn't need to know this page scale factor outside the main frame, // the compositor does in order to produce its output at the correct scale. float combined_scale_factor = visual_properties.page_scale_factor * @@ -1774,7 +1781,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th widget_base_->LayerTreeHost()->SetExternalPageScaleFactor( combined_scale_factor, visual_properties.is_pinch_gesture_active); -@@ -1974,7 +1977,7 @@ void WebFrameWidgetImpl::UpdateVisualProperties( +@@ -1906,7 +1909,7 @@ void WebFrameWidgetImpl::UpdateVisualProperties( // Ensure the external scale factor in top-level widgets is reset as it may // be leftover from when a widget was nested and was promoted to top level. widget_base_->LayerTreeHost()->SetExternalPageScaleFactor( @@ -1783,7 +1790,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th /*is_pinch_gesture_active=*/false); } -@@ -2018,6 +2021,18 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( +@@ -1950,6 +1953,18 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( new_compositor_viewport_pixel_rect, device_scale_factor_for_testing_ / non_testing_device_scale_factor_); } @@ -1802,7 +1809,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th if (ForMainFrame()) { if (size_ != new_size) { -@@ -2034,6 +2049,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( +@@ -1966,6 +1981,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( size_.value(), widget_base_->DIPsToCeiledBlinkSpace( widget_base_->VisibleViewportSize()), @@ -1811,7 +1818,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th visual_properties.browser_controls_params); return; } -@@ -2067,6 +2084,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( +@@ -1999,6 +2016,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( View()->ResizeWithBrowserControls( size_.value(), widget_base_->VisibleViewportSize(), @@ -1820,7 +1827,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th visual_properties.browser_controls_params); } -@@ -2442,6 +2461,8 @@ void WebFrameWidgetImpl::SetZoomInternal(double zoom_level, +@@ -2377,6 +2396,8 @@ void WebFrameWidgetImpl::SetZoomInternal(double zoom_level, View()->ZoomFactorForViewportLayout() * static_cast(View()->ZoomLevelToZoomFactor(zoom_level)) * static_cast(css_zoom_factor); @@ -1829,7 +1836,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th if (zoom_changed) { // Set the layout shift exclusion window for the zoom level change. if (LocalFrameView* view = document->View()) { -@@ -3491,6 +3512,7 @@ void WebFrameWidgetImpl::SetRootLayer(scoped_refptr layer) { +@@ -3429,6 +3450,7 @@ void WebFrameWidgetImpl::SetRootLayer(scoped_refptr layer) { // be needed in setting the raster scale. SetPageScaleStateAndLimits(1.f, false /* is_pinch_gesture_active */, View()->MinimumPageScaleFactor(), @@ -1837,7 +1844,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th View()->MaximumPageScaleFactor()); } -@@ -4860,9 +4882,10 @@ void WebFrameWidgetImpl::SetPageScaleStateAndLimits( +@@ -4798,9 +4820,10 @@ void WebFrameWidgetImpl::SetPageScaleStateAndLimits( float page_scale_factor, bool is_pinch_gesture_active, float minimum, @@ -1849,7 +1856,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th // Only propagate page scale from the main frame. if (ForMainFrame()) { -@@ -4986,7 +5009,10 @@ void WebFrameWidgetImpl::OrientationChanged() { +@@ -4924,7 +4947,10 @@ void WebFrameWidgetImpl::OrientationChanged() { void WebFrameWidgetImpl::DidUpdateSurfaceAndScreen( const display::ScreenInfos& previous_original_screen_infos) { display::ScreenInfo screen_info = widget_base_->GetScreenInfo(); @@ -1861,7 +1868,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th if (ShouldAutoDetermineCompositingToLCDTextSetting()) { // This causes compositing state to be modified which dirties the -@@ -5182,7 +5208,7 @@ void WebFrameWidgetImpl::SetDeviceScaleFactorForTesting(float factor) { +@@ -5120,7 +5146,7 @@ void WebFrameWidgetImpl::SetDeviceScaleFactorForTesting(float factor) { if (!device_scale_factor_for_testing_) { non_testing_device_scale_factor_ = @@ -1873,7 +1880,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h -@@ -656,6 +656,7 @@ class CORE_EXPORT WebFrameWidgetImpl +@@ -655,6 +655,7 @@ class CORE_EXPORT WebFrameWidgetImpl void SetPageScaleStateAndLimits(float page_scale_factor, bool is_pinch_gesture_active, float minimum, @@ -1884,7 +1891,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/thi diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc -@@ -2543,7 +2543,7 @@ void WebLocalFrameImpl::PaintDevToolsOverlays(GraphicsContext& context) { +@@ -2547,7 +2547,7 @@ void WebLocalFrameImpl::PaintDevToolsOverlays(GraphicsContext& context) { dev_tools_agent_->PaintOverlays(context); } @@ -1893,7 +1900,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/thi TRACE_EVENT0("blink", "WebLocalFrameImpl::createFrameView"); DCHECK(GetFrame()); // If frame() doesn't exist, we probably didn't init -@@ -3018,7 +3018,7 @@ void WebLocalFrameImpl::ShowContextMenuFromExternal( +@@ -3022,7 +3022,7 @@ void WebLocalFrameImpl::ShowContextMenuFromExternal( std::move(context_menu_client), params); } @@ -1905,7 +1912,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/thi diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc -@@ -1628,6 +1628,7 @@ bool HTMLCanvasElement::PushFrame(scoped_refptr&& image, +@@ -1569,6 +1569,7 @@ bool HTMLCanvasElement::PushFrame(scoped_refptr&& image, } bool HTMLCanvasElement::ShouldAccelerate() const { @@ -1928,7 +1935,7 @@ diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_part diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc --- a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc -@@ -1038,7 +1038,8 @@ InspectorEmulationAgent::setSmallViewportHeightDifferenceOverride( +@@ -1081,7 +1081,8 @@ InspectorEmulationAgent::setSmallViewportHeightDifferenceOverride( // Ensure the override is applied immediately without having to wait for // `WebFrameWidgetImpl::UpdateVisualProperties()` to be called. GetWebViewImpl()->ResizeWithBrowserControls( @@ -1941,7 +1948,7 @@ diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent 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 -@@ -1322,6 +1322,10 @@ void Page::CalculateEmulatedScreenSetting(LocalFrame* frame, bool force) { +@@ -1309,6 +1309,10 @@ void Page::CalculateEmulatedScreenSetting(LocalFrame* frame, bool force) { if (SchemeRegistry::IsWebUIScheme(protocol) || disable_screen_emulated_) { isEnabled = false; } @@ -1967,7 +1974,7 @@ diff --git a/third_party/blink/renderer/core/page/viewport_description.cc b/thir diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc -@@ -465,16 +465,17 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( +@@ -467,16 +467,17 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( } } @@ -1990,7 +1997,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c 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 -@@ -5910,6 +5910,10 @@ +@@ -5857,6 +5857,10 @@ // If enabled, the `getDisplayMedia()` family of APIs will ask for NV12 // frames, which should trigger a zero-copy path in the tab capture code. name: "ZeroCopyTabCapture", @@ -2181,7 +2188,7 @@ diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_prox diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_party/blink/renderer/platform/widget/widget_base.cc --- a/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/third_party/blink/renderer/platform/widget/widget_base.cc -@@ -1683,7 +1683,9 @@ void WidgetBase::RequestAnimationAfterDelayTimerFired(TimerBase*) { +@@ -1688,7 +1688,9 @@ void WidgetBase::RequestAnimationAfterDelayTimerFired(TimerBase*) { client_->ScheduleAnimation(/*urgent=*/urgent_for_input); } @@ -2192,7 +2199,7 @@ diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_p return client_->GetOriginalScreenInfos().current().device_scale_factor; } -@@ -1725,7 +1727,7 @@ void WidgetBase::UpdateSurfaceAndScreenInfo( +@@ -1730,7 +1732,7 @@ void WidgetBase::UpdateSurfaceAndScreenInfo( // Note carefully that the DSF specified in |new_screen_info| is not the // DSF used by the compositor during device emulation! LayerTreeHost()->SetViewportRectAndScale(compositor_viewport_pixel_rect, @@ -2201,7 +2208,7 @@ diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_p local_surface_id_from_parent_); // The VisualDeviceViewportIntersectionRect derives from the LayerTreeView's // viewport size, which is set above. -@@ -1855,56 +1857,56 @@ void WidgetBase::CountDroppedPointerDownForEventTiming(unsigned count) { +@@ -1860,56 +1862,56 @@ void WidgetBase::CountDroppedPointerDownForEventTiming(unsigned count) { gfx::PointF WidgetBase::DIPsToBlinkSpace(const gfx::PointF& point) { // TODO(danakj): Should this use non-original scale factor so it changes under // emulation? @@ -2295,25 +2302,25 @@ diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_f diff --git a/ui/android/event_forwarder.cc b/ui/android/event_forwarder.cc --- a/ui/android/event_forwarder.cc +++ b/ui/android/event_forwarder.cc -@@ -138,7 +138,7 @@ jboolean EventForwarder::OnTouchEvent(JNIEnv* env, - // milliseconds timestamp. - base::TimeTicks down_time = base::TimeTicks::FromUptimeMillis(down_time_ms); - ui::MotionEventAndroidJava event( -- env, motion_event.obj(), 1.f / view_->GetDipScale(), 0.f, 0.f, 0.f, -+ env, motion_event.obj(), 1.f / view_->GetDipScaleFactor(), 0.f, 0.f, 0.f, - base::TimeTicks::FromJavaNanoTime(oldest_event_time_ns), - base::TimeTicks::FromJavaNanoTime(latest_event_time_ns), down_time, - android_action, pointer_count, history_size, action_index, -@@ -185,7 +185,7 @@ void EventForwarder::OnMouseEvent(JNIEnv* env, - /*pressure=*/pressure, /*orientation_rad=*/orientation, /*tilt_rad=*/tilt, +@@ -137,7 +137,7 @@ jboolean EventForwarder::OnTouchEvent(JNIEnv* env, + JNI_MotionEvent::Java_MotionEvent_getDownTime(env, motion_event)); + auto event = ui::MotionEventAndroidFactory::CreateFromJava( + env, /*event=*/motion_event, +- /*pix_to_dip=*/1.f / view_->GetDipScale(), ++ /*pix_to_dip=*/1.f / view_->GetDipScaleFactor(), + /*ticks_x=*/0.f, + /*ticks_y=*/0.f, + /*tick_multiplier=*/0.f, +@@ -191,7 +191,7 @@ void EventForwarder::OnMouseEvent( /*tool_type=*/android_tool_type); - ui::MotionEventAndroidJava event( -- env, nullptr /* event */, 1.f / view_->GetDipScale(), 0.f, 0.f, 0.f, -+ env, nullptr /* event */, 1.f / view_->GetDipScaleFactor(), 0.f, 0.f, 0.f, - base::TimeTicks::FromJavaNanoTime(time_ns), android_action, - 1 /* pointer_count */, 0 /* history_size */, 0 /* action_index */, - android_action_button, 0 /* gesture_classification */, -@@ -211,7 +211,7 @@ void EventForwarder::OnDragEvent(JNIEnv* env, + auto event = ui::MotionEventAndroidFactory::CreateFromJava( + env, /*event=*/motion_event, +- /*pix_to_dip=*/1.f / view_->GetDipScale(), ++ /*pix_to_dip=*/1.f / view_->GetDipScaleFactor(), + /*ticks_x=*/0.f, + /*ticks_y=*/0.f, + /*tick_multiplier=*/0.f, +@@ -225,7 +225,7 @@ void EventForwarder::OnDragEvent(JNIEnv* env, const JavaParamRef& j_text, const JavaParamRef& j_html, const JavaParamRef& j_url) { @@ -2322,7 +2329,7 @@ diff --git a/ui/android/event_forwarder.cc b/ui/android/event_forwarder.cc gfx::PointF location(x / dip_scale, y / dip_scale); gfx::PointF root_location(screen_x / dip_scale, screen_y / dip_scale); std::vector mime_types; -@@ -228,7 +228,7 @@ jboolean EventForwarder::OnGestureEvent(JNIEnv* env, +@@ -240,7 +240,7 @@ jboolean EventForwarder::OnGestureEvent(JNIEnv* env, jint type, jlong time_ms, jfloat scale) { @@ -2331,16 +2338,16 @@ diff --git a/ui/android/event_forwarder.cc b/ui/android/event_forwarder.cc auto size = view_->GetSizeDIPs(); float x = size.width() / 2; float y = size.height() / 2; -@@ -258,7 +258,7 @@ jboolean EventForwarder::OnGenericMotionEvent( - // milliseconds timestamp. +@@ -270,7 +270,7 @@ jboolean EventForwarder::OnGenericMotionEvent( base::TimeTicks down_time = base::TimeTicks::FromUptimeMillis(down_time_ms); - ui::MotionEventAndroidJava event( -- env, motion_event.obj(), 1.f / view_->GetDipScale(), 0.f, 0.f, 0.f, -+ env, motion_event.obj(), 1.f / view_->GetDipScaleFactor(), 0.f, 0.f, 0.f, - base::TimeTicks::FromJavaNanoTime(event_time_ns), - base::TimeTicks::FromJavaNanoTime(event_time_ns), down_time, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, false, &pointer0, nullptr, false); -@@ -301,7 +301,7 @@ void EventForwarder::DoubleTap(JNIEnv* env, + auto event = ui::MotionEventAndroidFactory::CreateFromJava( + env, /*event=*/motion_event, +- /*pix_to_dip=*/1.f / view_->GetDipScale(), ++ /*pix_to_dip=*/1.f / view_->GetDipScaleFactor(), + /*ticks_x=*/0.f, + /*ticks_y=*/0.f, + /*tick_multiplier=*/0.f, +@@ -323,7 +323,7 @@ void EventForwarder::DoubleTap(JNIEnv* env, jlong time_ms, jint x, jint y) { @@ -2349,7 +2356,7 @@ diff --git a/ui/android/event_forwarder.cc b/ui/android/event_forwarder.cc view_->OnGestureEvent(GestureEventAndroid( GESTURE_EVENT_TYPE_DOUBLE_TAP, gfx::PointF(x / dip_scale, y / dip_scale), gfx::PointF(), time_ms, 0, 0, 0, 0, 0, /*target_viewport*/ true, -@@ -319,7 +319,7 @@ void EventForwarder::StartFling(JNIEnv* env, +@@ -340,7 +340,7 @@ void EventForwarder::StartFling(JNIEnv* env, if (velocity_x == 0 && velocity_y == 0) return; @@ -2361,9 +2368,9 @@ diff --git a/ui/android/event_forwarder.cc b/ui/android/event_forwarder.cc diff --git a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java --- a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java +++ b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java -@@ -41,6 +41,12 @@ public class UiAndroidFeatureList { +@@ -47,6 +47,12 @@ public class UiAndroidFeatureList { /* defaultValue= */ false, - /* defaultValueInTests= */ true); + /* defaultValueInTests= */ false); + public static final CachedFlag sPixelPerfect = + newCachedFlag( @@ -2372,12 +2379,12 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java + /* defaultValueInTests= */ false); + public static final List sFlagsCachedUiAndroid = - List.of(sAndroidWindowOcclusion, sAndroidWindowManagementWebApi); - } + List.of( + sAndroidWindowOcclusion, diff --git a/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java b/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java --- a/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java +++ b/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java -@@ -33,6 +33,7 @@ import org.chromium.base.ThreadUtils; +@@ -34,6 +34,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.build.annotations.EnsuresNonNull; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; @@ -2385,7 +2392,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid. import org.chromium.ui.util.XrUtils; import java.util.Arrays; -@@ -330,6 +331,15 @@ import java.util.function.Consumer; +@@ -345,6 +346,15 @@ import java.util.function.Consumer; float ydpi, Display display) { if (hasForcedDIPScale()) density = sForcedDIPScale.floatValue(); @@ -2424,7 +2431,7 @@ diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc child->DispatchOnSizeChanged(); } -@@ -488,7 +492,7 @@ void ViewAndroid::OnVerticalScrollDirectionChanged(bool direction_up, +@@ -497,7 +501,7 @@ void ViewAndroid::OnVerticalScrollDirectionChanged(bool direction_up, env, delegate, direction_up, current_scroll_ratio); } @@ -2433,7 +2440,7 @@ diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc // Match-parent view must not receive size events. DCHECK(!match_parent()); -@@ -498,13 +502,15 @@ void ViewAndroid::OnSizeChanged(int width, int height) { +@@ -507,13 +511,15 @@ void ViewAndroid::OnSizeChanged(int width, int height) { return; } @@ -2451,7 +2458,7 @@ diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc if (bounds_device_px_.size() == size_device_px) { return; } -@@ -512,12 +518,15 @@ void ViewAndroid::OnSizeChangedInternal(const gfx::Size& size_device_px) { +@@ -521,12 +527,15 @@ void ViewAndroid::OnSizeChangedInternal(const gfx::Size& size_device_px) { bounds_device_px_.set_size(size_device_px); float scale = GetDipScale(); @@ -2470,7 +2477,7 @@ diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc } } -@@ -568,6 +577,10 @@ gfx::Size ViewAndroid::GetSizeDevicePx() const { +@@ -577,6 +586,10 @@ gfx::Size ViewAndroid::GetSizeDevicePx() const { return bounds_device_px_.size(); } diff --git a/build/patches/Android-fonts-fingerprinting-mitigation.patch b/build/patches/Android-fonts-fingerprinting-mitigation.patch index 67f31c3d..d2d6b933 100644 --- a/build/patches/Android-fonts-fingerprinting-mitigation.patch +++ b/build/patches/Android-fonts-fingerprinting-mitigation.patch @@ -12,7 +12,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/BUILD.gn | 7 + .../browser/component_updater/registration.cc | 10 + ...droid-fonts-fingerprinting-mitigation.grdp | 9 + - chrome/renderer/BUILD.gn | 3 + + chrome/renderer/BUILD.gn | 4 + .../installer_policies/BUILD.gn | 7 + .../fonts_pack_component_installer.cc | 96 + .../fonts_pack_component_installer.h | 60 + @@ -34,15 +34,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ...ndroid-fonts-fingerprinting-mitigation.inc | 5 + skia/BUILD.gn | 12 + .../include/ports/SkFontConfigInterface.h | 2 + - .../skia/include/ports/SkFontMgr_android.h | 42 +- + .../skia/include/ports/SkFontMgr_android.h | 40 +- .../skia/src/ports/SkFontConfigInterface.cpp | 4 + .../ports/SkFontConfigInterface_direct.cpp | 5 + .../src/ports/SkFontConfigInterface_direct.h | 1 + - .../skia/src/ports/SkFontMgr_android.cpp | 278 ++- + .../skia/src/ports/SkFontMgr_android.cpp | 274 ++- .../skia/src/ports/SkFontMgr_android_data.cpp | 1640 +++++++++++++++++ .../src/ports/SkFontMgr_android_parser.cpp | 49 +- .../skia/src/ports/SkFontMgr_android_parser.h | 5 +- - 36 files changed, 2410 insertions(+), 79 deletions(-) + 36 files changed, 2408 insertions(+), 76 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Android-fonts-fingerprinting-mitigation.grdp create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.cc create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.h @@ -54,7 +54,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java -@@ -1033,6 +1033,9 @@ public final class ProductionSupportedFlagList { +@@ -1007,6 +1007,9 @@ public final class ProductionSupportedFlagList { "Hides user preference on the system keyboard by setting the standard " + "eng layout and removing the layout information from the " + "javascript keyboard events."), @@ -67,7 +67,7 @@ diff --git a/android_webview/java/src/org/chromium/android_webview/common/Produc diff --git a/android_webview/nonembedded/component_updater/registration.cc b/android_webview/nonembedded/component_updater/registration.cc --- a/android_webview/nonembedded/component_updater/registration.cc +++ b/android_webview/nonembedded/component_updater/registration.cc -@@ -27,6 +27,9 @@ +@@ -26,6 +26,9 @@ #include "components/update_client/update_client.h" #include "mojo/public/cpp/base/proto_wrapper.h" @@ -77,7 +77,7 @@ diff --git a/android_webview/nonembedded/component_updater/registration.cc b/and namespace android_webview { void RegisterComponentsForUpdate( -@@ -43,6 +46,12 @@ void RegisterComponentsForUpdate( +@@ -42,6 +45,12 @@ void RegisterComponentsForUpdate( std::vector> component_installer_list_cromite; @@ -106,7 +106,7 @@ diff --git a/chrome/android/java/res/xml/developer_preferences.xml b/chrome/andr diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -7953,6 +7953,13 @@ static_library("browser") { +@@ -7944,6 +7944,13 @@ static_library("browser") { } } @@ -123,7 +123,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/component_updater/registration.cc b/chrome/browser/component_updater/registration.cc --- a/chrome/browser/component_updater/registration.cc +++ b/chrome/browser/component_updater/registration.cc -@@ -117,10 +117,20 @@ +@@ -115,10 +115,20 @@ #include "chrome/browser/component_updater/file_type_policies_component_installer.h" #endif @@ -161,20 +161,21 @@ new file mode 100644 diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -292,6 +292,9 @@ static_library("renderer") { - "//ppapi/shared_impl", - ] +@@ -258,6 +258,10 @@ static_library("renderer") { + deps += [ "//components/strings" ] + } -+ if (is_android) { -+ deps += [ "//components/services/font/public/cpp" ] -+ } - if (is_linux || is_chromeos) { - deps += [ "//components/services/font/public/cpp" ] - } ++ if (is_android) { ++ deps += [ "//components/services/font/public/cpp" ] ++ } ++ + if (enable_pdf) { + deps += [ + "//components/pdf/renderer", diff --git a/components/component_updater/installer_policies/BUILD.gn b/components/component_updater/installer_policies/BUILD.gn --- a/components/component_updater/installer_policies/BUILD.gn +++ b/components/component_updater/installer_policies/BUILD.gn -@@ -36,6 +36,13 @@ static_library("installer_policies_no_content_deps") { +@@ -38,6 +38,13 @@ static_library("installer_policies_no_content_deps") { "trust_token_key_commitments_component_installer_policy.h", ] @@ -614,7 +615,7 @@ diff --git a/components/services/font/public/mojom/font_service.mojom b/componen diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn -@@ -2582,6 +2582,17 @@ source_set("browser") { +@@ -2600,6 +2600,17 @@ source_set("browser") { ] } @@ -632,7 +633,7 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn if (is_linux || is_chromeos) { sources -= [ "file_system_access/file_path_watcher/file_path_watcher_stub.cc" ] -@@ -2627,6 +2638,13 @@ source_set("browser") { +@@ -2645,6 +2656,13 @@ source_set("browser") { ] } @@ -649,7 +650,7 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn diff --git a/content/browser/renderer_host/render_process_host_impl_receiver_bindings.cc b/content/browser/renderer_host/render_process_host_impl_receiver_bindings.cc --- a/content/browser/renderer_host/render_process_host_impl_receiver_bindings.cc +++ b/content/browser/renderer_host/render_process_host_impl_receiver_bindings.cc -@@ -51,6 +51,11 @@ +@@ -52,6 +52,11 @@ #include "third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom.h" #endif @@ -661,7 +662,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl_receiver_bin #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #include "components/services/font/public/mojom/font_service.mojom.h" // nogncheck #include "content/browser/font_service.h" // nogncheck -@@ -336,6 +341,13 @@ void RenderProcessHostImpl::IOThreadHostImpl::BindHostReceiver( +@@ -348,6 +353,13 @@ void RenderProcessHostImpl::IOThreadHostImpl::BindHostReceiver( } #endif @@ -695,7 +696,7 @@ diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn -@@ -349,6 +349,10 @@ target(link_target_type, "renderer") { +@@ -346,6 +346,10 @@ target(link_target_type, "renderer") { deps += [ "//services/screen_ai/public/mojom" ] } @@ -733,7 +734,7 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer using blink::Platform; using blink::WebAudioDevice; using blink::WebAudioLatencyHint; -@@ -179,6 +196,37 @@ gpu::ContextType ToGpuContextType(blink::Platform::ContextType type) { +@@ -180,6 +197,37 @@ gpu::ContextType ToGpuContextType(blink::Platform::ContextType type) { NOTREACHED(); } @@ -771,7 +772,7 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer } // namespace //------------------------------------------------------------------------------ -@@ -192,18 +240,21 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( +@@ -193,18 +241,21 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( is_locked_to_site_(false), main_thread_scheduler_(main_thread_scheduler), next_frame_sink_id_(uint32_t{std::numeric_limits::max()} + 1) { @@ -883,7 +884,7 @@ diff --git a/third_party/skia/include/ports/SkFontMgr_android.h b/third_party/sk #include -@@ -40,13 +45,46 @@ struct SkFontMgr_Android_CustomFonts { +@@ -40,9 +45,42 @@ struct SkFontMgr_Android_CustomFonts { * system IO resources on initialization. */ bool fIsolated; @@ -923,11 +924,6 @@ diff --git a/third_party/skia/include/ports/SkFontMgr_android.h b/third_party/sk }; /** Create a font manager for Android. If 'custom' is NULL, use only system fonts. */ - - // Deprecated --SK_API sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom); -+SK_API sk_sp SkFontMgr_New_Android(std::unique_ptr custom); - -SK_API sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom, +SK_API sk_sp SkFontMgr_New_Android(std::unique_ptr custom, std::unique_ptr scanner); @@ -950,7 +946,7 @@ diff --git a/third_party/skia/src/ports/SkFontConfigInterface.cpp b/third_party/ diff --git a/third_party/skia/src/ports/SkFontConfigInterface_direct.cpp b/third_party/skia/src/ports/SkFontConfigInterface_direct.cpp --- a/third_party/skia/src/ports/SkFontConfigInterface_direct.cpp +++ b/third_party/skia/src/ports/SkFontConfigInterface_direct.cpp -@@ -707,3 +707,8 @@ bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[], +@@ -715,3 +715,8 @@ bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[], SkStreamAsset* SkFontConfigInterfaceDirect::openStream(const FontIdentity& identity) { return SkStream::MakeFromFile(identity.fString.c_str()).release(); } @@ -1073,7 +1069,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia class SkTypeface_AndroidSystem : public SkTypeface_proxy { public: static sk_sp Make(sk_sp realTypeface, -@@ -110,7 +196,8 @@ using StreamForPathCache = skia_private::THashMapisFixedPitch(), -@@ -206,15 +340,18 @@ public: +@@ -205,15 +339,18 @@ public: return fStyles[index]; } @@ -1241,7 +1237,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia SkString fFallbackFor; friend struct NameToFamily; -@@ -235,24 +372,26 @@ struct NameToFamily { +@@ -234,24 +371,26 @@ struct NameToFamily { class SkFontMgr_Android : public SkFontMgr { public: @@ -1272,7 +1268,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia } this->buildNameToFamilyMap(families, custom ? custom->fIsolated : false); this->findDefaultStyleSet(); -@@ -310,33 +449,53 @@ protected: +@@ -309,33 +448,53 @@ protected: return sset->matchStyle(style); } @@ -1341,7 +1337,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia } } return nullptr; -@@ -359,7 +518,7 @@ protected: +@@ -358,7 +517,7 @@ protected: for (int bcp47Index = bcp47Count; bcp47Index --> 0;) { SkLanguage lang(bcp47[bcp47Index]); while (!lang.getTag().isEmpty()) { @@ -1350,7 +1346,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, style, SkToBool(elegant), lang.getTag(), character); -@@ -370,7 +529,7 @@ protected: +@@ -369,7 +528,7 @@ protected: lang = lang.getParent(); } } @@ -1359,7 +1355,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, style, SkToBool(elegant), SkString(), character); -@@ -421,6 +580,7 @@ protected: +@@ -420,6 +579,7 @@ protected: private: std::unique_ptr fScanner; @@ -1367,7 +1363,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia TArray> fStyleSets; sk_sp fDefaultStyleSet; -@@ -442,7 +602,7 @@ private: +@@ -441,7 +601,7 @@ private: } sk_sp newSet = @@ -1376,22 +1372,16 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia if (0 == newSet->count()) { return; } -@@ -487,11 +647,11 @@ static char const * const gSystemFontUseStrings[] = { +@@ -486,7 +646,7 @@ static char const * const gSystemFontUseStrings[] = { } // namespace --sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom) { -- return SkFontMgr_New_Android(custom, SkFontScanner_Make_FreeType()); -+sk_sp SkFontMgr_New_Android(std::unique_ptr custom) { -+ return SkFontMgr_New_Android(std::move(custom), SkFontScanner_Make_FreeType()); - } - -sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom, std::unique_ptr scanner) { +sk_sp SkFontMgr_New_Android(std::unique_ptr custom, std::unique_ptr scanner) { if (custom) { SkASSERT(0 <= custom->fSystemFontUse); SkASSERT(custom->fSystemFontUse < std::size(gSystemFontUseStrings)); -@@ -501,5 +661,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust +@@ -496,5 +656,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust custom->fFontsXml, custom->fFallbackFontsXml); } diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index 48f572ad..db828f2f 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -45,8 +45,8 @@ Require: bromite-build-utils.patch .../BromiteCustomContentSettingImpl.java | 412 ++++++++++++++++++ ...tomTriStateSiteSettingsPreferenceImpl.java | 24 + .../ContentSettingsResources.java | 37 +- - .../site_settings/SingleCategorySettings.java | 60 ++- - .../site_settings/SingleWebsiteSettings.java | 58 ++- + .../site_settings/SingleCategorySettings.java | 57 ++- + .../site_settings/SingleWebsiteSettings.java | 53 ++- .../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, 1965 insertions(+), 112 deletions(-) + 74 files changed, 1962 insertions(+), 107 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 -@@ -69,6 +69,10 @@ import org.chromium.url.GURL; +@@ -70,6 +70,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. */ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { private final Context mContext; -@@ -239,7 +243,7 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { +@@ -247,7 +251,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 { +@@ -385,6 +389,17 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate { return mPrivacySandboxBridge.getRelatedWebsiteSetOwner(memberOrigin); } @@ -140,7 +140,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C diff --git a/chrome/browser/content_settings/page_specific_content_settings_delegate.cc b/chrome/browser/content_settings/page_specific_content_settings_delegate.cc --- a/chrome/browser/content_settings/page_specific_content_settings_delegate.cc +++ b/chrome/browser/content_settings/page_specific_content_settings_delegate.cc -@@ -191,7 +191,7 @@ namespace { +@@ -190,7 +190,7 @@ namespace { void GetGuestViewDefaultContentSettingRules( bool incognito, RendererContentSettingRules* rules) { @@ -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 -@@ -295,6 +295,7 @@ build_webui("build") { +@@ -312,6 +312,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", -@@ -306,7 +307,6 @@ build_webui("build") { +@@ -326,7 +327,6 @@ build_webui("build") { "site_settings/constants.ts", "site_settings/site_settings_mixin.ts", "site_settings/site_settings_prefs_browser_proxy.ts", @@ -171,14 +171,12 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html -@@ -1339,6 +1339,7 @@ +@@ -1342,4 +1342,5 @@ +
- -
[[dbdDeletionConfirmationToastLabel_]]
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts @@ -190,7 +188,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/ch interface BlockAutoplayStatus { enabled: boolean; -@@ -79,8 +80,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { +@@ -78,8 +79,82 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { return 'settings-privacy-page'; } @@ -296,7 +294,7 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html -@@ -53,5 +53,17 @@ +@@ -54,5 +54,17 @@ icon="[[blockOptionIcon]]" no-collapse> @@ -478,13 +476,12 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_details_permis import {ChooserType, ContentSetting, ContentSettingsTypes, SiteSettingSource} from './constants.js'; import {getTemplate} from './site_details_permission.html.js'; -@@ -293,15 +294,28 @@ export class SiteDetailsPermissionElement extends +@@ -293,14 +294,27 @@ export class SiteDetailsPermissionElement extends return ''; } + let obj = this.getSettingData(category); - if (defaultSetting === ContentSetting.ASK || - defaultSetting === ContentSetting.IMPORTANT_CONTENT) { + if (defaultSetting === ContentSetting.ASK) { + if (obj) { + let v = this.askSettingString_(category, ""); + if (v !== "") return "(Default) " + v; @@ -507,7 +504,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_details_permis if (this.useCustomSoundLabels_(category)) { return this.i18n('siteSettingsActionMuteDefault'); } -@@ -320,12 +334,40 @@ export class SiteDetailsPermissionElement extends +@@ -319,12 +333,40 @@ export class SiteDetailsPermissionElement extends private blockSettingString_( category: ContentSettingsTypes, blockString: string, muteString: string): string { @@ -548,7 +545,7 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_details_permis /** * @return true if |this| should be hidden. */ -@@ -416,6 +458,8 @@ export class SiteDetailsPermissionElement extends +@@ -415,6 +457,8 @@ export class SiteDetailsPermissionElement extends private showAskSetting_( category: ContentSettingsTypes, setting: ContentSetting, source: SiteSettingSource): boolean { @@ -736,16 +733,16 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1732,6 +1732,7 @@ static_library("ui") { +@@ -1634,6 +1634,7 @@ static_library("ui") { "//components/commerce/core/mojom:mojo_bindings", "//components/commerce/core/webui", - "//components/endpoint_fetcher:endpoint_fetcher", + "//components/endpoint_fetcher", + "//components/content_settings/core/browser:browser", "//components/enterprise/common:files_scan_data", "//components/feedback/proto", "//components/headless/policy", -@@ -4950,6 +4951,7 @@ static_library("ui") { - "//components/power_bookmarks/core:core", +@@ -4821,6 +4822,7 @@ static_library("ui") { + "//components/power_bookmarks/core", "//components/power_bookmarks/storage", "//components/prefs", + "//components/strings:components_strings_grit", @@ -772,7 +769,7 @@ diff --git a/chrome/browser/ui/views/controls/rich_controls_container_view.h b/c diff --git a/chrome/browser/ui/views/page_info/page_info_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 -@@ -59,6 +59,7 @@ +@@ -58,6 +58,7 @@ #include "ui/views/layout/box_layout.h" #include "ui/views/layout/flex_layout.h" #include "ui/views/vector_icons.h" @@ -780,7 +777,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( +@@ -282,8 +283,20 @@ void PageInfoMainView::SetPermissionInfo( scroll_view->SetDrawOverflowIndicator(false); auto* content_view = scroll_view->SetContents(std::make_unique()); @@ -803,7 +800,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( +@@ -298,11 +311,16 @@ void PageInfoMainView::SetPermissionInfo( } } @@ -820,7 +817,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( +@@ -310,6 +328,8 @@ void PageInfoMainView::SetPermissionInfo( } for (auto& object : chosen_object_info_list) { @@ -829,7 +826,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( +@@ -320,6 +340,10 @@ void PageInfoMainView::SetPermissionInfo( content_view->AddChildView(std::move(object_view))); } @@ -852,7 +849,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" -@@ -292,7 +294,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -290,7 +292,14 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( ContentSetting setting = info.setting == CONTENT_SETTING_DEFAULT ? info.default_setting : info.setting; @@ -867,7 +864,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom // For guard content settings and Automatic Picture-in-Picture, ASK is treated // as an "on" state. const bool show_blocked_badge = -@@ -593,6 +602,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -591,6 +600,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( icon = &vector_icons::kPrinterIcon; break; default: @@ -888,7 +885,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 -@@ -100,6 +100,11 @@ class PageInfoViewFactory { +@@ -97,6 +97,11 @@ class PageInfoViewFactory { const PageInfo::PermissionInfo& info, bool blocked_on_system_level = false); @@ -1216,7 +1213,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" -@@ -3842,6 +3846,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3912,6 +3916,56 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -1286,7 +1283,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b #include "components/content_settings/core/common/content_settings_pattern.h" #include "components/content_settings/core/common/content_settings_types.h" @@ -261,13 +263,13 @@ constexpr auto kContentSettingsTypeGroupNames = std::to_array< - {ContentSettingsType::SUSPICIOUS_NOTIFICATION_IDS, nullptr}, + {ContentSettingsType::DEVICE_ATTRIBUTES, nullptr}, }); -static_assert( @@ -1354,7 +1351,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."; } -@@ -673,6 +694,13 @@ std::vector GetVisiblePermissionCategories( +@@ -668,6 +689,13 @@ std::vector GetVisiblePermissionCategories( base_types->push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -1534,7 +1531,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -151,6 +151,23 @@ android_library("java") { +@@ -156,6 +156,23 @@ android_library("java") { ":site_settings_jni_headers", "//components/content_settings/android:java_pref_names_srcjar", ] @@ -1558,7 +1555,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b } android_library("javatests") { -@@ -200,6 +217,7 @@ robolectric_library("junit") { +@@ -205,6 +222,7 @@ robolectric_library("junit") { } android_resources("java_resources") { @@ -1569,7 +1566,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml --- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml +++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml -@@ -189,4 +189,11 @@ The order of the following items is from: http://crbug.com/610358. +@@ -193,4 +193,11 @@ The order of the following items is from: http://crbug.com/610358. android:title="@string/safety_hub_autorevocation_toggle_title" android:summary="@string/safety_hub_autorevocation_toggle_summary" /> @@ -2251,16 +2248,16 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c int icon, int title, @ContentSettingValues @Nullable Integer defaultEnabledValue, -@@ -636,6 +657,8 @@ public class ContentSettingsResources { - R.string.website_settings_vr_ask, - R.string.website_settings_vr_block); +@@ -662,6 +683,8 @@ public class ContentSettingsResources { + R.string.website_settings_window_management_ask, + R.string.website_settings_window_management_block); } + ResourceItem ri = BromiteCustomContentSettingImpl.getResourceItem(contentType); + if (ri != null) return ri; assert false; // NOTREACHED return assumeNonNull(null); } -@@ -794,6 +817,14 @@ public class ContentSettingsResources { +@@ -820,6 +843,14 @@ public class ContentSettingsResources { return getResourceItem(contentType).getDefaultDisabledValue(); } @@ -2275,7 +2272,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** * Returns the string resource id for a given ContentSetting to show with a permission category. * -@@ -968,6 +999,8 @@ public class ContentSettingsResources { +@@ -994,6 +1025,8 @@ public class ContentSettingsResources { */ public static int @Nullable [] getTriStateSettingDescriptionIDs( int contentType, boolean isPermissionSiteSettingsRadioButtonFeatureEnabled) { @@ -2287,7 +2284,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 -@@ -343,6 +343,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -344,6 +344,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment website.site() .getContentSetting( browserContextHandle, mCategory.getContentSettingsType()); @@ -2298,7 +2295,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (contentSetting != null) { return ContentSettingValues.BLOCK == contentSetting; } -@@ -531,6 +535,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -532,6 +536,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? new HashSet<>(getArguments().getStringArrayList(EXTRA_SELECTED_DOMAINS)) : null; @@ -2306,7 +2303,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"); -@@ -566,7 +571,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -567,7 +572,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment if (queryHasChanged) getInfoForOrigins(); }); @@ -2316,7 +2313,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c MenuItem help = menu.add( Menu.NONE, -@@ -578,12 +584,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -579,12 +585,20 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getResources(), R.drawable.ic_help_and_feedback, getContext().getTheme())); @@ -2358,34 +2355,37 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // OnPreferenceClickListener: -@@ -962,21 +981,18 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment - default: +@@ -963,17 +982,15 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment break; } -- -- int exceptionDialogMessageResourceId = getAddExceptionDialogMessageResourceId(); -- assert allowSpecifyingExceptions == (exceptionDialogMessageResourceId != 0); + + Boolean allow = BromiteCustomContentSettingImpl.allowSpecifyingExceptions(mCategory); -+ if (allow != null) allowSpecifyingExceptions = (boolean)allow; - if (allowSpecifyingExceptions) { ++ if (allow != null) shouldAddExceptionButton = (boolean)allow; ++ + int exceptionDialogMessageResourceId = getAddExceptionDialogMessageResourceId(); + assert shouldAddExceptionButton == (exceptionDialogMessageResourceId != 0); + + if (shouldAddExceptionButton) { + int blockAddingExceptionsReasonResourceId = + mCategory.getBlockAddingExceptionsReasonResourceId(); - boolean enableAddExceptionButton = - (!mCategory.isManaged() -- || mCategory.getType() -- == SiteSettingsCategory.Type.THIRD_PARTY_COOKIES); -+ int exceptionDialogMessageResourceId = getAddExceptionDialogMessageResourceId(); -+ assert exceptionDialogMessageResourceId != 0; - getPreferenceScreen() - .addPreference( - new AddExceptionPreference( +- || mCategory.getType() +- == SiteSettingsCategory.Type.THIRD_PARTY_COOKIES) +- && blockAddingExceptionsReasonResourceId == 0; + String exceptionDialogMessage = + exceptionDialogMessageResourceId != 0 + ? getString(exceptionDialogMessageResourceId) +@@ -984,7 +1001,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getStyledContext(), ADD_EXCEPTION_KEY, - getString(exceptionDialogMessageResourceId), + exceptionDialogMessage, - enableAddExceptionButton, -+ true, ++ /*enableAddExceptionButton*/ true, mCategory, this)); - } -@@ -1152,8 +1168,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment + +@@ -1168,8 +1185,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment private boolean isBlocked() { switch (mGlobalToggleLayout) { case GlobalToggleLayout.TRI_STATE_TOGGLE: @@ -2402,7 +2402,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return (triStateToggle.getCheckedSetting() == ContentSettingValues.BLOCK); case GlobalToggleLayout.TRI_STATE_COOKIE_TOGGLE: TriStateCookieSettingsPreference triStateCookieToggle = -@@ -1302,7 +1326,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1320,7 +1345,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else if (res_id != -1) { infoText.setSummary(res_id); } else { @@ -2415,7 +2415,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // Hide the anti-abuse text preferences, as needed. -@@ -1341,6 +1369,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1359,6 +1388,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else { screen.removePreference(mLocationTriStatePref); } @@ -2423,7 +2423,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c maybeShowReasonToggleDisabled(screen); -@@ -1553,6 +1582,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1571,6 +1601,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment iconIds = ContentSettingsResources.getTriStateSettingIconIDs(contentType); } triStateToggle.initialize( @@ -2431,7 +2431,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c setting, descriptionIds, iconIds, -@@ -1712,6 +1742,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment +@@ -1730,6 +1761,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment @ContentSettingValues Integer value = site.getContentSetting(browserContextHandle, contentSettingsType); @@ -2449,7 +2449,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; +@@ -59,6 +59,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -2457,21 +2457,20 @@ 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 -@@ -188,7 +189,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment - case ContentSettingsType.LOCAL_NETWORK_ACCESS: - return "local_network_access"; +@@ -192,7 +193,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + case ContentSettingsType.WINDOW_MANAGEMENT: + return "window_management_permission_list"; default: - return null; + return BromiteCustomContentSettingImpl.getProfilePrefKey(type); } } -@@ -594,8 +595,21 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -598,14 +599,27 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setupContentSettingsPreferences() { Preference permissionsHeaderPref = findPreference(PREF_PERMISSIONS_HEADER); mMaxPermissionOrder = permissionsHeaderPref.getOrder(); - for (@ContentSettingsType.EnumType int type : SiteSettingsUtil.SETTINGS_ORDER) { -- Preference preference = new ChromeSwitchPreference(getStyledContext()); + List order = BromiteCustomContentSettingImpl.getSettingsOrder(); + for (@ContentSettingsType.EnumType int type : order) { + @ContentSettingValues @Nullable Integer value = @@ -2481,20 +2480,27 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + value = WebsitePreferenceBridge.getDefaultContentSetting( + getSiteSettingsDelegate().getBrowserContextHandle(), type); + } -+ Preference preference = + Preference preference = + BromiteCustomContentSettingImpl + .createWebSitePreference(type, getStyledContext(), value); + if (preference == null) { -+ preference = new ChromeSwitchPreference(getStyledContext()); ++ preference = + (isOneTime(type) + && PermissionsAndroidFeatureMap.isEnabled( + PermissionsAndroidFeatureList + .APPROXIMATE_GEOLOCATION_PERMISSION)) + ? new ChromeImageViewPreference(getStyledContext()) + : new ChromeSwitchPreference(getStyledContext()); + } preference.setKey(getPreferenceKey(type)); if (type == ContentSettingsType.ADS) { -@@ -1280,20 +1294,32 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1290,7 +1304,16 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment @ContentSettingValues @Nullable Integer value, boolean isEmbargoed, boolean isOneTime) { - if (value == null) return; ++ @ContentSettingsType.EnumType + int content_type = getContentSettingsTypeFromPreferenceKey(preference.getKey()); + BromiteCustomContentSetting cs = + BromiteCustomContentSettingImpl.getContentSetting(content_type); @@ -2505,33 +2511,37 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + getSiteSettingsDelegate().getBrowserContextHandle(), content_type); + } setUpPreferenceCommon(preference, value); - -- ChromeSwitchPreference switchPreference = (ChromeSwitchPreference) preference; -- @ContentSettingsType.EnumType -- int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey()); -- switchPreference.setChecked(value == getEnabledValue(contentType)); -+ Preference switchPreference = preference; -+ if (preference instanceof ChromeSwitchPreference) { -+ ((ChromeSwitchPreference)switchPreference).setChecked(value != ContentSettingValues.BLOCK); -+ } else { -+ BromiteCustomContentSettingImpl.setWebSitePreferenceValue(content_type, preference, value); -+ } - switchPreference.setSummary( + preference.setOnPreferenceChangeListener(this); + @ContentSettingsType.EnumType +@@ -1298,7 +1321,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + preference.setSummary( isEmbargoed ? getString(R.string.automatically_blocked) - : getString(ContentSettingsResources.getCategorySummary(value, isOneTime))); + : getString(ContentSettingsResources.getCategorySummary(content_type, value, isOneTime))); - switchPreference.setOnPreferenceChangeListener(this); -- if (contentType == mHighlightedPermission) { -- switchPreference.setBackgroundColor( -+ @ContentSettingsType.EnumType -+ int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey()); -+ if (preference instanceof ChromeSwitchPreference && contentType == mHighlightedPermission) { -+ ((ChromeSwitchPreference)switchPreference).setBackgroundColor( - AppCompatResources.getColorStateList(getContext(), mHighlightColor) - .getDefaultColor()); - } -@@ -1518,14 +1544,20 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + if (preference instanceof ChromeImageViewPreference) { + ChromeImageViewPreference oneTimePreference = (ChromeImageViewPreference) preference; + oneTimePreference.setImageView( +@@ -1313,10 +1336,14 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + oneTimePreference.setBackgroundColor(mHighlightColor); + } + } else { +- ChromeSwitchPreference switchPreference = (ChromeSwitchPreference) preference; +- switchPreference.setChecked(value == getEnabledValue(contentType)); +- if (contentType == mHighlightedPermission) { +- switchPreference.setBackgroundColor( ++ Preference switchPreference = preference; ++ if (preference instanceof ChromeSwitchPreference) { ++ ((ChromeSwitchPreference)switchPreference).setChecked(value != ContentSettingValues.BLOCK); ++ } else { ++ BromiteCustomContentSettingImpl.setWebSitePreferenceValue(content_type, preference, value); ++ } ++ if (preference instanceof ChromeSwitchPreference && contentType == mHighlightedPermission) { ++ ((ChromeSwitchPreference)switchPreference).setBackgroundColor( + AppCompatResources.getColorStateList(getContext(), mHighlightColor) + .getDefaultColor()); + } +@@ -1542,14 +1569,20 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment if (newValue instanceof Boolean) { permission = (Boolean) newValue ? getEnabledValue(type) : ContentSettingValues.BLOCK; } else { @@ -2622,25 +2632,25 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java -@@ -79,7 +79,7 @@ public class SiteSettingsCategory { - Type.JAVASCRIPT_OPTIMIZER, +@@ -80,7 +80,7 @@ public class SiteSettingsCategory { Type.SERIAL_PORT, Type.LOCAL_NETWORK_ACCESS, + Type.WINDOW_MANAGEMENT, - Type.NUM_ENTRIES + Type.NUM_ENTRIES_CHROMIUM }) @Retention(RetentionPolicy.SOURCE) public @interface Type { -@@ -123,7 +123,7 @@ public class SiteSettingsCategory { - int LOCAL_NETWORK_ACCESS = 35; +@@ -125,7 +125,7 @@ public class SiteSettingsCategory { + int WINDOW_MANAGEMENT = 36; /** Number of handled categories used for calculating array sizes. */ -- int NUM_ENTRIES = 36; -+ int NUM_ENTRIES_CHROMIUM = 36; +- int NUM_ENTRIES = 37; ++ int NUM_ENTRIES_CHROMIUM = 37; } private final BrowserContextHandle mBrowserContextHandle; -@@ -174,6 +174,9 @@ public class SiteSettingsCategory { +@@ -176,6 +176,9 @@ public class SiteSettingsCategory { } else { permission = ""; } @@ -2650,7 +2660,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return new SiteSettingsCategory(browserContextHandle, type, permission); } -@@ -182,7 +185,7 @@ public class SiteSettingsCategory { +@@ -184,7 +187,7 @@ public class SiteSettingsCategory { @ContentSettingsType.EnumType int contentSettingsType) { assert contentSettingsType != -1; assert Type.ALL_SITES == 0; @@ -2659,7 +2669,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (contentSettingsType(i) == contentSettingsType) { return createFromType(browserContextHandle, i); } -@@ -193,7 +196,7 @@ public class SiteSettingsCategory { +@@ -195,7 +198,7 @@ public class SiteSettingsCategory { public static @Nullable SiteSettingsCategory createFromPreferenceKey( BrowserContextHandle browserContextHandle, String preferenceKey) { assert Type.ALL_SITES == 0; @@ -2668,7 +2678,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (preferenceKey(i).equals(preferenceKey)) { return createFromType(browserContextHandle, i); } -@@ -274,8 +277,7 @@ public class SiteSettingsCategory { +@@ -278,8 +281,7 @@ public class SiteSettingsCategory { case Type.TRACKING_PROTECTION: return ContentSettingsType.DEFAULT; // Conversion unavailable. } @@ -2678,7 +2688,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } /** -@@ -372,8 +374,12 @@ public class SiteSettingsCategory { +@@ -378,8 +380,12 @@ public class SiteSettingsCategory { case Type.ZOOM: return "zoom"; default: @@ -2694,7 +2704,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java -@@ -203,6 +203,8 @@ public interface SiteSettingsDelegate { +@@ -208,6 +208,8 @@ public interface SiteSettingsDelegate { */ String getRelatedWebsiteSetOwner(String memberOrigin); @@ -2769,19 +2779,19 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java -@@ -115,7 +115,7 @@ public class WebsitePermissionsFetcher { - case ContentSettingsType.USB_GUARD: - return WebsitePermissionsType.CHOSEN_OBJECT_INFO; +@@ -124,7 +124,7 @@ public class WebsitePermissionsFetcher { + } + break; default: - return null; + return BromiteCustomContentSettingImpl.getPermissionsType(contentSettingsType); } + return null; } - diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -@@ -321,7 +321,7 @@ public class WebsitePreferenceBridge { +@@ -317,7 +317,7 @@ public class WebsitePreferenceBridge { case ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER: return true; default: @@ -2790,7 +2800,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -337,7 +337,6 @@ public class WebsitePreferenceBridge { +@@ -333,7 +333,6 @@ public class WebsitePreferenceBridge { public static boolean isCategoryEnabled( BrowserContextHandle browserContextHandle, @ContentSettingsType.EnumType int contentSettingsType) { @@ -2877,7 +2887,7 @@ diff --git a/components/content_settings/android/BUILD.gn b/components/content_s diff --git a/components/content_settings/core/browser/BUILD.gn b/components/content_settings/core/browser/BUILD.gn --- a/components/content_settings/core/browser/BUILD.gn +++ b/components/content_settings/core/browser/BUILD.gn -@@ -77,6 +77,13 @@ static_library("browser") { +@@ -83,6 +83,13 @@ static_library("browser") { } configs += [ "//build/config/compiler:wexit_time_destructors" ] @@ -2900,7 +2910,7 @@ new file mode 100644 diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -16,6 +16,7 @@ +@@ -19,6 +19,7 @@ #include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/features.h" @@ -2908,10 +2918,10 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. namespace content_settings { -@@ -864,6 +865,7 @@ void ContentSettingsRegistry::Init() { - WebsiteSettingsRegistry::PLATFORM_ANDROID, - ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, - ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); +@@ -872,6 +873,7 @@ void ContentSettingsRegistry::Init() { + WebsiteSettingsRegistry::PLATFORM_CHROMEOS, + ContentSettingsInfo::INHERIT_IN_INCOGNITO, + PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); +#include "components/content_settings/core/browser/bromite_content_settings.inc" } @@ -2919,7 +2929,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc -@@ -222,11 +222,7 @@ void RecordContentSettingsHistogram(const std::string& name, +@@ -224,11 +224,7 @@ void RecordContentSettingsHistogram(const std::string& name, } int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting) { @@ -2935,15 +2945,15 @@ diff --git a/components/content_settings/core/browser/content_settings_uma_util. diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc -@@ -16,6 +16,7 @@ - #include "build/build_config.h" - #include "components/content_settings/core/browser/content_settings_registry.h" - #include "components/content_settings/core/browser/host_content_settings_map.h" +@@ -19,6 +19,7 @@ + #include "components/content_settings/core/browser/permission_settings_info.h" + #include "components/content_settings/core/browser/permission_settings_registry.h" + #include "components/content_settings/core/browser/website_settings_registry.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_utils.h" -@@ -125,6 +126,17 @@ PatternPair ParsePatternString(const std::string& pattern_str) { +@@ -133,6 +134,17 @@ PatternPair ParsePatternString(const std::string& pattern_str) { void GetRendererContentSettingRules(const HostContentSettingsMap* map, RendererContentSettingRules* rules) { @@ -3060,7 +3070,7 @@ diff --git a/components/content_settings/core/common/BUILD.gn b/components/conte } source_set("unit_tests") { -@@ -91,6 +98,7 @@ mojom("content_settings_types") { +@@ -90,6 +97,7 @@ mojom("content_settings_types") { sources = [ "content_settings_types.mojom" ] public_deps = [ "//mojo/public/mojom/base" ] @@ -3077,11 +3087,12 @@ new file mode 100644 diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc --- a/components/content_settings/core/common/content_settings.cc +++ b/components/content_settings/core/common/content_settings.cc -@@ -16,10 +16,11 @@ +@@ -18,11 +18,12 @@ #include "components/content_settings/core/common/content_settings_metadata.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_utils.h" +#include "components/content_settings/core/browser/website_settings_registry.h" + #include "third_party/abseil-cpp/absl/functional/overload.h" namespace { @@ -3090,7 +3101,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo const GURL& primary_url) { std::erase_if(settings, [&primary_url](const ContentSettingPatternSource& source) { -@@ -98,6 +99,13 @@ std::ostream& operator<<(std::ostream& os, +@@ -106,6 +107,13 @@ std::ostream& operator<<(std::ostream& os, // static bool RendererContentSettingRules::IsRendererContentSetting( ContentSettingsType content_type) { @@ -3104,7 +3115,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo return content_type == ContentSettingsType::IMAGES || content_type == ContentSettingsType::JAVASCRIPT || content_type == ContentSettingsType::POPUPS || -@@ -107,7 +115,10 @@ bool RendererContentSettingRules::IsRendererContentSetting( +@@ -115,7 +123,10 @@ bool RendererContentSettingRules::IsRendererContentSetting( void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL( const GURL& outermost_main_frame_url) { @@ -3116,7 +3127,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo } RendererContentSettingRules::RendererContentSettingRules() = default; -@@ -127,7 +138,20 @@ RendererContentSettingRules& RendererContentSettingRules::operator=( +@@ -135,7 +146,20 @@ RendererContentSettingRules& RendererContentSettingRules::operator=( RendererContentSettingRules&& rules) = default; bool RendererContentSettingRules::operator==( @@ -3141,7 +3152,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h -@@ -74,10 +74,22 @@ std::ostream& operator<<(std::ostream& os, +@@ -100,10 +100,22 @@ std::ostream& operator<<(std::ostream& os, typedef std::vector ContentSettingsForOneType; @@ -3167,7 +3178,7 @@ diff --git a/components/content_settings/core/common/content_settings.h b/compon diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom --- a/components/content_settings/core/common/content_settings.mojom +++ b/components/content_settings/core/common/content_settings.mojom -@@ -74,6 +74,11 @@ struct RuleMetaData { +@@ -73,6 +73,11 @@ struct RuleMetaData { mojo_base.mojom.Value rule_options; }; @@ -3179,7 +3190,7 @@ diff --git a/components/content_settings/core/common/content_settings.mojom b/co // This mirrors the C++ type in content_settings.h. struct ContentSettingPatternSource { ContentSettingsPattern primary_pattern; -@@ -87,5 +92,6 @@ struct ContentSettingPatternSource { +@@ -86,5 +91,6 @@ struct ContentSettingPatternSource { // This mirrors the C++ type in content_settings.h. // TODO(crbug.com/40282541): This should be removed. struct RendererContentSettingRules { @@ -3189,7 +3200,7 @@ diff --git a/components/content_settings/core/common/content_settings.mojom b/co diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc --- a/components/content_settings/core/common/content_settings_mojom_traits.cc +++ b/components/content_settings/core/common/content_settings_mojom_traits.cc -@@ -120,12 +120,22 @@ bool StructTraitsmetadata) && data.ReadSource(&out->source); } @@ -3254,10 +3265,10 @@ 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 -@@ -491,5 +491,6 @@ enum ContentSettingsType { - // site. Used for recovering notification contents from the database if the - // user decides they would like to see all of these notifications. - SUSPICIOUS_NOTIFICATION_IDS, +@@ -498,5 +498,6 @@ enum ContentSettingsType { + // Setting for enabling the Device Attributes API. Spec link: + // https://wicg.github.io/WebApiDevice/device_attributes/ + DEVICE_ATTRIBUTES, +#include "components/content_settings/core/common/bromite_content_settings.inc" }; // LINT.ThenChange(//components/content_settings/core/browser/content_settings_uma_util.cc:kHistogramValue) @@ -3419,7 +3430,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/page_info/android/page_info_client.h" -@@ -169,6 +170,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -184,6 +185,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( permissions_to_display.push_back(ContentSettingsType::LOCAL_NETWORK_ACCESS); } @@ -3435,7 +3446,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp std::map user_specified_settings_to_display; std::map -@@ -228,6 +238,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( +@@ -243,6 +253,14 @@ std::optional PageInfoControllerAndroid::GetSettingToDisplay( return permission.setting; } @@ -3461,7 +3472,7 @@ 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" -@@ -1314,6 +1315,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1317,6 +1318,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, // applies to permissions listed in |kPermissionType|. bool PageInfo::ShouldShowPermission( const PageInfo::PermissionInfo& info) const { @@ -3476,7 +3487,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) { -@@ -1430,7 +1439,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1433,7 +1442,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -3508,7 +3519,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in #include "components/page_info/core/features.h" #include "components/page_info/page_info.h" #include "components/page_info/page_info_ui_delegate.h" -@@ -333,6 +334,13 @@ void CreateOppositeToDefaultSiteException( +@@ -317,6 +318,13 @@ void CreateOppositeToDefaultSiteException( std::u16string GetPermissionAskStateString(ContentSettingsType type) { int message_id = kInvalidResourceID; @@ -3522,7 +3533,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in switch (type) { case ContentSettingsType::GEOLOCATION: message_id = IDS_PAGE_INFO_STATE_TEXT_LOCATION_ASK; -@@ -626,6 +634,12 @@ PageInfoUI::~PageInfoUI() = default; +@@ -615,6 +623,12 @@ PageInfoUI::~PageInfoUI() = default; // static std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { @@ -3535,7 +3546,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id); -@@ -636,6 +650,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { +@@ -625,6 +639,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { // static std::u16string PageInfoUI::PermissionTypeToUIStringMidSentence( ContentSettingsType type) { @@ -3548,7 +3559,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id_mid_sentence); -@@ -1077,6 +1097,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { +@@ -1051,6 +1071,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { if (info.type == type) return true; } @@ -3629,7 +3640,7 @@ 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 @@ +@@ -42,6 +42,7 @@ #include "third_party/blink/public/mojom/frame/lifecycle.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" @@ -3637,7 +3648,7 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context #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" -@@ -102,6 +103,10 @@ class SecurityOrigin; +@@ -101,6 +102,10 @@ class SecurityOrigin; class ScriptState; class ScriptWrappable; class TrustedTypePolicyFactory; diff --git a/build/patches/Enable-component-updater.patch b/build/patches/Enable-component-updater.patch index 4bb7e4a9..2f04ff1c 100644 --- a/build/patches/Enable-component-updater.patch +++ b/build/patches/Enable-component-updater.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/aw_browser_main_parts.cc | 7 +++ .../component_updater/registration.cc | 12 +++-- .../nonembedded/webview_apk_application.cc | 2 +- - .../nonembedded/webview_apk_process.cc | 19 +++++--- + .../nonembedded/webview_apk_process.cc | 20 +++++--- .../nonembedded/webview_apk_process.h | 4 +- .../browser/component_updater/registration.cc | 2 + .../component_updater/component_installer.cc | 48 +++++++++++-------- @@ -19,7 +19,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../component_updater_url_constants.cc | 4 +- .../component_updater/configurator_impl.cc | 8 +--- .../component_updater/configurator_impl.h | 2 - - components/crx_file/crx_build_action_main.cc | 11 +++-- + components/crx_file/crx_build_action_main.cc | 10 +++- components/crx_file/crx_verifier.cc | 16 +++++++ components/update_client/component.cc | 12 +++++ components/update_client/crx_downloader.cc | 5 ++ @@ -59,7 +59,7 @@ diff --git a/android_webview/browser/aw_browser_main_parts.cc b/android_webview/ diff --git a/android_webview/nonembedded/component_updater/registration.cc b/android_webview/nonembedded/component_updater/registration.cc --- a/android_webview/nonembedded/component_updater/registration.cc +++ b/android_webview/nonembedded/component_updater/registration.cc -@@ -40,6 +40,9 @@ void RegisterComponentsForUpdate( +@@ -39,6 +39,9 @@ void RegisterComponentsForUpdate( std::vector> component_installer_list; @@ -69,7 +69,7 @@ diff --git a/android_webview/nonembedded/component_updater/registration.cc b/and component_installer_list.push_back( std::make_unique< component_updater::OriginTrialsComponentInstallerPolicy>()); -@@ -111,14 +114,17 @@ void RegisterComponentsForUpdate( +@@ -96,14 +99,17 @@ void RegisterComponentsForUpdate( } base::RepeatingClosure barrier_closure = base::BarrierClosure( @@ -93,7 +93,7 @@ diff --git a/android_webview/nonembedded/component_updater/registration.cc b/and diff --git a/android_webview/nonembedded/webview_apk_application.cc b/android_webview/nonembedded/webview_apk_application.cc --- a/android_webview/nonembedded/webview_apk_application.cc +++ b/android_webview/nonembedded/webview_apk_application.cc -@@ -15,7 +15,7 @@ namespace android_webview { +@@ -14,7 +14,7 @@ namespace android_webview { void JNI_WebViewApkApplication_InitializeGlobalsAndResources(JNIEnv* env) { InitIcuAndResourceBundleBrowserSide(); @@ -105,7 +105,7 @@ diff --git a/android_webview/nonembedded/webview_apk_application.cc b/android_we diff --git a/android_webview/nonembedded/webview_apk_process.cc b/android_webview/nonembedded/webview_apk_process.cc --- a/android_webview/nonembedded/webview_apk_process.cc +++ b/android_webview/nonembedded/webview_apk_process.cc -@@ -34,27 +34,34 @@ WebViewApkProcess* WebViewApkProcess::GetInstance() { +@@ -36,30 +36,36 @@ WebViewApkProcess* WebViewApkProcess::GetInstance() { // static // Must be called exactly once during the process startup. @@ -133,16 +133,19 @@ diff --git a/android_webview/nonembedded/webview_apk_process.cc b/android_webvie // `base::MessagePumpType::JAVA` so that the `SingleThreadExecutor` will bind // to the java thread the `WebViewApkProcess` is created on. - main_task_executor_ = std::make_unique( +- base::MessagePumpType::JAVA); + if (!embedded) { + main_task_executor_ = std::make_unique( - base::MessagePumpType::JAVA); ++ base::MessagePumpType::JAVA); + } -+ + // WebView is not compatible with new compression protocols. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + update_client::switches::kComponentUpdaterCompatProtocols); + +- RegisterPathProvider(); + if (!embedded) { + RegisterPathProvider(); + } - -- RegisterPathProvider(); component_updater::RegisterPathProvider( /*components_system_root_key=*/android_webview::DIR_COMPONENTS_ROOT, /*components_system_root_key_alt=*/android_webview::DIR_COMPONENTS_ROOT, @@ -168,7 +171,7 @@ diff --git a/android_webview/nonembedded/webview_apk_process.h b/android_webview diff --git a/chrome/browser/component_updater/registration.cc b/chrome/browser/component_updater/registration.cc --- a/chrome/browser/component_updater/registration.cc +++ b/chrome/browser/component_updater/registration.cc -@@ -122,6 +122,8 @@ namespace component_updater { +@@ -120,6 +120,8 @@ namespace component_updater { void RegisterComponentsForUpdate() { auto* const cus = g_browser_process->component_updater(); @@ -443,29 +446,28 @@ diff --git a/components/component_updater/configurator_impl.h b/components/compo diff --git a/components/crx_file/crx_build_action_main.cc b/components/crx_file/crx_build_action_main.cc --- a/components/crx_file/crx_build_action_main.cc +++ b/components/crx_file/crx_build_action_main.cc -@@ -14,6 +14,7 @@ +@@ -9,6 +9,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/strings/string_number_conversions.h" #include "components/crx_file/crx_creator.h" - #include "crypto/rsa_private_key.h" + #include "crypto/keypair.h" -@@ -30,9 +31,13 @@ int main(int argc, char* argv[]) { +@@ -30,8 +31,13 @@ int main(int argc, char** raw_argv) { VLOG(0) << "Failed to read key material from " << argv[3]; return -1; } + auto signing_key = crypto::RSAPrivateKey::CreateFromPrivateKeyInfo( -+ std::vector(key_file.begin(), key_file.end())); ++ base::as_byte_span(key_file)); + std::vector public_key; + signing_key->ExportPublicKey(&public_key); + VLOG(0) << "Pubkey: " << base::HexEncode(public_key); + return static_cast(crx_file::Create( base::FilePath::FromASCII(argv[1]), base::FilePath::FromASCII(argv[2]), -- crypto::RSAPrivateKey::CreateFromPrivateKeyInfo( -- std::vector(key_file.begin(), key_file.end())) -- .get())); +- *crypto::keypair::PrivateKey::FromPrivateKeyInfo( +- base::as_byte_span(key_file)))); + signing_key.get())); } diff --git a/components/crx_file/crx_verifier.cc b/components/crx_file/crx_verifier.cc diff --git a/build/patches/Enable-network-isolation-features.patch b/build/patches/Enable-network-isolation-features.patch index 85057218..76673151 100644 --- a/build/patches/Enable-network-isolation-features.patch +++ b/build/patches/Enable-network-isolation-features.patch @@ -9,27 +9,29 @@ PartitionNelAndReportingByNetworkIsolationKey, kSplitCacheByNavigationInitiator License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../browser/net/profile_network_context_service.cc | 2 +- + .../browser/net/profile_network_context_service.cc | 4 ++-- .../Enable-network-isolation-features.inc | 9 +++++++++ .../Enable-network-isolation-features.inc | 1 + net/http/http_cache.cc | 14 +++++++++----- net/http/http_cache.h | 2 +- - 5 files changed, 21 insertions(+), 7 deletions(-) + 5 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -1285,7 +1285,7 @@ bool GetHttpCacheBackendResetParam(PrefService* local_state) { - field_trial = base::FeatureList::GetFieldTrial( - net::features::kSplitCacheByIncludeCredentials); - current_field_trial_status += -- (field_trial ? field_trial->group_name() : "None"); -+ (field_trial ? field_trial->group_name() : "EnableFeatureForTests"); +@@ -467,8 +467,8 @@ bool GetHttpCacheBackendResetParam(PrefService* local_state) { + experiment_parts.push_back(kDiskCacheExperimentNameNone); + // SplitCacheByIncludeCredentials experiment: + experiment_parts.push_back(credentials_field_trial +- ? credentials_field_trial->group_name() +- : kDiskCacheExperimentNameNone); ++ ? "EnableFeatureForTests" ++ : "EnableFeatureForTests"); - if (disk_cache::InBackendExperiment()) { - if (disk_cache::InSimpleBackendExperimentGroup()) { + // Add the disk cache backend experiment group if active. + std::string_view backend_experiment = GetDiskCacheBackendExperimentString(); diff --git a/cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc b/cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc new file mode 100644 --- /dev/null @@ -53,7 +55,7 @@ new file mode 100644 diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc -@@ -652,7 +652,7 @@ bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) { +@@ -671,7 +671,7 @@ bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) { // static // Generate a key that can be used inside the cache. @@ -62,7 +64,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc const GURL& url, int load_flags, const NetworkIsolationKey& network_isolation_key, -@@ -690,8 +690,8 @@ std::string HttpCache::GenerateCacheKey( +@@ -709,8 +709,8 @@ std::string HttpCache::GenerateCacheKey( const bool is_initiator_cross_site = !net::SchemefulSite::IsSameSite(*initiator, url::Origin::Create(url)); if (is_initiator_cross_site) { @@ -73,7 +75,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc } } isolation_key = base::StrCat( -@@ -706,9 +706,11 @@ std::string HttpCache::GenerateCacheKey( +@@ -725,9 +725,11 @@ std::string HttpCache::GenerateCacheKey( // Strip out the reference, username, and password sections of the URL and // concatenate with the credential_key, the post_key, and the network // isolation key if we are splitting the cache. @@ -86,7 +88,7 @@ diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc } // static -@@ -731,11 +733,13 @@ HttpCache::GenerateCacheKeyForRequestWithAlternateURL( +@@ -750,11 +752,13 @@ HttpCache::GenerateCacheKeyForRequestWithAlternateURL( const int64_t upload_data_identifier = request->upload_data_stream ? request->upload_data_stream->identifier() : int64_t(0); diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index fead5e56..07183ce6 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -40,7 +40,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/profiles/profile_manager.cc | 11 + chrome/browser/profiles/renderer_updater.cc | 19 +- chrome/browser/profiles/renderer_updater.h | 3 + - .../browser/ui/webui/chrome_web_ui_configs.cc | 6 + + .../browser/ui/webui/chrome_web_ui_configs.cc | 7 +- chrome/chrome_paks.gni | 2 + chrome/common/renderer_configuration.mojom | 1 + chrome/renderer/BUILD.gn | 6 + @@ -135,11 +135,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/web_ui_injection_host.cc | 40 + .../renderer/web_ui_injection_host.h | 31 + .../strings/userscripts_strings.grdp | 54 ++ - content/common/features.gni | 2 +- .../Experimental-user-scripts-support.inc | 13 + ipc/ipc_message_start.h | 1 + tools/gritsettings/resource_ids.spec | 6 + - 112 files changed, 10380 insertions(+), 3 deletions(-) + 111 files changed, 10379 insertions(+), 3 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -233,7 +232,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -200,7 +200,11 @@ if (_is_default_toolchain) { +@@ -191,7 +191,11 @@ if (_is_default_toolchain) { sources = chrome_java_resources sources += [ "//chrome/android/java/res_app/layout/main.xml" ] @@ -246,7 +245,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn ":chrome_base_module_resources", ":ui_locale_string_resources", "//chrome/android/webapk/libs/common:splash_resources", -@@ -704,6 +708,7 @@ if (_is_default_toolchain) { +@@ -701,6 +705,7 @@ if (_is_default_toolchain) { "//components/ukm/android:java", "//components/url_formatter/android:url_formatter_java", "//components/user_prefs/android:java", @@ -254,7 +253,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/variations:variations_java", "//components/variations/android:variations_java", "//components/viz/service:service_java", -@@ -1668,6 +1673,7 @@ if (_is_default_toolchain) { +@@ -1687,6 +1692,7 @@ if (_is_default_toolchain) { java_group("chrome_public_non_pak_assets") { deps = [ "//chrome/android/webapk/libs/runtime_library:runtime_library_assets", @@ -265,7 +264,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -154,6 +154,11 @@ for the previous order (main_preferences_legacy). --> +@@ -153,6 +153,11 @@ for the previous order (main_preferences_legacy). --> android:key="useragent_settings" android:order="20" android:title="@string/prefs_useragent_settings"/> @@ -280,7 +279,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/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -76,6 +76,7 @@ import org.chromium.ui.base.DeviceFormFactor; +@@ -80,6 +80,7 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.MimeTypeUtils; import org.chromium.ui.widget.Toast; import org.chromium.url.GURL; @@ -288,7 +287,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo import java.io.File; -@@ -440,6 +441,11 @@ public class DownloadUtils { +@@ -451,6 +452,11 @@ public class DownloadUtils { String referrer, @DownloadOpenSource int source, Context context) { @@ -341,7 +340,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3662,6 +3662,13 @@ static_library("browser") { +@@ -3675,6 +3675,13 @@ static_library("browser") { ] deps += [ "//chrome/android/modules/dev_ui/provider:native" ] } @@ -358,7 +357,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 -@@ -187,6 +187,7 @@ +@@ -186,6 +186,7 @@ #include "components/ui_devtools/switches.h" #include "components/variations/variations_switches.h" #include "components/version_info/channel.h" @@ -369,15 +368,15 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc 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 -@@ -280,6 +280,7 @@ +@@ -278,6 +278,7 @@ #include "components/ntp_tiles/popular_sites_impl.h" #include "components/permissions/contexts/geolocation_permission_context_android.h" #include "components/webapps/browser/android/install_prompt_prefs.h" +#include "components/user_scripts/browser/user_script_prefs.h" #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h" - #include "chrome/browser/device_api/device_service_impl.h" -@@ -2088,6 +2089,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + #include "chrome/browser/gcm/gcm_product_util.h" +@@ -2007,6 +2008,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry); omnibox::RegisterProfilePrefs(registry); ZeroSuggestProvider::RegisterProfilePrefs(registry); @@ -390,7 +389,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn --- a/chrome/browser/profiles/BUILD.gn +++ b/chrome/browser/profiles/BUILD.gn -@@ -82,6 +82,9 @@ source_set("profile") { +@@ -83,6 +83,9 @@ source_set("profile") { "//content/public/browser", "//extensions/buildflags", ] @@ -403,7 +402,7 @@ diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn 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 -@@ -583,6 +583,10 @@ +@@ -590,6 +590,10 @@ #include "chrome/browser/net/nss_service_factory.h" #endif @@ -414,7 +413,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { main_parts->AddParts(std::make_unique()); } -@@ -1415,6 +1419,9 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1430,6 +1434,9 @@ void ChromeBrowserMainExtraPartsProfiles:: #endif WebDataServiceFactory::GetInstance(); webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance(); @@ -516,7 +515,7 @@ diff --git a/chrome/browser/profiles/renderer_updater.h b/chrome/browser/profile 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 -@@ -58,6 +58,9 @@ +@@ -60,6 +60,9 @@ #include "chrome/browser/ui/webui/proxy_config_ui.h" @@ -526,28 +525,31 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #if BUILDFLAG(ENABLE_WEBUI_CERTIFICATE_VIEWER) #include "chrome/browser/ui/webui/certificate_viewer/certificate_viewer_ui.h" -@@ -423,4 +426,7 @@ void RegisterChromeWebUIConfigs() { +@@ -430,7 +433,9 @@ void RegisterChromeWebUIConfigs() { map.AddWebUIConfig( std::make_unique()); #endif +- +#if BUILDFLAG(IS_ANDROID) + map.AddWebUIConfig(std::make_unique()); +#endif - } + #if BUILDFLAG(ENTERPRISE_WATERMARK) + map.AddWebUIConfig(std::make_unique()); + #endif diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni -@@ -149,6 +149,7 @@ template("chrome_extra_paks") { - "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", +@@ -152,6 +152,7 @@ template("chrome_extra_paks") { "$root_gen_dir/third_party/blink/public/resources/inspector_overlay_resources.pak", "$root_gen_dir/third_party/blink/public/strings/permission_element_generated_strings.pak", + "$root_gen_dir/ui/resources/ui_lottie_resources.pak", + "$root_gen_dir/chrome/userscripts_browser_resources.pak", "$root_gen_dir/ui/webui/resources/webui_resources.pak", ] - deps = [ -@@ -169,6 +170,7 @@ template("chrome_extra_paks") { - "//third_party/blink/public:resources", + +@@ -175,6 +176,7 @@ template("chrome_extra_paks") { "//third_party/blink/public/strings:permission_element_generated_strings", + "//ui/resources:ui_lottie_resources_grd", "//ui/webui/resources", + "//components/user_scripts/browser:userscripts_browser_resources_grit", ] @@ -567,7 +569,7 @@ diff --git a/chrome/common/renderer_configuration.mojom b/chrome/common/renderer diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -235,6 +235,12 @@ static_library("renderer") { +@@ -231,6 +231,12 @@ static_library("renderer") { "//v8", ] @@ -583,7 +585,7 @@ diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc -@@ -265,6 +265,11 @@ +@@ -252,6 +252,11 @@ #include "chrome/renderer/media/chrome_key_systems.h" #endif @@ -595,7 +597,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer using autofill::AutofillAgent; using autofill::PasswordAutofillAgent; using autofill::PasswordGenerationAgent; -@@ -450,6 +455,14 @@ void ChromeContentRendererClient::RenderThreadStarted() { +@@ -417,6 +422,14 @@ void ChromeContentRendererClient::RenderThreadStarted() { WebString::FromASCII(extensions::kExtensionScheme)); #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -610,8 +612,8 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer #if BUILDFLAG(ENABLE_SPELLCHECK) if (!spellcheck_) InitSpellCheck(); -@@ -621,6 +634,15 @@ void ChromeContentRendererClient::RenderFrameCreated( - registry); +@@ -597,6 +610,15 @@ void ChromeContentRendererClient::RenderFrameCreated( + render_frame, std::make_unique()); #endif +#if BUILDFLAG(IS_ANDROID) @@ -623,10 +625,10 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer + } +#endif + - #if BUILDFLAG(ENABLE_PPAPI) - new PepperHelper(render_frame); + #if BUILDFLAG(ENABLE_PAINT_PREVIEW) + new paint_preview::PaintPreviewRecorderImpl(render_frame); #endif -@@ -1669,6 +1691,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( +@@ -1359,6 +1381,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( render_frame); // |render_frame| might be dead by now. #endif @@ -644,7 +646,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer } void ChromeContentRendererClient::RunScriptsAtDocumentEnd( -@@ -1678,6 +1711,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( +@@ -1368,6 +1401,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( render_frame); // |render_frame| might be dead by now. #endif @@ -662,7 +664,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer } void ChromeContentRendererClient::RunScriptsAtDocumentIdle( -@@ -1687,6 +1731,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( +@@ -1377,6 +1421,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( render_frame); // |render_frame| might be dead by now. #endif @@ -683,7 +685,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc --- a/chrome/renderer/chrome_render_thread_observer.cc +++ b/chrome/renderer/chrome_render_thread_observer.cc -@@ -55,6 +55,8 @@ +@@ -54,6 +54,8 @@ #include "third_party/blink/public/web/web_security_policy.h" #include "third_party/blink/public/web/web_view.h" @@ -692,7 +694,7 @@ diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/ #if BUILDFLAG(IS_CHROMEOS) #include "chrome/renderer/ash_merge_session_loader_throttle.h" #endif -@@ -221,6 +223,9 @@ void ChromeRenderThreadObserver::SetConfiguration( +@@ -220,6 +222,9 @@ void ChromeRenderThreadObserver::SetConfiguration( chrome::mojom::DynamicParamsPtr params) { base::AutoLock lock(dynamic_params_lock_); dynamic_params_ = std::move(params); @@ -705,7 +707,7 @@ diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/ diff --git a/components/components_strings.grd b/components/components_strings.grd --- a/components/components_strings.grd +++ b/components/components_strings.grd -@@ -341,6 +341,7 @@ +@@ -342,6 +342,7 @@ @@ -11363,16 +11365,6 @@ new file mode 100755 + + + -diff --git a/content/common/features.gni b/content/common/features.gni ---- a/content/common/features.gni -+++ b/content/common/features.gni -@@ -20,5 +20,5 @@ declare_args() { - mbi_mode = is_linux || is_chromeos || is_mac || is_win || is_android - - # We allow legacy IPC to be enabled for Pepper usage. -- content_enable_legacy_ipc = enable_ppapi -+ content_enable_legacy_ipc = true - } diff --git a/cromite_flags/chrome/browser/about_flags_cc/Experimental-user-scripts-support.inc b/cromite_flags/chrome/browser/about_flags_cc/Experimental-user-scripts-support.inc new file mode 100644 --- /dev/null @@ -11394,18 +11386,18 @@ new file mode 100644 diff --git a/ipc/ipc_message_start.h b/ipc/ipc_message_start.h --- a/ipc/ipc_message_start.h +++ b/ipc/ipc_message_start.h -@@ -17,6 +17,7 @@ enum IPCMessageStart { - WorkerMsgStart, - NaClMsgStart, - PpapiMsgStart, +@@ -14,6 +14,7 @@ + enum IPCMessageStart { + AutomationMsgStart = 0, + TestMsgStart, + ExtensionMsgStart, - NaClHostMsgStart, + WorkerMsgStart, LastIPCMsgStart // Must come last. }; diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec -@@ -1162,6 +1162,12 @@ +@@ -1186,6 +1186,12 @@ "META": {"sizes": {"includes": [30],}}, "includes": [7480], }, diff --git a/build/patches/Eyeo-Adblock-for-Cromite.patch b/build/patches/Eyeo-Adblock-for-Cromite.patch index 26e94118..b28af9c9 100644 --- a/build/patches/Eyeo-Adblock-for-Cromite.patch +++ b/build/patches/Eyeo-Adblock-for-Cromite.patch @@ -155,7 +155,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j -@@ -99,11 +90,6 @@ for the previous order (main_preferences_legacy). --> +@@ -98,11 +89,6 @@ for the previous order (main_preferences_legacy). --> android:key="autofill_options" android:order="16" android:title="@string/autofill_options_title" /> @@ -167,7 +167,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j +@@ -134,6 +120,11 @@ for the previous order (main_preferences_legacy). --> android:key="adblock" android:order="13" android:title="@string/prefs_adblock"/> @@ -873,7 +873,7 @@ diff --git a/chrome/browser/adblock/android/java/src/org/chromium/chrome/browser 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 -@@ -6461,7 +6461,9 @@ ChromeContentBrowserClient:: +@@ -6412,7 +6412,9 @@ ChromeContentBrowserClient:: } bool ChromeContentBrowserClient::WillInterceptWebSocket( @@ -884,7 +884,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (!frame) { return false; -@@ -6484,9 +6486,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( +@@ -6435,9 +6437,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( } void ChromeContentBrowserClient::CreateWebSocket( @@ -899,7 +899,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h -@@ -730,11 +730,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { +@@ -715,11 +715,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { CreateURLLoaderHandlerForServiceWorkerNavigationPreload( content::FrameTreeNodeId frame_tree_node_id, const network::ResourceRequest& resource_request) override; @@ -1189,7 +1189,7 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro 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 -@@ -249,7 +249,6 @@ +@@ -255,7 +255,6 @@ #include "chrome/common/buildflags.h" #include "chrome/common/chrome_features.h" #include "components/adblock/content/browser/factories/adblock_request_throttle_factory.h" @@ -1197,7 +1197,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "components/adblock/content/browser/factories/content_security_policy_injector_factory.h" #include "components/adblock/content/browser/factories/element_hider_factory.h" #include "components/adblock/content/browser/factories/resource_classification_runner_factory.h" -@@ -936,7 +935,6 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -946,7 +945,6 @@ void ChromeBrowserMainExtraPartsProfiles:: // Makes manual testing possible. FakeSmartCardDeviceServiceFactory::GetInstance(); #endif @@ -1208,15 +1208,15 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc 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 -@@ -64,6 +64,7 @@ build_webui("build") { +@@ -66,6 +66,7 @@ build_webui("build") { "ai_page/ai_tab_organization_subpage.ts", "ai_page/history_search_page.ts", "ai_page/offer_writing_help_page.ts", + "adblock_page/adblock_page.ts", "appearance_page/appearance_fonts_page.ts", + "appearance_page/appearance_page_index.ts", "appearance_page/appearance_page.ts", - "appearance_page/home_url_input.ts", -@@ -372,6 +373,7 @@ build_webui("build") { +@@ -392,6 +393,7 @@ build_webui("build") { ts_definitions = [ "//tools/typescript/definitions/autofill_private.d.ts", "//tools/typescript/definitions/chrome_event.d.ts", @@ -1752,28 +1752,26 @@ new file mode 100644 diff --git a/chrome/browser/resources/settings/basic_page/basic_page.html b/chrome/browser/resources/settings/basic_page/basic_page.html --- a/chrome/browser/resources/settings/basic_page/basic_page.html +++ b/chrome/browser/resources/settings/basic_page/basic_page.html -@@ -51,6 +51,10 @@ - - - -+ -+ -+ -