From 184a1e7fade663f9498752a2cfe1189bb10f6fd0 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Sun, 27 Apr 2025 15:43:30 +0200 Subject: [PATCH] Patches for v136 (need some work) --- .../Add-an-always-incognito-mode.patch | 132 ++++++------- ...Add-lifetime-options-for-permissions.patch | 64 +++---- .../Add-menu-item-to-bookmark-all-tabs.patch | 52 ++--- build/patches/Add-search-engine.patch | 84 ++++----- .../Add-setting-to-clear-data-on-exit.patch | 37 ++-- .../Follow-only-system-dark-mode.patch | 2 +- .../patches/Override-Navigator-Language.patch | 2 +- .../Partition-Blink-memory-cache.patch | 14 +- .../Partition-blobs-by-top-frame-URL.patch | 178 +++++++++++------- build/patches/Welcome-screen.patch | 46 +++-- 10 files changed, 325 insertions(+), 286 deletions(-) diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 3b970c9b..edf675ce 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -99,7 +99,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 -@@ -643,6 +643,7 @@ chrome_java_resources = [ +@@ -645,6 +645,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", @@ -118,7 +118,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", -@@ -879,6 +880,7 @@ chrome_java_sources = [ +@@ -880,6 +881,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", @@ -245,7 +245,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -71,6 +71,10 @@ import org.chromium.base.task.TaskTraits; +@@ -72,6 +72,10 @@ import org.chromium.base.task.TaskTraits; import org.chromium.build.annotations.UsedByReflection; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; @@ -253,10 +253,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct +import org.chromium.components.user_prefs.UserPrefs; +import org.chromium.chrome.browser.preferences.Pref; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.IntentHandler.ExternalAppId; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; - import org.chromium.chrome.browser.app.metrics.LaunchCauseMetrics; -@@ -727,14 +731,19 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -705,14 +709,19 @@ public class ChromeTabbedActivity extends ChromeActivity { Profile profile = mTabModelSelector.getCurrentModel().getProfile(); // For saving non-incognito tab closures for Recent Tabs. @@ -273,17 +273,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct + mTabModelSelector .getTabGroupModelFilterProvider() - .getTabGroupModelFilter(false)); -- mHistoricalTabModelObserver.addSecodaryTabModelSupplier( +- mHistoricalTabModelObserver.addSecondaryTabModelSupplier( - ArchivedTabModelOrchestrator.getForProfile(profile)::getTabModel); - + .getTabGroupModelFilter(alwaysIncognito)); -+ mHistoricalTabModelObserver.addSecodaryTabModelSupplier( ++ mHistoricalTabModelObserver.addSecondaryTabModelSupplier( + ArchivedTabModelOrchestrator.getForProfile(profile)::getTabModel); + } // Defer creation of this helper so it triggers after TabGroupModelFilter observers. mUndoRefocusHelper = new UndoRefocusHelper( -@@ -2614,8 +2623,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -2733,8 +2742,9 @@ public class ChromeTabbedActivity extends ChromeActivity { // We determine the model as soon as possible so every systems get initialized coherently. boolean startIncognito = @@ -298,15 +298,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -94,6 +94,7 @@ import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; - import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerHandler; +@@ -95,6 +95,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; import org.chromium.chrome.browser.device.DeviceClassManager; + import org.chromium.chrome.browser.devtools.DevToolsWindowAndroid; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; import org.chromium.chrome.browser.download.DownloadManagerService; import org.chromium.chrome.browser.download.DownloadUtils; -@@ -1953,6 +1954,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -1977,6 +1978,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -319,16 +319,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -38,6 +38,8 @@ import org.chromium.base.supplier.Supplier; - import org.chromium.build.BuildConfig; +@@ -41,6 +41,8 @@ import org.chromium.build.BuildConfig; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; + import org.chromium.chrome.browser.ai.AiAssistantService; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; +import org.chromium.chrome.browser.profiles.ProfileManager; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.PowerBookmarkUtils; import org.chromium.chrome.browser.commerce.ShoppingServiceFactory; -@@ -102,6 +104,10 @@ import java.util.ArrayList; +@@ -106,6 +108,10 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -339,7 +339,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App /** * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu * items based on activity state. -@@ -609,6 +615,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -617,6 +623,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { @@ -353,7 +353,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App // We have to iterate all menu items since same menu item ID may be associated with more // than one menu items. boolean isOverviewModeMenu = menuGroup == MenuGroup.OVERVIEW_MODE_MENU; -@@ -672,7 +685,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -676,7 +689,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } if (item.getItemId() == R.id.recent_tabs_menu_id) { @@ -370,7 +370,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App } if (item.getItemId() == R.id.menu_select_tabs) { item.setVisible(isMenuSelectTabsVisible); -@@ -877,8 +898,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -884,8 +905,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate && !isNativePage && !isFileScheme && !isContentScheme @@ -393,7 +393,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType; -@@ -277,6 +278,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -293,6 +294,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { public List> buildContextMenu() { mShowEphemeralTabNewLabel = null; @@ -402,8 +402,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr + List> groupedItems = new ArrayList<>(); - if (mParams.isAnchor()) { -@@ -287,6 +291,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + if (mParams.isPage() && shouldShowEmptySpaceContextMenu()) { +@@ -320,6 +324,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { if (mMode == ContextMenuMode.NORMAL) { linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP)); linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB)); @@ -411,7 +411,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) { linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB)); } -@@ -317,7 +322,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -350,7 +355,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { @@ -503,7 +503,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -1183,6 +1186,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1197,6 +1200,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return getInitialActivityWidth() > 0; } @@ -539,7 +539,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo /** A class containing some utility static methods. */ public class DownloadUtils { private static final String TAG = "download"; -@@ -298,7 +303,16 @@ public class DownloadUtils { +@@ -302,7 +307,16 @@ public class DownloadUtils { // Offline pages isn't supported in Incognito. This should be checked before calling // OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found // for incognito profile. @@ -560,7 +560,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 -@@ -300,7 +300,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -302,7 +302,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.generateFooterItems(); // Listen to changes in sign in state. @@ -571,7 +571,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); -@@ -376,7 +378,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -378,7 +380,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.onDestroyed(); mLargeIconBridge.destroy(); mLargeIconBridge = null; @@ -584,7 +584,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 -@@ -55,6 +55,14 @@ import org.chromium.ui.base.Clipboard; +@@ -54,6 +54,14 @@ import org.chromium.ui.base.Clipboard; import java.util.List; @@ -599,7 +599,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, -@@ -157,7 +165,7 @@ public class HistoryManager +@@ -156,7 +164,7 @@ public class HistoryManager mUmaRecorder.recordOpenHistory(); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -608,7 +608,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -425,9 +433,22 @@ public class HistoryManager +@@ -406,9 +414,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -632,7 +632,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; } -@@ -487,7 +508,7 @@ public class HistoryManager +@@ -468,7 +489,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -925,9 +925,9 @@ 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; -@@ -238,6 +239,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl - mModalDialogManagerSupplier, - SigninAndHistorySyncActivityLauncherImpl.get())); +@@ -239,6 +240,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl + SigninAndHistorySyncActivityLauncherImpl.get(), + new SettingsCustomTabLauncherImpl())); } + if (fragment instanceof INeedSnackbarManager) { + ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); @@ -1005,7 +1005,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore return; } -@@ -190,14 +192,15 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -189,14 +191,15 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { CollectionUtil.integerCollectionToIntArray(savedStateVersions)); } @@ -1023,7 +1023,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore } /** -@@ -205,7 +208,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -204,7 +207,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { * internal Chrome scheme, about:blank, or a native page and it cannot be incognito. */ private boolean shouldSave(Tab tab) { @@ -1032,7 +1032,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore // Check the secondary tab model to see if the tab was moved instead of deleted. if (tabIdExistsInSecondaryModel(tab.getId())) return false; -@@ -295,7 +298,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -293,7 +296,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { @NativeMethods interface Natives { @@ -1044,7 +1044,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/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 -@@ -191,6 +191,8 @@ import org.chromium.ui.InsetObserver; +@@ -201,6 +201,8 @@ import org.chromium.ui.InsetObserver; import org.chromium.ui.UiUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.DeviceFormFactor; @@ -1053,7 +1053,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.dragdrop.DragDropGlobalState; -@@ -1148,7 +1150,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1174,7 +1176,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1065,7 +1065,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 -@@ -46,6 +46,10 @@ import org.chromium.ui.base.PageTransition; +@@ -49,6 +49,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1074,9 +1074,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome +import org.chromium.chrome.browser.tab.TabObserver; + /** This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ - public class ChromeTabCreator extends TabCreator { - private final Activity mActivity; -@@ -502,7 +506,6 @@ public class ChromeTabCreator extends TabCreator { + public class ChromeTabCreator extends TabCreator + implements NeedsTabModel, NeedsTabModelOrderController { +@@ -520,7 +524,6 @@ public class ChromeTabCreator extends TabCreator // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. public Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1095,19 +1095,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.ntp.RecentlyClosedBridge; import org.chromium.chrome.browser.profiles.ProfileProvider; -@@ -118,6 +119,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod +@@ -121,6 +122,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ProfileProvider profileProvider = mProfileProviderSupplier.get(); assert profileProvider != null; + AlwaysIncognitoLinkInterceptor.migrateSettingToNative(); + - ChromeTabCreator regularTabCreator = - (ChromeTabCreator) getTabCreatorManager().getTabCreator(false); - ChromeTabCreator incognitoTabCreator = + TabCreator regularTabCreator = getTabCreatorManager().getTabCreator(false); + TabCreator incognitoTabCreator = getTabCreatorManager().getTabCreator(true); + mRecentlyClosedBridge = 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 -@@ -49,6 +49,8 @@ import org.chromium.chrome.browser.tabpersistence.TabStateFileManager; +@@ -50,6 +50,8 @@ import org.chromium.chrome.browser.tabpersistence.TabStateFileManager; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; @@ -1116,7 +1116,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; -@@ -832,6 +834,13 @@ public class TabPersistentStore { +@@ -833,6 +835,13 @@ public class TabPersistentStore { } } } @@ -1133,7 +1133,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -44,6 +44,7 @@ import org.chromium.base.supplier.Supplier; +@@ -47,6 +47,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -1141,7 +1141,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.tabmodel.TabWindowManagerSingleton; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -748,7 +749,7 @@ public class ToolbarManager +@@ -754,7 +755,7 @@ public class ToolbarManager TraceEvent.end("isOfflinePage"); return ret; } @@ -1211,7 +1211,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; -@@ -107,7 +112,8 @@ std::vector> StringsToUuids( +@@ -104,7 +109,8 @@ std::vector> StringsToUuids( void CreateHistoricalTab( TabAndroid* tab_android, @@ -1221,7 +1221,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!tab_android) { return; } -@@ -118,9 +124,14 @@ void CreateHistoricalTab( +@@ -115,9 +121,14 @@ void CreateHistoricalTab( return; } @@ -1238,16 +1238,16 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!service) { return; } -@@ -186,7 +197,7 @@ void CreateHistoricalBulkClosure( - std::vector per_tab_root_id, +@@ -181,7 +192,7 @@ void CreateHistoricalBulkClosure( + per_tab_optional_tab_group_ids, std::vector> tabs, std::vector web_contents_state) { - DCHECK(model); + if (!model) return; - DCHECK_EQ(root_ids.size(), group_titles.size()); - DCHECK_EQ(root_ids.size(), group_colors.size()); - DCHECK_EQ(root_ids.size(), optional_tab_group_ids.size()); -@@ -318,11 +329,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( + 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( JNIEnv* env, const JavaParamRef& jtab_android, const JavaParamRef& state, @@ -1265,7 +1265,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -374,6 +374,15 @@ ChromeAutocompleteProviderClient::GetProviderStateService() const { +@@ -376,6 +376,15 @@ ChromeAutocompleteProviderClient::GetProviderStateService() const { return ProviderStateServiceFactory::GetForProfile(profile_); } @@ -1402,7 +1402,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" -@@ -511,6 +514,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -549,6 +552,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -1416,7 +1416,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return nullptr; -@@ -518,6 +528,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -556,6 +566,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -1457,7 +1457,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; -@@ -89,9 +96,6 @@ class HistoryTabHelper +@@ -91,9 +98,6 @@ class HistoryTabHelper void OnLanguageDetermined( const translate::LanguageDetectionDetails& details) override; @@ -1765,7 +1765,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 -@@ -245,6 +245,7 @@ +@@ -244,6 +244,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1773,7 +1773,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" -@@ -2010,6 +2011,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2008,6 +2009,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1934,7 +1934,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ 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 -@@ -6528,6 +6528,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6574,6 +6574,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -1991,7 +1991,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/messages/android/BUILD.gn b/chrome/browser/ui/messages/android/BUILD.gn --- a/chrome/browser/ui/messages/android/BUILD.gn +++ b/chrome/browser/ui/messages/android/BUILD.gn -@@ -28,6 +28,7 @@ android_library("java") { +@@ -27,6 +27,7 @@ android_library("java") { srcjar_deps = [ ":jni_headers" ] sources = [ "java/src/org/chromium/chrome/browser/ui/messages/infobar/SimpleConfirmInfoBarBuilder.java", @@ -2058,7 +2058,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 -@@ -4071,6 +4071,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4070,6 +4070,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index d34bde28..ba504d15 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -256,7 +256,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 -@@ -269,7 +269,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { +@@ -266,7 +266,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { delegate_->Accept(); return; case PermissionDialogButton::kAcceptOnce: @@ -279,7 +279,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 -@@ -603,6 +603,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -617,6 +617,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } @RequiresNonNull({"mSite"}) @@ -290,8 +290,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); - assumeNonNull(preference); -@@ -1195,6 +1200,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + long usage = mSite.getTotalUsage(); +@@ -1285,6 +1290,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } @@ -317,7 +317,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 -@@ -637,6 +637,11 @@ +@@ -646,6 +646,11 @@ URL truncated @@ -384,8 +384,8 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, ContentSettingsType::SMART_CARD_DATA, - }}; -@@ -256,9 +289,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { + ContentSettingsType::AR, +@@ -258,9 +291,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { ContentSettingsType::CAPTURED_SURFACE_CONTROL, #endif ContentSettingsType::KEYBOARD_LOCK, @@ -393,8 +393,8 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc - ContentSettingsType::MEDIASTREAM_MIC, - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, - }}; - return *types; + ContentSettingsType::AR, + ContentSettingsType::VR, 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 @@ -433,7 +433,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 -@@ -385,9 +385,9 @@ public class PageInfoController +@@ -386,9 +386,9 @@ public class PageInfoController String name, String nameMidSentence, int type, @@ -448,7 +448,7 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java -@@ -44,8 +44,9 @@ public class PermissionParamsListBuilder { +@@ -48,8 +48,9 @@ public class PermissionParamsListBuilder { } public void addPermissionEntry( @@ -460,18 +460,18 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ } public void clearPermissionEntries() { -@@ -86,6 +87,10 @@ public class PermissionParamsListBuilder { - permissionParams.warningTextResource = - R.string.page_info_android_permission_blocked; +@@ -85,6 +86,10 @@ public class PermissionParamsListBuilder { + } else { + warningTextResource = R.string.page_info_android_permission_blocked; } + if (permission.is_user_session) { + permissionParams.warningTextResource = + R.string.page_info_android_permission_session_permission; + } } - } - -@@ -127,13 +132,15 @@ public class PermissionParamsListBuilder { + } else { + assert permission.setting == ContentSettingValues.ASK +@@ -121,13 +126,15 @@ public class PermissionParamsListBuilder { public final String nameMidSentence; public final int type; public final @ContentSettingValues int setting; @@ -532,7 +532,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 -@@ -1197,6 +1197,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1210,6 +1210,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -544,7 +544,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, +@@ -149,6 +149,7 @@ class PageInfo : private content_settings::CookieControlsObserver, content_settings::SettingSource::kNone; // Whether the permission is a one-time grant. bool is_one_time = false; @@ -691,7 +691,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 -@@ -109,7 +109,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { +@@ -117,7 +117,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } @@ -704,7 +704,7 @@ diff --git a/components/permissions/android/permission_prompt/embedded_permissio diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h -@@ -44,7 +44,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { +@@ -45,7 +45,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { const override; void Closing() override; void Accept() override; @@ -984,8 +984,8 @@ 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 -@@ -267,6 +267,17 @@ const PermissionRequest* PermissionContextBase::FindPermissionRequest( - return request->second.first.get(); +@@ -271,6 +271,17 @@ GURL PermissionContextBase::GetEffectiveEmbedderOrigin( + return PermissionUtil::GetLastCommittedOriginAsURL(rfh->GetMainFrame()); } +std::unique_ptr @@ -1002,7 +1002,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm content::PermissionResult PermissionContextBase::GetPermissionStatus( content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, -@@ -526,7 +537,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -530,7 +541,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time, @@ -1012,7 +1012,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK(content_setting == CONTENT_SETTING_ALLOW || content_setting == CONTENT_SETTING_BLOCK || content_setting == CONTENT_SETTING_DEFAULT); -@@ -541,13 +553,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -545,13 +557,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { @@ -1031,7 +1031,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } } -@@ -628,11 +641,27 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -632,11 +645,27 @@ void PermissionContextBase::NotifyPermissionSet( ContentSetting content_setting, bool is_one_time, bool is_final_decision) { @@ -1060,7 +1060,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } if (is_final_decision) { -@@ -673,6 +702,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, +@@ -677,6 +706,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time) { @@ -1076,7 +1076,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_EQ(requesting_origin, requesting_origin.DeprecatedGetOriginAsURL()); DCHECK_EQ(embedding_origin, embedding_origin.DeprecatedGetOriginAsURL()); DCHECK(content_setting == CONTENT_SETTING_ALLOW || -@@ -682,6 +720,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, +@@ -686,6 +724,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, constraints.set_session_model( is_one_time ? content_settings::mojom::SessionModel::ONE_TIME : content_settings::mojom::SessionModel::DURABLE); @@ -1129,7 +1129,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi // Implementors can override this method to avoid using automatic embargo. virtual bool UsesAutomaticEmbargo() const; -@@ -249,7 +269,8 @@ class PermissionContextBase : public content_settings::Observer { +@@ -253,7 +273,8 @@ class PermissionContextBase : public content_settings::Observer { const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time, @@ -1171,7 +1171,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio PermissionRequest::~PermissionRequest() { DCHECK(delete_callback_.is_null()); } -@@ -404,19 +412,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -423,19 +431,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { return request_type() == RequestType::kStorageAccess; } @@ -1237,7 +1237,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission PermissionRequest(const PermissionRequest&) = delete; PermissionRequest& operator=(const PermissionRequest&) = delete; -@@ -162,10 +171,10 @@ class PermissionRequest { +@@ -169,10 +178,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. @@ -1250,7 +1250,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 -@@ -221,6 +230,9 @@ class PermissionRequest { +@@ -228,6 +237,9 @@ class PermissionRequest { // Called once a decision is made about the permission. PermissionDecidedCallback permission_decided_callback_; 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 e39840c0..0e981b10 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -10,7 +10,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/android/bookmark_bridge.h | 8 ++++ .../browser/bookmarks/BookmarkBridge.java | 41 ++++++++++++++++++ .../browser/bookmarks/bookmark_html_writer.cc | 14 +++++- - .../bookmark_merged_surface_service.cc | 3 ++ + .../bookmark_merged_surface_service.cc | 2 + + .../bookmarks/bookmark_parent_folder.cc | 1 + .../permanent_folder_ordering_tracker.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- .../strings/android_chrome_strings.grd | 3 ++ @@ -29,12 +30,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 8 +++- .../bookmark_specifics_conversions.cc | 1 + - 25 files changed, 243 insertions(+), 14 deletions(-) + 26 files changed, 243 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml -@@ -74,6 +74,10 @@ found in the LICENSE file. +@@ -77,6 +77,10 @@ found in the LICENSE file. @@ -45,7 +46,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re -@@ -198,6 +202,9 @@ found in the LICENSE file. +@@ -204,6 +208,9 @@ found in the LICENSE file. @@ -58,15 +59,15 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -97,6 +97,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; - import org.chromium.chrome.browser.bookmarks.BookmarkUtils; +@@ -101,6 +101,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkUtils; + import org.chromium.chrome.browser.bookmarks.bar.BookmarkBarUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; +import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -253,12 +254,17 @@ import org.chromium.chrome.browser.ui.RootUiCoordinator; +@@ -263,12 +264,17 @@ import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; @@ -84,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct 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; -@@ -3103,6 +3109,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -3233,6 +3239,8 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModelSelectorSupplier().get(), closeAllTabsRunnable); RecordUserAction.record("MobileMenuCloseAllTabs"); @@ -93,7 +94,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct } else if (id == R.id.close_all_incognito_tabs_menu_id) { // Close only incognito tabs Runnable closeAllTabsRunnable = -@@ -3191,6 +3199,41 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -3331,6 +3339,41 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus); } @@ -387,27 +388,30 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b diff --git a/chrome/browser/bookmarks/bookmark_merged_surface_service.cc b/chrome/browser/bookmarks/bookmark_merged_surface_service.cc --- a/chrome/browser/bookmarks/bookmark_merged_surface_service.cc +++ b/chrome/browser/bookmarks/bookmark_merged_surface_service.cc -@@ -32,6 +32,7 @@ BookmarkParentFolder GetBookmarkParentFolderFromPermanentType( - BookmarkNode::Type type) { - switch (type) { +@@ -108,6 +108,8 @@ BookmarkMergedSurfaceService::BookmarkMergedSurfaceService( + BookmarkMergedSurfaceService::~BookmarkMergedSurfaceService() { + for (auto& observer : observers_) { + observer.BookmarkMergedSurfaceServiceBeingDeleted(); ++ case BookmarkNode::Type::TABS_COLLECTION: ++ NOTREACHED(); + } + } + +diff --git a/chrome/browser/bookmarks/bookmark_parent_folder.cc b/chrome/browser/bookmarks/bookmark_parent_folder.cc +--- a/chrome/browser/bookmarks/bookmark_parent_folder.cc ++++ b/chrome/browser/bookmarks/bookmark_parent_folder.cc +@@ -18,6 +18,7 @@ BookmarkParentFolder GetBookmarkParentFolderFromPermanentNode( + CHECK(node->is_permanent_node()); + switch (node->type()) { case bookmarks::BookmarkNode::URL: + case bookmarks::BookmarkNode::TABS_COLLECTION: NOTREACHED(); case bookmarks::BookmarkNode::FOLDER: // TODO(crbug.com/381252292): Consider extending type with a value -@@ -70,6 +71,8 @@ std::optional GetIfPermanentFolderType( - - case BookmarkNode::Type::URL: - NOTREACHED(); -+ case BookmarkNode::Type::TABS_COLLECTION: -+ NOTREACHED(); - } - NOTREACHED(); - } diff --git a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc b/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc --- a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc +++ b/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc -@@ -23,6 +23,7 @@ bool IsValidTrackedType(BookmarkNode::Type type) { +@@ -26,6 +26,7 @@ bool IsValidTrackedType(BookmarkNode::Type type) { switch (type) { case bookmarks::BookmarkNode::URL: case bookmarks::BookmarkNode::FOLDER: @@ -415,7 +419,7 @@ diff --git a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc b/chr NOTREACHED(); case bookmarks::BookmarkNode::BOOKMARK_BAR: -@@ -235,6 +236,7 @@ void PermanentFolderOrderingTracker::SetTrackedPermanentNodes() { +@@ -291,6 +292,7 @@ void PermanentFolderOrderingTracker::SetTrackedPermanentNodes() { switch (tracked_type_) { case bookmarks::BookmarkNode::URL: case bookmarks::BookmarkNode::FOLDER: @@ -447,7 +451,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 -@@ -4487,6 +4487,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4497,6 +4497,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs diff --git a/build/patches/Add-search-engine.patch b/build/patches/Add-search-engine.patch index 26d7de69..9ebb08cf 100644 --- a/build/patches/Add-search-engine.patch +++ b/build/patches/Add-search-engine.patch @@ -14,15 +14,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html components/search_engines/cromite/BUILD.gn | 12 ++++++ .../cromite/cromite_prepopulated_engines.json | 37 ++++++++++++++++++ .../search_engine_choice_utils.cc | 5 +-- - .../search_engine_countries-inc.cc | 2 + .../search_engines/search_engine_type.h | 5 +++ - .../template_url_prepopulate_data.cc | 3 +- + .../template_url_prepopulate_data.cc | 5 ++- .../template_url_prepopulate_data.h | 7 ---- tools/json_to_struct/json_to_struct.gni | 9 +++++ tools/json_to_struct/json_to_struct.py | 26 ++++++++---- tools/json_to_struct/struct_generator.py | 10 +++-- tools/variations/fieldtrial_to_struct.py | 4 +- - 14 files changed, 99 insertions(+), 25 deletions(-) + 13 files changed, 99 insertions(+), 25 deletions(-) create mode 100644 components/resources/default_100_percent/search_engine_choice/default_favicon.png create mode 100644 components/search_engines/cromite/BUILD.gn create mode 100644 components/search_engines/cromite/cromite_prepopulated_engines.json @@ -68,15 +67,15 @@ diff --git a/components/resources/search_engine_choice_scaled_resources.grdp b/c diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUILD.gn --- a/components/search_engines/BUILD.gn +++ b/components/search_engines/BUILD.gn -@@ -72,6 +72,7 @@ static_library("search_engines") { - "//third_party/metrics_proto", +@@ -73,6 +73,7 @@ static_library("search_engines") { "//third_party/omnibox_proto", "//third_party/search_engines_data:prepopulated_engines", + "//third_party/search_engines_data:regional_settings", + "cromite:cromite_prepopulated_engines", ] deps = [ -@@ -157,6 +158,7 @@ source_set("search_engine_utils") { +@@ -159,6 +160,7 @@ source_set("search_engine_utils") { ":search_engine_type", "//components/google/core/common", "//third_party/search_engines_data:prepopulated_engines", @@ -84,7 +83,7 @@ diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUIL ] deps = [ "//url" ] -@@ -237,6 +239,7 @@ source_set("unit_tests") { +@@ -242,6 +244,7 @@ source_set("unit_tests") { "//testing/gmock", "//testing/gtest", "//third_party/search_engines_data:prepopulated_engines", @@ -154,7 +153,7 @@ new file mode 100644 diff --git a/components/search_engines/search_engine_choice/search_engine_choice_utils.cc b/components/search_engines/search_engine_choice/search_engine_choice_utils.cc --- a/components/search_engines/search_engine_choice/search_engine_choice_utils.cc +++ b/components/search_engines/search_engine_choice/search_engine_choice_utils.cc -@@ -182,10 +182,7 @@ void RecordChoiceScreenDefaultSearchProviderType( +@@ -183,10 +183,7 @@ void RecordChoiceScreenDefaultSearchProviderType( } void RecordChoiceScreenSelectedIndex(int selected_engine_index) { @@ -166,29 +165,19 @@ diff --git a/components/search_engines/search_engine_choice/search_engine_choice } void RecordChoiceScreenPositionsCountryMismatch(bool has_mismatch) { -diff --git a/components/search_engines/search_engine_countries-inc.cc b/components/search_engines/search_engine_countries-inc.cc ---- a/components/search_engines/search_engine_countries-inc.cc -+++ b/components/search_engines/search_engine_countries-inc.cc -@@ -1453,5 +1453,7 @@ const std::vector GetPrepopulationSetFromCountryID( - for (size_t i = 0; i < num_engines; i++) { - t_url.push_back(engines[i]); - } -+ t_url.push_back({SearchEngineTier::kTopEngines, &googleen}); -+ t_url.push_back({SearchEngineTier::kTopEngines, &duckduckgo_light}); - return t_url; - } diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h --- a/components/search_engines/search_engine_type.h +++ b/components/search_engines/search_engine_type.h -@@ -94,10 +94,15 @@ enum SearchEngineType { - SEARCH_ENGINE_STARTPAGE = 75, - SEARCH_ENGINE_STARTER_PACK_PAGE = 76, +@@ -97,11 +97,16 @@ enum SearchEngineType { SEARCH_ENGINE_MCAFEE = 77, -+ SEARCH_ENGINE_GOOGLE_EN = 78, -+ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 79, + SEARCH_ENGINE_FREESPOKE = 78, + SEARCH_ENGINE_KAGI = 79, ++ SEARCH_ENGINE_GOOGLE_EN = 80, ++ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 81, SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; + // LINT.ThenChange(//tools/metrics/histograms/enums.xml:OmniboxSearchEngineType) +static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT == (SEARCH_ENGINE_MAX - 1), + "Please check this patch"); @@ -199,16 +188,25 @@ diff --git a/components/search_engines/search_engine_type.h b/components/search_ diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc -@@ -28,6 +28,8 @@ - #include "components/version_info/version_info.h" +@@ -30,6 +30,8 @@ #include "third_party/search_engines_data/resources/definitions/prepopulated_engines.h" + #include "third_party/search_engines_data/resources/definitions/regional_settings.h" +#include "components/search_engines/cromite/cromite_prepopulated_engines.h" + namespace TemplateURLPrepopulateData { // Helpers -------------------------------------------------------------------- -@@ -67,7 +69,6 @@ GetPrepopulatedEnginesForEeaRegionCountries(CountryID country_id, +@@ -53,6 +55,8 @@ const RegionalSettings& GetRegionalSettings(CountryId country_id) { + iter = kRegionalSettings.find(CountryId()); + } + ++ t_url.push_back({SearchEngineTier::kTopEngines, &googleen}); ++ t_url.push_back({SearchEngineTier::kTopEngines, &duckduckgo_light}); + return *iter->second; + } + +@@ -85,7 +89,6 @@ GetPrepopulatedEnginesForEeaRegionCountries(CountryId country_id, generator.seed(profile_seed); std::shuffle(t_urls.begin(), t_urls.end(), generator); @@ -219,7 +217,7 @@ diff --git a/components/search_engines/template_url_prepopulate_data.cc b/compon diff --git a/components/search_engines/template_url_prepopulate_data.h b/components/search_engines/template_url_prepopulate_data.h --- a/components/search_engines/template_url_prepopulate_data.h +++ b/components/search_engines/template_url_prepopulate_data.h -@@ -31,13 +31,6 @@ struct PrepopulatedEngine; +@@ -32,13 +32,6 @@ struct PrepopulatedEngine; extern const int kMaxPrepopulatedEngineID; @@ -236,7 +234,7 @@ diff --git a/components/search_engines/template_url_prepopulate_data.h b/compone diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json_to_struct.gni --- a/tools/json_to_struct/json_to_struct.gni +++ b/tools/json_to_struct/json_to_struct.gni -@@ -25,6 +25,11 @@ template("json_to_struct") { +@@ -39,6 +39,11 @@ template("json_to_struct") { action_name = target_name + "_action" source_set_name = target_name @@ -248,7 +246,7 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json action(action_name) { visibility = [ ":$source_set_name" ] script = "//tools/json_to_struct/json_to_struct.py" -@@ -49,6 +54,10 @@ template("json_to_struct") { +@@ -61,6 +66,10 @@ template("json_to_struct") { "--namespace=" + invoker.namespace, "--schema=" + rebase_path(invoker.schema_file, root_build_dir), ] @@ -262,7 +260,7 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_to_struct.py --- a/tools/json_to_struct/json_to_struct.py +++ b/tools/json_to_struct/json_to_struct.py -@@ -97,7 +97,7 @@ def _GenerateHeaderGuard(h_filename): +@@ -100,7 +100,7 @@ def _GenerateHeaderGuard(h_filename): return re.sub(u'^_*', '', result) + u'_' # Remove leading underscores. @@ -271,7 +269,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .h file containing the definition of the structure specified by the schema. -@@ -133,11 +133,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -136,11 +136,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#include "%s"\n' % header) f.write(u'\n') @@ -288,7 +286,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ schema['type_name'], schema['schema'])) f.write(u'\n') -@@ -162,7 +166,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -175,7 +179,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#endif // %s\n' % header_guard) @@ -297,16 +295,16 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .cc file containing the static initializers for the of the elements specified in the description. -@@ -191,7 +195,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): +@@ -210,7 +214,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): f.write(element_generator.GenerateElements(schema['type_name'], schema['schema'], description)) -- if 'generate_array' in description: -+ if excludetype == False and 'generate_array' in description: - f.write(u'\n') - f.write( - u'const %s* const array_%s[] = {\n' % -@@ -283,7 +287,7 @@ def GenerateClass(basepath, +- if not aggregation.export_items: ++ if excludetype == False and not aggregation.export_items: + f.write('\n} // anonymous namespace \n\n') + + if aggregation.kind == AggregationKind.ARRAY: +@@ -315,7 +319,7 @@ def GenerateClass(basepath, def GenerateStruct(basepath, output_root, namespace, schema, description, @@ -315,7 +313,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates a C++ struct from a JSON description. Args: -@@ -302,8 +306,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, +@@ -334,8 +338,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, """ year = int(year) if year else datetime.now().year head = HEAD % (year, schema_filename, description_filename) @@ -326,7 +324,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ if __name__ == '__main__': parser = optparse.OptionParser( -@@ -318,11 +322,17 @@ if __name__ == '__main__': +@@ -350,11 +354,17 @@ if __name__ == '__main__': parser.add_option('-s', '--schema', help='path to the schema file, ' 'mandatory.') parser.add_option('-o', '--output', help='output filename, ') @@ -344,7 +342,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ description_filename = os.path.normpath(args[0]) root, ext = os.path.splitext(description_filename) shortroot = opts.output if opts.output else os.path.split(root)[1] -@@ -339,4 +349,4 @@ if __name__ == '__main__': +@@ -371,4 +381,4 @@ if __name__ == '__main__': schema = _Load(opts.schema) description = _Load(description_filename) GenerateStruct(basepath, output_root, opts.namespace, schema, description, diff --git a/build/patches/Add-setting-to-clear-data-on-exit.patch b/build/patches/Add-setting-to-clear-data-on-exit.patch index 4705a1e4..15a6fdec 100644 --- a/build/patches/Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/Add-setting-to-clear-data-on-exit.patch @@ -48,7 +48,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -253,6 +253,7 @@ chrome_java_sources = [ +@@ -254,6 +254,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataCheckBoxPreference.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFetcher.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java", @@ -74,7 +74,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -186,6 +186,7 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; +@@ -190,6 +190,7 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl; import org.chromium.chrome.browser.quick_delete.QuickDeleteMetricsDelegate; @@ -82,7 +82,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.read_later.ReadingListBackPressHandler; import org.chromium.chrome.browser.recent_tabs.CrossDevicePaneFactory; import org.chromium.chrome.browser.reengagement.ReengagementNotificationController; -@@ -1700,7 +1701,11 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -1780,7 +1781,11 @@ public class ChromeTabbedActivity extends ChromeActivity { Intent intent = getIntent(); boolean hadCipherData = @@ -334,7 +334,7 @@ new file mode 100644 diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp -@@ -2200,6 +2200,16 @@ +@@ -2228,6 +2228,16 @@ Delete browsing data @@ -354,7 +354,7 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp 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 -@@ -103,6 +103,7 @@ +@@ -104,6 +104,7 @@ #include "components/enterprise/data_controls/core/browser/features.h" #include "components/enterprise/obfuscation/core/utils.h" #include "components/error_page/common/error_page_switches.h" @@ -515,7 +515,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate. diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -538,6 +538,23 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -541,6 +541,23 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { (*s_allowlist)[browsing_data::prefs::kLastClearBrowsingDataTab] = settings_api::PrefType::kNumber; @@ -542,7 +542,7 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro diff --git a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java --- a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java +++ b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java -@@ -54,10 +54,15 @@ public class ProfileManagerUtils { +@@ -56,11 +56,16 @@ public class ProfileManagerUtils { } } @@ -550,8 +550,9 @@ diff --git a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browse + ProfileManagerUtilsJni.get().removeBrowsingDataAtStart(); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) @NativeMethods - interface Natives { + public interface Natives { void flushPersistentDataForAllProfiles(); void removeSessionCookiesForAllProfiles(); @@ -573,7 +574,7 @@ diff --git a/chrome/browser/profiles/android/profile_manager_utils.cc b/chrome/b diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -1441,6 +1441,19 @@ void ProfileManager::DoFinalInit(ProfileInfo* profile_info, +@@ -1442,6 +1442,19 @@ void ProfileManager::DoFinalInit(ProfileInfo* profile_info, } } @@ -593,7 +594,7 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile void ProfileManager::DoFinalInitForServices(Profile* profile, bool go_off_the_record) { if (!do_final_services_init_ || -@@ -2114,7 +2127,7 @@ void ProfileManager::OnBrowserClosed(Browser* browser) { +@@ -2121,7 +2134,7 @@ void ProfileManager::OnBrowserClosed(Browser* browser) { Profile* original_profile = profile->GetOriginalProfile(); // Do nothing if the closed window is not the last window of the same profile. for (Browser* browser_iter : *BrowserList::GetInstance()) { @@ -671,7 +672,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts --- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts +++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts -@@ -222,6 +222,7 @@ export class SettingsClearBrowsingDataDialogElement extends +@@ -214,6 +214,7 @@ export class SettingsClearBrowsingDataDialogElement extends value: () => [loadTimeData.getString('basicPageTitle'), loadTimeData.getString('advancedPageTitle'), @@ -679,7 +680,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ ], }, -@@ -343,6 +344,7 @@ export class SettingsClearBrowsingDataDialogElement extends +@@ -335,6 +336,7 @@ export class SettingsClearBrowsingDataDialogElement extends } this.clearButtonDisabled_ = this.getSelectedDataTypes_(page as HTMLElement).length === 0; @@ -690,7 +691,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ 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 -@@ -1584,6 +1584,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1590,6 +1590,9 @@ Your Google account may have other forms of browsing history like searches and a Some of your history might not show up here. To see all your Chrome history, open full Chrome history. Also, your Google Account may have other forms of browsing history at <link>myactivity.google.com</link>. @@ -717,7 +718,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1919,6 +1919,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1910,6 +1910,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"clearedData", IDS_SETTINGS_CLEARED_DATA}, {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA}, {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, @@ -825,7 +826,7 @@ diff --git a/components/browsing_data/core/browsing_data_policies_utils.h b/comp diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/browsing_data/core/browsing_data_utils.cc --- a/components/browsing_data/core/browsing_data_utils.cc +++ b/components/browsing_data/core/browsing_data_utils.cc -@@ -335,6 +335,37 @@ bool GetDeletionPreferenceFromDataType( +@@ -341,6 +341,37 @@ bool GetDeletionPreferenceFromDataType( BrowsingDataType data_type, ClearBrowsingDataTab clear_browsing_data_tab, std::string* out_pref) { @@ -937,7 +938,7 @@ diff --git a/components/favicon/core/favicon_database.cc b/components/favicon/co // Description of database tables: // // icon_mapping -@@ -507,6 +511,14 @@ bool FaviconDatabase::SetFaviconBitmapLastUpdateTime(FaviconBitmapID bitmap_id, +@@ -508,6 +512,14 @@ bool FaviconDatabase::SetFaviconBitmapLastUpdateTime(FaviconBitmapID bitmap_id, bool FaviconDatabase::SetFaviconsOutOfDateBetween(base::Time begin, base::Time end) { @@ -967,7 +968,7 @@ diff --git a/components/favicon/core/favicon_database.h b/components/favicon/cor diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc -@@ -862,6 +862,7 @@ void TemplateURLService::RemoveAutoGeneratedForUrlsBetween( +@@ -893,6 +893,7 @@ void TemplateURLService::RemoveAutoGeneratedForUrlsBetween( if (turl->date_created() >= created_after && (created_before.is_null() || turl->date_created() < created_before) && turl->safe_for_autoreplace() && turl->prepopulate_id() == 0 && @@ -990,7 +991,7 @@ diff --git a/content/browser/btm/btm_service_impl.cc b/content/browser/btm/btm_s diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc -@@ -1527,6 +1527,7 @@ void StoragePartitionImpl::Initialize( +@@ -1528,6 +1528,7 @@ void StoragePartitionImpl::Initialize( .AppendASCII("Code Cache"); } DCHECK_GE(settings.size_in_bytes(), 0); diff --git a/build/patches/Follow-only-system-dark-mode.patch b/build/patches/Follow-only-system-dark-mode.patch index d46556bf..8705cf7f 100644 --- a/build/patches/Follow-only-system-dark-mode.patch +++ b/build/patches/Follow-only-system-dark-mode.patch @@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java -@@ -127,7 +127,7 @@ class GlobalNightModeStateController +@@ -128,7 +128,7 @@ class GlobalNightModeStateController } private void updateNightMode() { diff --git a/build/patches/Override-Navigator-Language.patch b/build/patches/Override-Navigator-Language.patch index d01044ec..c71f6902 100644 --- a/build/patches/Override-Navigator-Language.patch +++ b/build/patches/Override-Navigator-Language.patch @@ -69,7 +69,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content #include "components/metrics/single_sample_metrics.h" #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h" #include "components/services/storage/public/cpp/buckets/bucket_id.h" -@@ -3281,8 +3282,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( +@@ -3363,8 +3364,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( PropagateBrowserCommandLineToRenderer(browser_command_line, command_line); // Pass on the browser locale. diff --git a/build/patches/Partition-Blink-memory-cache.patch b/build/patches/Partition-Blink-memory-cache.patch index 219ef17a..0c39fbad 100644 --- a/build/patches/Partition-Blink-memory-cache.patch +++ b/build/patches/Partition-Blink-memory-cache.patch @@ -42,7 +42,7 @@ diff --git a/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc b diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc --- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc -@@ -2436,7 +2436,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, +@@ -2522,7 +2522,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, if (!cached_resource) { cached_resource = MemoryCache::Get()->ResourceForURL( url, document->Fetcher()->GetCacheIdentifier( @@ -66,7 +66,7 @@ diff --git a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc b diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc --- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc -@@ -851,6 +851,8 @@ void FrameFetchContext::PopulateResourceRequestBeforeCacheAccess( +@@ -866,6 +866,8 @@ void FrameFetchContext::PopulateResourceRequestBeforeCacheAccess( if (document_loader_->ForceFetchCacheMode()) { request.SetCacheMode(*document_loader_->ForceFetchCacheMode()); } @@ -154,7 +154,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/t diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc -@@ -1026,7 +1026,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( +@@ -1027,7 +1027,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( } const String cache_identifier = GetCacheIdentifier( @@ -164,7 +164,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c // Most off-main-thread resource fetches use Resource::kRaw and don't reach // this point, but off-main-thread module fetches might. if (IsMainThread()) { -@@ -1482,7 +1483,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, +@@ -1483,7 +1484,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, params.Url(), GetCacheIdentifier( params.Url(), @@ -174,7 +174,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c if (resource) { policy = DetermineRevalidationPolicy(resource_type, params, *resource, is_static_data); -@@ -1814,7 +1816,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( +@@ -1815,7 +1817,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( const ResourceFactory& factory) { const String cache_identifier = GetCacheIdentifier(params.GetResourceRequest().Url(), @@ -184,7 +184,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c DCHECK(!IsMainThread() || params.IsStaleRevalidation() || !MemoryCache::Get()->ResourceForURL(params.GetResourceRequest().Url(), cache_identifier)); -@@ -2927,11 +2930,47 @@ void ResourceFetcher::UpdateImagePrioritiesAndSpeculativeDecodes() { +@@ -2938,11 +2941,47 @@ void ResourceFetcher::UpdateImagePrioritiesAndSpeculativeDecodes() { } String ResourceFetcher::GetCacheIdentifier(const KURL& url, @@ -237,7 +237,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c } // Requests that can be satisfied via `archive_` (i.e. MHTML) or -@@ -2946,7 +2985,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url, +@@ -2957,7 +2996,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url, return bundle->GetCacheIdentifier(); } diff --git a/build/patches/Partition-blobs-by-top-frame-URL.patch b/build/patches/Partition-blobs-by-top-frame-URL.patch index db190a5c..68a5cdc1 100644 --- a/build/patches/Partition-blobs-by-top-frame-URL.patch +++ b/build/patches/Partition-blobs-by-top-frame-URL.patch @@ -8,15 +8,28 @@ or, if not defined, by the same agent cluster. 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 --- + .../renderer_host/render_frame_host_impl.cc | 2 + .../Partition-blobs-by-top-frame-URL.inc | 1 + - storage/browser/blob/blob_url_store_impl.cc | 51 +++++++++++++++++++ - storage/browser/blob/blob_url_store_impl.h | 11 ++++ + storage/browser/blob/blob_url_store_impl.cc | 71 ++++++++++++++++++- + storage/browser/blob/blob_url_store_impl.h | 13 ++++ storage/browser/blob/features.cc | 1 + - .../public/mojom/blob/blob_url_store.mojom | 12 +++-- - .../core/fileapi/public_url_manager.cc | 18 +++++++ - 6 files changed, 91 insertions(+), 3 deletions(-) + .../public/mojom/blob/blob_url_store.mojom | 8 ++- + .../core/fileapi/public_url_manager.cc | 17 +++++ + 7 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 cromite_flags/third_party/blink/common/features_cc/Partition-blobs-by-top-frame-URL.inc +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 +@@ -12683,6 +12683,8 @@ void RenderFrameHostImpl::ReportBlockingCrossPartitionBlobURL( + } + + bool RenderFrameHostImpl::DoesDocumentHaveStorageAccess() { ++ // 6313600: [Blob URL] Allow contexts with a StorageAccessHandle ++ // to bypass Blob URL partitioning | https://chromium-review.googlesource.com/c/chromium/src/+/6313600 + return StorageAccessHandle::DoesDocumentHaveStorageAccess(this); + } + diff --git a/cromite_flags/third_party/blink/common/features_cc/Partition-blobs-by-top-frame-URL.inc b/cromite_flags/third_party/blink/common/features_cc/Partition-blobs-by-top-frame-URL.inc new file mode 100644 --- /dev/null @@ -26,7 +39,24 @@ new file mode 100644 diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/blob_url_store_impl.cc --- a/storage/browser/blob/blob_url_store_impl.cc +++ b/storage/browser/blob/blob_url_store_impl.cc -@@ -91,6 +91,30 @@ BlobURLStoreImpl::~BlobURLStoreImpl() { +@@ -21,6 +21,16 @@ + + namespace storage { + ++namespace { ++ ++// this code only serves to break the build in v137 ++// when https://chromium-review.googlesource.com/c/chromium/src/+/6430562 is inserted. ++// (UAZO) BlobURLStoreImpl::ShouldPartitionBlobUrlAccess => true ++[[maybe_unused]] bool IsBlobUrlAccessCrossPartitionSameOrigin( ++ BlobUrlRegistry::MappingStatus mapping_status) { ++ return false; ++} ++ + // Self deletes when the last binding to it is closed. + class BlobURLTokenImpl : public blink::mojom::BlobURLToken { + public: +@@ -93,6 +103,30 @@ BlobURLStoreImpl::~BlobURLStoreImpl() { } } @@ -57,7 +87,7 @@ diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/ void BlobURLStoreImpl::Register( mojo::PendingRemote blob, const GURL& url, -@@ -105,6 +129,14 @@ void BlobURLStoreImpl::Register( +@@ -107,6 +141,14 @@ void BlobURLStoreImpl::Register( return; } @@ -72,7 +102,7 @@ diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/ if (registry_) registry_->AddUrlMapping(url, std::move(blob), storage_key_, renderer_origin_, render_process_host_id_, -@@ -125,6 +157,8 @@ void BlobURLStoreImpl::Revoke(const GURL& url) { +@@ -127,21 +169,32 @@ void BlobURLStoreImpl::Revoke(const GURL& url) { void BlobURLStoreImpl::ResolveAsURLLoaderFactory( const GURL& url, mojo::PendingReceiver receiver, @@ -81,15 +111,40 @@ diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/ ResolveAsURLLoaderFactoryCallback callback) { if (!registry_) { BlobURLLoaderFactory::Create(mojo::NullRemote(), url, std::move(receiver)); -@@ -140,6 +174,7 @@ void BlobURLStoreImpl::ResolveAsURLLoaderFactory( + std::move(callback).Run(std::nullopt, std::nullopt); + return; + } +- FinishResolveAsURLLoaderFactory(url, std::move(receiver), std::move(callback), ++ FinishResolveAsURLLoaderFactory(url, std::move(receiver), ++ unsafe_agent_cluster_id, unsafe_top_level_site, ++ std::move(callback), + storage_access_check_callback_.Run()); + } + + void BlobURLStoreImpl::FinishResolveAsURLLoaderFactory( + const GURL& url, + mojo::PendingReceiver receiver, ++ const base::UnguessableToken& unsafe_agent_cluster_id, ++ const std::optional& unsafe_top_level_site, + ResolveAsURLLoaderFactoryCallback callback, + bool has_storage_access_handle) { ++ if (!IsSamePartition(url, unsafe_agent_cluster_id, unsafe_top_level_site)) { ++ BlobURLLoaderFactory::Create(mojo::NullRemote(), url, std::move(receiver)); ++ std::move(callback).Run(std::nullopt, std::nullopt); ++ return; ++ } + if (registry_->IsUrlMapped(BlobUrlUtils::ClearUrlFragment(url), + storage_key_) == + BlobUrlRegistry::MappingStatus::kNotMappedCrossPartitionSameOrigin) { +@@ -150,6 +203,7 @@ void BlobURLStoreImpl::FinishResolveAsURLLoaderFactory( features::kBlockCrossPartitionBlobUrlFetching) && !partitioning_disabled_by_policy_; - if (feature_and_policy_check) { + if (feature_and_policy_check && !has_storage_access_handle) { + // LOG(INFO) << "---ResolveAsURLLoaderFactory blocked" << url; partitioning_blob_url_closure_.Run(url, blink::mojom::PartitioningBlobURLInfo:: kBlockedCrossPartitionFetching); -@@ -152,6 +187,13 @@ void BlobURLStoreImpl::ResolveAsURLLoaderFactory( +@@ -162,6 +216,12 @@ void BlobURLStoreImpl::FinishResolveAsURLLoaderFactory( partitioning_blob_url_closure_.Run(url, std::nullopt); } @@ -98,23 +153,35 @@ diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/ + std::move(callback).Run(std::nullopt, std::nullopt); + return; + } -+ + // LOG(INFO) << "---ResolveAsURLLoaderFactory allowed " << url; BlobURLLoaderFactory::Create(registry_->GetBlobFromUrl(url), url, std::move(receiver)); // When a fragment URL is present, registry_->GetUnsafeAgentClusterID(url) and -@@ -166,12 +208,18 @@ void BlobURLStoreImpl::ResolveForNavigation( +@@ -175,6 +235,8 @@ void BlobURLStoreImpl::FinishResolveAsURLLoaderFactory( + void BlobURLStoreImpl::ResolveAsBlobURLToken( + const GURL& url, + mojo::PendingReceiver token, ++ const base::UnguessableToken& unsafe_agent_cluster_id, ++ const std::optional& unsafe_top_level_site, + bool is_top_level_navigation, + ResolveAsBlobURLTokenCallback callback) { + if (!registry_) { +@@ -182,6 +244,7 @@ void BlobURLStoreImpl::ResolveAsBlobURLToken( + return; + } + FinishResolveAsBlobURLToken(url, std::move(token), is_top_level_navigation, ++ unsafe_agent_cluster_id, unsafe_top_level_site, + std::move(callback), + storage_access_check_callback_.Run()); + } +@@ -190,8 +253,14 @@ void BlobURLStoreImpl::FinishResolveAsBlobURLToken( const GURL& url, mojo::PendingReceiver token, bool is_top_level_navigation, + const base::UnguessableToken& unsafe_agent_cluster_id, + const std::optional& unsafe_top_level_site, - ResolveForNavigationCallback callback) { - if (!registry_) { - std::move(callback).Run(std::nullopt); - return; - } - + ResolveAsBlobURLTokenCallback callback, + bool has_storage_access_handle) { + if (!IsSamePartition(url, unsafe_agent_cluster_id, unsafe_top_level_site)) { + std::move(callback).Run(std::nullopt); + return; @@ -122,50 +189,42 @@ diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/ if (!is_top_level_navigation && (registry_->IsUrlMapped(BlobUrlUtils::ClearUrlFragment(url), storage_key_) == -@@ -203,12 +251,15 @@ void BlobURLStoreImpl::ResolveForNavigation( - void BlobURLStoreImpl::ResolveForWorkerScriptFetch( - const GURL& url, - mojo::PendingReceiver token, -+ const base::UnguessableToken& unsafe_agent_cluster_id, -+ const std::optional& unsafe_top_level_site, - ResolveForNavigationCallback callback) { - if (!registry_) { - std::move(callback).Run(std::nullopt); - return; - } - ResolveForNavigation(url, std::move(token), /*is_top_level_navigation=*/false, -+ unsafe_agent_cluster_id, unsafe_top_level_site, - std::move(callback)); - } - diff --git a/storage/browser/blob/blob_url_store_impl.h b/storage/browser/blob/blob_url_store_impl.h --- a/storage/browser/blob/blob_url_store_impl.h +++ b/storage/browser/blob/blob_url_store_impl.h -@@ -57,15 +57,21 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) BlobURLStoreImpl +@@ -60,11 +60,15 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) BlobURLStoreImpl void ResolveAsURLLoaderFactory( const GURL& url, mojo::PendingReceiver receiver, + const base::UnguessableToken& unsafe_agent_cluster_id, + const std::optional& unsafe_top_level_site, ResolveAsURLLoaderFactoryCallback callback) override; - void ResolveForNavigation( + void ResolveAsBlobURLToken( const GURL& url, mojo::PendingReceiver token, bool is_top_level_navigation, + const base::UnguessableToken& unsafe_agent_cluster_id, + const std::optional& unsafe_top_level_site, - ResolveForNavigationCallback callback) override; - void ResolveForWorkerScriptFetch( - const GURL& url, - mojo::PendingReceiver token, -+ const base::UnguessableToken& unsafe_agent_cluster_id, -+ const std::optional& unsafe_top_level_site, - ResolveForNavigationCallback callback) override; + ResolveAsBlobURLTokenCallback callback) override; private: -@@ -75,6 +81,11 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) BlobURLStoreImpl - // `Revoke()`. - bool BlobUrlIsValid(const GURL& url, const char* method) const; +@@ -77,6 +81,8 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) BlobURLStoreImpl + void FinishResolveAsURLLoaderFactory( + const GURL& url, + mojo::PendingReceiver receiver, ++ const base::UnguessableToken& unsafe_agent_cluster_id, ++ const std::optional& unsafe_top_level_site, + ResolveAsURLLoaderFactoryCallback callback, + bool has_storage_access_handle); + +@@ -84,9 +90,16 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) BlobURLStoreImpl + const GURL& url, + mojo::PendingReceiver token, + bool is_top_level_navigation, ++ const base::UnguessableToken& unsafe_agent_cluster_id, ++ const std::optional& unsafe_top_level_site, + ResolveAsBlobURLTokenCallback callback, + bool has_storage_access_handle); + bool IsSamePartition( + const GURL& blob_url, @@ -202,22 +261,11 @@ diff --git a/third_party/blink/public/mojom/blob/blob_url_store.mojom b/third_pa network.mojom.SchemefulSite? unsafe_top_level_site); @@ -48,7 +50,9 @@ interface BlobURLStore { // As long as the token is alive, the resolved blob will also be kept alive. - ResolveForNavigation(url.mojom.Url url, + ResolveAsBlobURLToken(url.mojom.Url url, pending_receiver token, - bool is_top_level_navigation) => ( + bool is_top_level_navigation, + mojo_base.mojom.UnguessableToken unsafe_agent_cluster_id, -+ network.mojom.SchemefulSite? unsafe_top_level_site) => ( - // TODO(https://crbug.com/1224926): Remove this once experiment is over. - mojo_base.mojom.UnguessableToken? unsafe_agent_cluster_id); - -@@ -59,7 +63,9 @@ interface BlobURLStore { - // currently intended for use when fetching a dedicated / shared worker - // script. - ResolveForWorkerScriptFetch(url.mojom.Url url, -- pending_receiver token) => ( -+ pending_receiver token, -+ mojo_base.mojom.UnguessableToken unsafe_agent_cluster_id, + network.mojom.SchemefulSite? unsafe_top_level_site) => ( // TODO(https://crbug.com/1224926): Remove this once experiment is over. mojo_base.mojom.UnguessableToken? unsafe_agent_cluster_id); @@ -255,20 +303,12 @@ diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/thi WTF::BindOnce(metrics_callback, WrapPersistent(GetExecutionContext()))); } -@@ -293,6 +309,7 @@ void PublicURLManager::ResolveForNavigation( +@@ -293,6 +309,7 @@ void PublicURLManager::ResolveAsBlobURLToken( - GetBlobURLStore().ResolveForNavigation( + GetBlobURLStore().ResolveAsBlobURLToken( url, std::move(token_receiver), is_top_level_navigation, + GetExecutionContext()->GetAgentClusterID(), GetInsecureTopLevelSite(GetExecutionContext()), WTF::BindOnce(metrics_callback, WrapPersistent(GetExecutionContext()))); } -@@ -319,6 +336,7 @@ void PublicURLManager::ResolveForWorkerScriptFetch( - - GetBlobURLStore().ResolveForWorkerScriptFetch( - url, std::move(token_receiver), -+ GetExecutionContext()->GetAgentClusterID(), GetInsecureTopLevelSite(GetExecutionContext()), - WTF::BindOnce(metrics_callback, WrapPersistent(GetExecutionContext()))); - } - -- diff --git a/build/patches/Welcome-screen.patch b/build/patches/Welcome-screen.patch index 790859a9..bcf8fe42 100644 --- a/build/patches/Welcome-screen.patch +++ b/build/patches/Welcome-screen.patch @@ -13,15 +13,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/values/styles.xml | 24 ++ .../DefaultSearchEngineFirstRunFragment.java | 3 - .../browser/firstrun/FirstRunActivity.java | 23 +- - .../firstrun/FirstRunFlowSequencer.java | 61 +--- + .../firstrun/FirstRunFlowSequencer.java | 60 +--- .../browser/firstrun/FirstRunUtils.java | 1 + .../firstrun/ToSAndUMAFirstRunFragment.java | 335 +++++++++++++++++ .../firstrun/TosAndUmaFragmentView.java | 336 ++++++++++++++++++ - .../signin/ChildAccountStatusSupplier.java | 3 + + .../signin/ChildAccountStatusSupplier.java | 4 + ...creenSigninAndHistorySyncActivityBase.java | 6 +- .../browser/locale/LocaleManagerDelegate.java | 5 +- .../Welcome-screen.grdp | 27 ++ - 15 files changed, 918 insertions(+), 80 deletions(-) + 15 files changed, 919 insertions(+), 79 deletions(-) create mode 100644 chrome/android/java/res/layout/fre_tosanduma.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFragmentView.java @@ -30,7 +30,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 -@@ -514,6 +514,7 @@ chrome_java_resources = [ +@@ -516,6 +516,7 @@ chrome_java_resources = [ "java/res/layout/find_in_page.xml", "java/res/layout/find_toolbar.xml", "java/res/layout/fre_tos_privacy_disclaimer.xml", @@ -41,9 +41,9 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -597,6 +597,8 @@ chrome_java_sources = [ +@@ -602,6 +602,8 @@ chrome_java_sources = [ + "java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java", "java/src/org/chromium/chrome/browser/firstrun/SkipTosDialogPolicyListener.java", - "java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java", "java/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidator.java", + "java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java", + "java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFragmentView.java", @@ -302,7 +302,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.signin.DialogWhenLargeContentLayout; import org.chromium.chrome.browser.ui.signin.SigninUtils; -@@ -234,7 +233,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -235,7 +234,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa /** Creates first page and sets up adapter. Should result UI being shown on the screen. */ private void createFirstPage() { BooleanSupplier showWelcomePage = () -> !FirstRunStatus.shouldSkipWelcomePage(); @@ -311,7 +311,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR mFreProgressStates.add(MobileFreProgress.WELCOME_SHOWN); mPagerAdapter = new FirstRunPagerAdapter(FirstRunActivity.this, mPages); mPager.setAdapter(mPagerAdapter); -@@ -259,7 +258,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -260,7 +259,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa // // TODO(b/245912657): explicitly sign in supervised users in {@link // FullscreenSigninMediator#handleContinueWithNative} rather than relying on SigninChecker. @@ -319,7 +319,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR mFirstRunFlowSequencer.updateFirstRunProperties(mFreProperties); -@@ -274,18 +272,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -275,18 +273,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa mFreProgressStates.add(MobileFreProgress.DEFAULT_SEARCH_ENGINE_SHOWN); } @@ -338,7 +338,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR if (mPagerAdapter != null) { mPagerAdapter.notifyDataSetChanged(); } -@@ -697,11 +683,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -707,11 +693,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa public void acceptTermsOfService(boolean allowMetricsAndCrashUploading) { assert mNativeInitializationPromise.isFulfilled(); @@ -422,7 +422,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR } @VisibleForTesting -@@ -167,14 +135,10 @@ public abstract class FirstRunFlowSequencer { +@@ -167,9 +135,6 @@ public abstract class FirstRunFlowSequencer { } private void maybeProcessFreEnvironmentPreNative() { @@ -431,13 +431,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR - if (mIsFlowKnown) return; mIsFlowKnown = true; - - Bundle freProperties = new Bundle(); -- freProperties.putBoolean(SyncConsentFirstRunFragment.IS_CHILD_ACCOUNT, mIsChild); - - onFlowIsKnown(freProperties); - } -@@ -185,8 +149,8 @@ public abstract class FirstRunFlowSequencer { + onFlowIsKnown(mIsChild); +@@ -181,8 +146,8 @@ public abstract class FirstRunFlowSequencer { * @param freProperties Resulting FRE properties bundle. */ public void updateFirstRunProperties(Bundle freProperties) { @@ -448,7 +443,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR assert freProperties != null; freProperties.putBoolean( FirstRunActivity.SHOW_HISTORY_SYNC_PAGE, shouldShowHistorySyncOptIn()); -@@ -205,8 +169,6 @@ public abstract class FirstRunFlowSequencer { +@@ -201,8 +166,6 @@ public abstract class FirstRunFlowSequencer { // Mark the FRE flow as complete. FirstRunStatus.setFirstRunFlowComplete(true); @@ -457,7 +452,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR } /** -@@ -305,9 +267,6 @@ public abstract class FirstRunFlowSequencer { +@@ -301,9 +264,6 @@ public abstract class FirstRunFlowSequencer { Log.d(TAG, "Redirecting user through FRE."); CrashKeys.getInstance().set(CrashKeyIndex.FIRST_RUN, "yes"); @@ -467,7 +462,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR if (inSameTask) { FreIntentCreator intentCreator = new FreIntentCreator(); Intent freIntent = -@@ -333,13 +292,17 @@ public abstract class FirstRunFlowSequencer { +@@ -329,13 +289,17 @@ public abstract class FirstRunFlowSequencer { if (!(caller instanceof Activity)) { freIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } @@ -1182,13 +1177,14 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java -@@ -41,7 +41,10 @@ public class ChildAccountStatusSupplier implements OneshotSupplier { +@@ -41,7 +41,11 @@ public class ChildAccountStatusSupplier implements OneshotSupplier { */ public ChildAccountStatusSupplier( AccountManagerFacade accountManagerFacade, AppRestrictionSupplier appRestrictionInfo) { + mHasRestriction = false; + mChildAccountStatusFromAccountManagerFacade = false; mChildAccountStatusStartTime = SystemClock.elapsedRealtime(); ++ mValue.set(false); + if ((true)) return; appRestrictionInfo.getHasAppRestriction(this::onAppRestrictionDetected); @@ -1196,7 +1192,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAcc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java -@@ -25,8 +25,6 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; +@@ -24,8 +24,6 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.components.browser_ui.widget.gesture.BackPressHandler; import org.chromium.components.policy.PolicyService; @@ -1205,7 +1201,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/Fullscre /** Base class for First run experience and fullscreen signin and history sync promos. */ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncInitializationActivity -@@ -92,9 +90,7 @@ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncIn +@@ -91,9 +89,7 @@ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncIn @Override @CallSuper public void triggerLayoutInflation() { @@ -1219,7 +1215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/Fullscre diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java --- a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java +++ b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -@@ -375,8 +375,9 @@ public class LocaleManagerDelegate { +@@ -384,8 +384,9 @@ public class LocaleManagerDelegate { /** @see LocaleManager#getSearchEnginesForPromoDialog */ public List getSearchEnginesForPromoDialog(@SearchEnginePromoType int promoType) {