From d38841b855af88780a946f6a8a1132ae5ded264b Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Tue, 4 Feb 2025 15:56:11 +0100 Subject: [PATCH] Patches for v133 (need check) --- .../Add-bookmark-import-export-actions.patch | 153 +++--- build/patches/Add-cromite-flags-support.patch | 223 +++++---- .../Add-menu-item-to-bookmark-all-tabs.patch | 69 ++- .../Add-option-to-force-tablet-UI.patch | 177 ++++--- .../Add-option-to-use-home-page-as-NTP.patch | 72 ++- .../Add-setting-to-clear-data-on-exit.patch | 98 ++-- ...d-setting-to-invert-tap-and-long-tap.patch | 118 ++--- build/patches/Add-webRTC-site-settings.patch | 18 +- ...ow-building-without-enable_reporting.patch | 90 ++-- build/patches/Disable-all-promo-dialogs.patch | 51 +- .../Move-navigation-bar-to-bottom.patch | 460 +++++++++--------- .../patches/Partition-HSTS-cache-by-NAK.patch | 272 +++++------ build/patches/WIN-Disable-first-run.patch | 2 +- ...-enable-file-system-access-blocklist.patch | 8 +- build/patches/Welcome-screen.patch | 182 +++---- ...RTC-do-not-expose-local-IP-addresses.patch | 45 +- 16 files changed, 988 insertions(+), 1050 deletions(-) diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 944bf6d1..0154e5bf 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -145,7 +145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); -@@ -61,8 +67,23 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -62,8 +68,23 @@ public class BookmarkActivity extends SnackbarActivity { getOnBackPressedDispatcher(), mBookmarkManagerCoordinator, SecondaryActivity.BOOKMARK); @@ -169,7 +169,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B @Override protected void onDestroy() { super.onDestroy(); -@@ -72,6 +93,7 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -73,6 +94,7 @@ public class BookmarkActivity extends SnackbarActivity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -177,7 +177,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString( -@@ -85,6 +107,14 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -86,6 +108,14 @@ public class BookmarkActivity extends SnackbarActivity { return new ModalDialogManager(new AppModalPresenter(this), ModalDialogType.APP); } @@ -195,7 +195,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java -@@ -33,6 +33,48 @@ import org.chromium.url.GURL; +@@ -34,6 +34,48 @@ import org.chromium.url.GURL; import java.util.ArrayList; import java.util.List; @@ -244,10 +244,43 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Provides the communication channel for Android to fetch and manipulate the bookmark model stored * in native. -@@ -474,6 +516,212 @@ class BookmarkBridge { +@@ -490,6 +532,245 @@ class BookmarkBridge { .getTotalBookmarkCount(mNativeBookmarkBridge, id.getId(), id.getType()); } ++ @CalledByNative ++ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) { ++ Uri uri = Uri.parse(bookmarksPath); ++ ++ if (success == false) { ++ ((Activity)window.getContext().get()).runOnUiThread(new Runnable() { ++ public void run() { ++ window.showError(R.string.saving_file_error); ++ } ++ }); ++ } else { ++ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance(); ++ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath); ++ ++ Context context = ContextUtils.getApplicationContext(); ++ ++ Intent intent = new Intent(Intent.ACTION_VIEW, ++ ContentUriUtils.isContentUri(bookmarksPath) ? ++ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath)); ++ intent.putExtra(Browser.EXTRA_APPLICATION_ID, ++ context.getPackageName()); ++ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ++ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK); ++ ++ // If the bookmark manager is shown in a tab on a phone (rather than in a separate ++ // activity) the component name may be null. Send the intent through ++ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012. ++ intent.setClass(context, ChromeLauncherActivity.class); ++ ++ IntentHandler.startActivityForTrustedIntent(intent); ++ } ++ } ++ + /** + * Import bookmarks from a selected file. + * @param window The current window of the bookmarks activity or page. @@ -457,47 +490,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Synchronously gets a list of bookmarks that match the specified search query. * -@@ -1032,6 +1280,39 @@ class BookmarkBridge { - BookmarkUtils.clearLastUsedPrefs(); - } - -+ @CalledByNative -+ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) { -+ Uri uri = Uri.parse(bookmarksPath); -+ -+ if (success == false) { -+ ((Activity)window.getContext().get()).runOnUiThread(new Runnable() { -+ public void run() { -+ window.showError(R.string.saving_file_error); -+ } -+ }); -+ } else { -+ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance(); -+ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath); -+ -+ Context context = ContextUtils.getApplicationContext(); -+ -+ Intent intent = new Intent(Intent.ACTION_VIEW, -+ ContentUriUtils.isContentUri(bookmarksPath) ? -+ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath)); -+ intent.putExtra(Browser.EXTRA_APPLICATION_ID, -+ context.getPackageName()); -+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -+ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK); -+ -+ // If the bookmark manager is shown in a tab on a phone (rather than in a separate -+ // activity) the component name may be null. Send the intent through -+ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012. -+ intent.setClass(context, ChromeLauncherActivity.class); -+ -+ IntentHandler.startActivityForTrustedIntent(intent); -+ } -+ } -+ - private static List> createPairsList(int[] left, int[] right) { - List> pairList = new ArrayList<>(); - for (int i = 0; i < left.length; i++) { -@@ -1094,6 +1375,10 @@ class BookmarkBridge { +@@ -1102,6 +1383,10 @@ class BookmarkBridge { void getChildIds( long nativeBookmarkBridge, long id, int type, List bookmarksList); @@ -531,7 +524,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java -@@ -49,6 +49,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; +@@ -54,6 +54,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; import org.chromium.components.image_fetcher.ImageFetcherConfig; import org.chromium.components.image_fetcher.ImageFetcherFactory; import org.chromium.ui.KeyboardVisibilityDelegate; @@ -540,7 +533,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; -@@ -302,6 +304,13 @@ public class BookmarkManagerCoordinator +@@ -334,6 +336,13 @@ public class BookmarkManagerCoordinator // Public API implementation. @@ -557,7 +550,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java -@@ -57,6 +57,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; +@@ -59,6 +59,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.PowerBookmarkType; @@ -566,7 +559,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import org.chromium.ui.accessibility.AccessibilityState; import org.chromium.ui.listmenu.ListMenu; import org.chromium.ui.listmenu.ListMenuItemProperties; -@@ -81,6 +83,9 @@ class BookmarkManagerMediator +@@ -85,6 +87,9 @@ class BookmarkManagerMediator private static boolean sPreventLoadingForTesting; @@ -576,7 +569,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** Keeps track of whether drag is enabled / active for bookmark lists. */ private class BookmarkDragStateDelegate implements DragStateDelegate { private BookmarkDelegate mBookmarkDelegate; -@@ -552,6 +557,14 @@ class BookmarkManagerMediator +@@ -571,6 +576,14 @@ class BookmarkManagerMediator mNativePage = nativePage; } @@ -591,7 +584,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** See BookmarkManager(Coordinator)#updateForUrl */ void updateForUrl(String url) { // Bookmark model is null if the manager has been destroyed. -@@ -732,6 +745,16 @@ class BookmarkManagerMediator +@@ -752,6 +765,16 @@ class BookmarkManagerMediator } } @@ -630,9 +623,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm super(host); mBookmarkManagerCoordinator = -@@ -43,6 +46,9 @@ public class BookmarkPage extends BasicNativePage { - profile, - new BookmarkUiPrefs(ChromeSharedPreferences.getInstance())); +@@ -44,6 +47,9 @@ public class BookmarkPage extends BasicNativePage { + new BookmarkUiPrefs(ChromeSharedPreferences.getInstance()), + /* bookmarkOpenedCallback= */ null); mBookmarkManagerCoordinator.setBasicNativePage(this); + mBookmarkManagerCoordinator.setWindow(activity.getWindowAndroid(), + new ModalDialogManager( @@ -800,7 +793,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat Supplier uma, BottomSheetController sheetController, BrowserControlsManager browserControlsManager, -@@ -243,7 +244,7 @@ public class NativePageFactory { +@@ -242,7 +243,7 @@ public class NativePageFactory { mActivity.getComponentName(), mSnackbarManagerSupplier.get(), tab.getProfile(), @@ -812,7 +805,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -205,6 +205,8 @@ static_library("browser") { +@@ -207,6 +207,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -821,7 +814,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bookmarks/chrome_bookmark_client.cc", "bookmarks/chrome_bookmark_client.h", "bookmarks/managed_bookmark_service_factory.cc", -@@ -1679,6 +1681,13 @@ static_library("browser") { +@@ -1661,6 +1663,13 @@ static_library("browser") { "webid/identity_provider_permission_request.h", ] @@ -835,7 +828,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3486,8 +3495,6 @@ static_library("browser") { +@@ -3475,8 +3484,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -974,7 +967,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse class BookmarkTitleComparer { public: explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, -@@ -228,6 +335,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -229,6 +336,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -985,7 +978,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -767,6 +878,172 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -768,6 +879,172 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -1164,7 +1157,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser @@ -20,6 +20,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/supports_user_data.h" - #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" + #include "chrome/browser/partnerbookmarks/partner_bookmarks_shim.h" +#include "chrome/browser/bookmarks/bookmark_html_writer.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_observer.h" @@ -1336,7 +1329,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -206,6 +206,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -216,6 +216,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kCCTAuthTab, &kCCTAuthTabDisableAllExternalIntents, &kCCTAuthTabEnableHttpsRedirects, @@ -1347,7 +1340,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -546,6 +546,7 @@ public abstract class ChromeFeatureList { +@@ -579,6 +579,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; @@ -1401,7 +1394,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -103,6 +103,8 @@ public final class ChromePreferenceKeys { +@@ -115,6 +115,8 @@ public final class ChromePreferenceKeys { "enhanced_bookmark_last_used_parent_folder"; public static final String BOOKMARKS_SORT_ORDER = "Chrome.Bookmarks.BookmarkRowSortOrder"; public static final String BOOKMARKS_VISUALS_PREF = "Chrome.Bookmarks.BookmarkRowDisplay"; @@ -1410,8 +1403,8 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** Whether Chrome is set as the default browser. Default value is false. */ public static final String CHROME_DEFAULT_BROWSER = "applink.chrome_default_browser"; -@@ -919,6 +921,7 @@ public final class ChromePreferenceKeys { - AUTOFILL_ASSISTANT_PROACTIVE_HELP_ENABLED, +@@ -935,6 +937,7 @@ public final class ChromePreferenceKeys { + AUXILIARY_SEARCH_IS_SCHEMA_SET, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, + BOOKMARKS_LAST_EXPORT_URI, @@ -1449,7 +1442,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -359,6 +359,9 @@ static_library("common_lib") { +@@ -360,6 +360,9 @@ static_library("common_lib") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -1633,15 +1626,15 @@ new file mode 100644 diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java --- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java +++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java -@@ -45,6 +45,7 @@ import org.chromium.base.task.AsyncTask; - import org.chromium.base.task.PostTask; - import org.chromium.base.task.TaskTraits; +@@ -49,6 +49,7 @@ import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.NullUnmarked; + import org.chromium.build.annotations.Nullable; import org.chromium.ui.R; +import org.chromium.ui.widget.Toast; import org.chromium.ui.UiUtils; import java.io.File; -@@ -67,6 +68,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -72,6 +73,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick private static final String TAG = "SelectFileDialog"; private static final String IMAGE_TYPE = "image"; private static final String VIDEO_TYPE = "video"; @@ -1649,7 +1642,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui private static final String AUDIO_TYPE = "audio"; private static final String ALL_TYPES = "*/*"; private static final String GENERIC_TYPE = "application/octet-stream"; -@@ -312,6 +314,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -324,6 +326,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick mMimeTypes = convertToSupportedMimeTypes(mFileTypes); } @@ -1661,7 +1654,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui /** * Creates and starts an intent based on the passed fileTypes and capture value. * -@@ -374,7 +381,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -399,7 +406,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick List missingPermissions = new ArrayList<>(); String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE; boolean shouldUsePhotoPicker = shouldUsePhotoPicker(); @@ -1670,7 +1663,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui // The permission scenario for accessing media has evolved a bit over the years: // Early on, READ_EXTERNAL_STORAGE was required to access media, but that permission was // later deprecated. In its place (starting with Android T) READ_MEDIA_IMAGES and -@@ -427,7 +434,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -452,7 +459,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick // TODO(finnur): Remove once we figure out the cause of // crbug.com/950024. @@ -1679,7 +1672,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui if (permissions.length != requestPermissions.length) { throw new RuntimeException( String.format( -@@ -444,7 +451,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -469,7 +476,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick } } @@ -1688,7 +1681,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui if (permissions[i].equals(storagePermission) || permissions[i].equals( Manifest.permission.READ_MEDIA_IMAGES) -@@ -751,6 +758,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -775,6 +782,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick mimeTypes.add(mimeType); } } @@ -1696,7 +1689,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui return mimeTypes; } -@@ -1121,6 +1129,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -1149,6 +1157,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick return countAcceptTypesFor(superType) == mMimeTypes.size(); } @@ -1735,8 +1728,8 @@ diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_fil diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc --- a/ui/shell_dialogs/select_file_dialog_android.cc +++ b/ui/shell_dialogs/select_file_dialog_android.cc -@@ -161,6 +161,12 @@ void SelectFileDialogImpl::SelectFileImpl( - accept_multiple_files, owning_window->GetJavaObject()); +@@ -175,6 +175,12 @@ void SelectFileDialogImpl::SelectFileImpl( + owning_window->GetJavaObject()); } +void SelectFileDialogImpl::ShowToast(const std::string& message) { diff --git a/build/patches/Add-cromite-flags-support.patch b/build/patches/Add-cromite-flags-support.patch index 6c0577b9..fe6b14a6 100644 --- a/build/patches/Add-cromite-flags-support.patch +++ b/build/patches/Add-cromite-flags-support.patch @@ -21,7 +21,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html build/android/gyp/java_cpp_features.py | 17 ++ chrome/android/java/res/values/values.xml | 3 + .../java/res/xml/privacy_preferences.xml | 4 + - .../settings/AccessibilitySettings.java | 5 +- .../homepage/settings/HomepageSettings.java | 2 +- .../privacy/settings/PrivacySettings.java | 2 +- .../settings/FragmentDependencyProvider.java | 10 +- @@ -43,6 +42,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/ui/ui_features.cc | 1 + chrome/common/chrome_features.cc | 1 + .../res/xml/accessibility_preferences.xml | 3 +- + .../accessibility/AccessibilitySettings.java | 6 +- .../android/java/res/values/attrs.xml | 4 + .../settings/ChromeSwitchPreference.java | 20 ++ .../components/cached_flags/CachedFlag.java | 9 +- @@ -104,7 +104,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + - 91 files changed, 801 insertions(+), 28 deletions(-) + 91 files changed, 802 insertions(+), 28 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp @@ -141,7 +141,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/base/BUILD.gn b/base/BUILD.gn --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -163,6 +163,8 @@ use_epoll = is_linux || is_chromeos || is_android +@@ -165,6 +165,8 @@ use_epoll = is_linux || is_chromeos || is_android # This does not include test code (test support and anything in the test # directory) which should use source_set as is recommended for GN targets). component("base") { @@ -150,7 +150,7 @@ diff --git a/base/BUILD.gn b/base/BUILD.gn sources = [ "allocator/allocator_check.cc", "allocator/allocator_check.h", -@@ -1005,7 +1007,7 @@ component("base") { +@@ -1017,7 +1019,7 @@ component("base") { "//build/config/compiler:wglobal_constructors", ] @@ -177,8 +177,8 @@ diff --git a/base/android/feature_map.cc b/base/android/feature_map.cc diff --git a/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java b/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java --- a/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java +++ b/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java -@@ -16,7 +16,7 @@ import java.util.Map; - /** Keeps track of values returned for cached flags and field trial parameters. */ +@@ -18,7 +18,7 @@ import java.util.Map; + @NullMarked public abstract class ValuesReturned { @GuardedBy("sBoolValues") - private static final Map sBoolValues = new HashMap<>(); @@ -221,7 +221,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc namespace { // Pointer to the FeatureList instance singleton that was set via -@@ -469,6 +494,46 @@ bool FeatureList::IsEnabled(const Feature& feature) { +@@ -473,6 +498,46 @@ bool FeatureList::IsEnabled(const Feature& feature) { return g_feature_list_instance->IsFeatureEnabled(feature); } @@ -268,7 +268,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc // static bool FeatureList::IsValidFeatureOrFieldTrialName(std::string_view name) { return IsStringASCII(name) && name.find_first_of(",<*") == std::string::npos; -@@ -735,6 +800,17 @@ void FeatureList::VisitFeaturesAndParams(FeatureVisitor& visitor, +@@ -743,6 +808,17 @@ void FeatureList::VisitFeaturesAndParams(FeatureVisitor& visitor, void FeatureList::FinalizeInitialization() { DCHECK(!initialized_); @@ -289,7 +289,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc diff --git a/base/feature_list.h b/base/feature_list.h --- a/base/feature_list.h +++ b/base/feature_list.h -@@ -166,8 +166,10 @@ enum class FeatureMacroHandshake { kSecret }; +@@ -170,8 +170,10 @@ enum class FeatureMacroHandshake { kSecret }; struct BASE_EXPORT LOGICALLY_CONST Feature { constexpr Feature(const char* name, FeatureState default_state, @@ -302,7 +302,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h #if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) if (std::string_view(name).find(BUILDFLAG(BANNED_BASE_FEATURE_PREFIX)) == 0) { -@@ -194,6 +196,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { +@@ -198,6 +200,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { // command line switch. const FeatureState default_state; @@ -312,7 +312,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h private: friend class FeatureList; -@@ -469,6 +474,11 @@ class BASE_EXPORT FeatureList { +@@ -477,6 +482,11 @@ class BASE_EXPORT FeatureList { // instance, which is checked in builds with DCHECKs enabled. static bool IsEnabled(const Feature& feature); @@ -324,7 +324,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h // Some characters are not allowed to appear in feature names or the // associated field trial names, as they are used as special characters for // command-line serialization. This function checks that the strings are ASCII -@@ -734,4 +744,62 @@ class BASE_EXPORT FeatureList { +@@ -746,4 +756,62 @@ class BASE_EXPORT FeatureList { } // namespace base @@ -434,7 +434,7 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -55,6 +55,10 @@ found in the LICENSE file. +@@ -54,6 +54,10 @@ found in the LICENSE file. android:key="do_not_track" android:title="@string/do_not_track_title" android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" /> @@ -445,35 +445,6 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi mPageTitle = new ObservableSupplierImpl<>(); @Override @@ -509,7 +480,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplier; import org.chromium.chrome.browser.LaunchIntentDispatcher; -@@ -78,18 +79,21 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -76,18 +77,21 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl private final OneshotSupplier mSnackbarManagerSupplier; private final OneshotSupplier mBottomSheetControllerSupplier; private final ObservableSupplier mModalDialogManagerSupplier; @@ -532,7 +503,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme } @Override -@@ -98,6 +102,10 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -96,6 +100,10 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl @NonNull Fragment fragment, @NonNull Context unusedContext) { // Common dependencies attachments. @@ -644,9 +615,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc namespace about_flags { namespace { -@@ -4315,6 +4319,10 @@ const FeatureEntry::FeatureVariation kServiceWorkerAutoPreloadVariations[] = { - std::size(kServiceWorkerAutoPreload_SWNotRunningOnly), nullptr}, - }; +@@ -4313,6 +4317,10 @@ const FeatureEntry::FeatureVariation kMerchantTrustVariations[] = { + std::size(kMerchantTrustEnabledWithSampleData), nullptr}}; + #endif // !BUILDFLAG(IS_ANDROID) +#define FEATURE_PARAM_SECTION +#include "cromite_flags/chrome_browser_about_flags_cc.inc" @@ -655,7 +626,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. -@@ -4341,6 +4349,9 @@ const FeatureEntry::FeatureVariation kServiceWorkerAutoPreloadVariations[] = { +@@ -4339,6 +4347,9 @@ const FeatureEntry::FeatureVariation kMerchantTrustVariations[] = { const FeatureEntry kFeatureEntries[] = { // Include generated flags for flag unexpiry; see //docs/flag_expiry.md and // //tools/flags/generate_unexpire_flags.py. @@ -668,7 +639,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -372,4 +372,5 @@ BASE_FEATURE(kRemovalOfIWAsFromTabCapture, +@@ -352,4 +352,5 @@ BASE_FEATURE(kRemovalOfIWAsFromTabCapture, "RemovalOfIWAsFromTabCapture", base::FEATURE_ENABLED_BY_DEFAULT); @@ -677,7 +648,7 @@ diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_feature diff --git a/chrome/browser/browser_features.h b/chrome/browser/browser_features.h --- a/chrome/browser/browser_features.h +++ b/chrome/browser/browser_features.h -@@ -145,6 +145,7 @@ BASE_DECLARE_FEATURE(kRemovalOfIWAsFromTabCapture); +@@ -136,6 +136,7 @@ BASE_DECLARE_FEATURE(kRemovalOfIWAsFromTabCapture); // module, e.g. // //chrome/browser//features.h // @@ -701,9 +672,9 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn "//base:base_java", + "//base:base_cached_flags_java", "//base/version_info/android:version_constants_java", + "//build:android_buildflags", "//build:chromeos_buildflags", - "//build/android:build_java", -@@ -24,12 +29,20 @@ android_library("java") { +@@ -25,12 +30,20 @@ android_library("java") { "//third_party/jni_zero:jni_zero_java", ] srcjar_deps = [ @@ -727,7 +698,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -1063,5 +1063,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, +@@ -1133,5 +1133,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, "WebOtpCrossDeviceSimpleString", base::FEATURE_DISABLED_BY_DEFAULT); @@ -737,7 +708,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -215,6 +215,7 @@ constexpr base::FeatureParam kQuickDeleteAndroidSurveyTriggerId( +@@ -225,6 +225,7 @@ constexpr base::FeatureParam kQuickDeleteAndroidSurveyTriggerId( "trigger_id", /*default_value=*/""); @@ -748,9 +719,9 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -17,6 +17,10 @@ import org.chromium.components.cached_flags.DoubleCachedFieldTrialParameter; - import org.chromium.components.cached_flags.IntCachedFieldTrialParameter; - import org.chromium.components.cached_flags.StringCachedFieldTrialParameter; +@@ -20,6 +20,10 @@ import org.chromium.components.cached_flags.DoubleCachedFeatureParam; + import org.chromium.components.cached_flags.IntCachedFeatureParam; + import org.chromium.components.cached_flags.StringCachedFeatureParam; +import org.chromium.chrome.browser.flags.cromite.CromiteCachedFlagImplBase; +import java.util.Arrays; @@ -759,16 +730,16 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f import java.util.List; import java.util.Map; -@@ -730,7 +734,7 @@ public abstract class ChromeFeatureList { +@@ -818,7 +822,7 @@ public abstract class ChromeFeatureList { public static final CachedFlag sWebApkMinShellApkVersion = newCachedFlag(WEB_APK_MIN_SHELL_APK_VERSION, true); - public static final List sFlagsCachedFullBrowser = + public static final List sFlagsCachedFullBrowserChromium = List.of( - sAccountReauthenticationRecentTimeWindow, sAndroidAppIntegration, -@@ -823,6 +827,13 @@ public abstract class ChromeFeatureList { + sAndroidAppIntegrationModule, +@@ -916,6 +920,13 @@ public abstract class ChromeFeatureList { sUseLibunwindstackNativeUnwinderAndroid, sWebApkMinShellApkVersion); @@ -854,7 +825,7 @@ diff --git a/chrome/browser/settings/BUILD.gn b/chrome/browser/settings/BUILD.gn diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browser/settings/ChromeBaseSettingsFragment.java b/chrome/browser/settings/android/java/src/org/chromium/chrome/browser/settings/ChromeBaseSettingsFragment.java --- a/chrome/browser/settings/android/java/src/org/chromium/chrome/browser/settings/ChromeBaseSettingsFragment.java +++ b/chrome/browser/settings/android/java/src/org/chromium/chrome/browser/settings/ChromeBaseSettingsFragment.java -@@ -7,11 +7,18 @@ package org.chromium.chrome.browser.settings; +@@ -7,12 +7,19 @@ package org.chromium.chrome.browser.settings; import androidx.annotation.NonNull; import androidx.preference.PreferenceFragmentCompat; @@ -863,6 +834,7 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherFactory; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.components.browser_ui.settings.EmbeddableSettingsPage; + import org.chromium.components.browser_ui.settings.SettingsCustomTabLauncher; +import android.os.Bundle; +import androidx.preference.Preference; @@ -873,9 +845,9 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse /** * Base class for settings in Chrome. * -@@ -22,6 +29,49 @@ public abstract class ChromeBaseSettingsFragment extends PreferenceFragmentCompa - implements EmbeddableSettingsPage, ProfileDependentSetting { +@@ -26,6 +33,49 @@ public abstract class ChromeBaseSettingsFragment extends PreferenceFragmentCompa private Profile mProfile; + private SettingsCustomTabLauncher mCustomTabLauncher; + private Supplier mRequireRestartDelegateSupplier; + @@ -957,18 +929,18 @@ new file mode 100644 diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -487,4 +487,5 @@ BASE_FEATURE(kInlineFullscreenPerfExperiment, - "InlineFullscreenPerfExperiment", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -440,4 +440,5 @@ BASE_FEATURE(kPageActionsMigration, + "PageActionsMigration", + base::FEATURE_DISABLED_BY_DEFAULT); +#include "cromite_flags/chrome_browser_ui_ui_features_cc.inc" } // namespace features diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1629,4 +1629,5 @@ BASE_FEATURE(kPeriodicLogUploadMigration, - base::FEATURE_DISABLED_BY_DEFAULT); - #endif // BUILDFLAG(IS_CHROMEOS_ASH) +@@ -1561,4 +1561,5 @@ BASE_FEATURE(kDisableShortcutsEnableDiy, + "DisableShortcutsEnableDiy", + base::FEATURE_ENABLED_BY_DEFAULT); +#include "cromite_flags/chrome_common_chrome_features_cc.inc" } // namespace features @@ -985,6 +957,30 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil +@@ -282,6 +282,7 @@ + + @@ -1090,7 +1086,7 @@ diff --git a/components/components_strings.grd b/components/components_strings.g diff --git a/components/content_settings/core/common/features.cc b/components/content_settings/core/common/features.cc --- a/components/content_settings/core/common/features.cc +++ b/components/content_settings/core/common/features.cc -@@ -113,5 +113,6 @@ BASE_FEATURE(kContentSettingsPartitioning, +@@ -163,5 +163,6 @@ BASE_FEATURE(kContentSettingsPartitioning, "ContentSettingsPartitioning", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1106,7 +1102,7 @@ new file mode 100644 diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_state.cc --- a/components/flags_ui/flags_state.cc +++ b/components/flags_ui/flags_state.cc -@@ -365,6 +365,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( +@@ -363,6 +363,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); @@ -1128,7 +1124,7 @@ diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_stat CHECK(entry_it != name_to_switch_map.end(), base::NotFatalUntil::M130); const SwitchEntry& entry = entry_it->second; -@@ -682,6 +697,27 @@ void FlagsState::GetFlagFeatureEntries( +@@ -680,6 +695,27 @@ void FlagsState::GetFlagFeatureEntries( data.Set("links", std::move(links)); } @@ -1156,7 +1152,7 @@ diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_stat switch (entry.type) { case FeatureEntry::SINGLE_VALUE: case FeatureEntry::SINGLE_DISABLE_VALUE: -@@ -810,6 +846,16 @@ void FlagsState::AddSwitchesToCommandLine( +@@ -806,6 +842,16 @@ void FlagsState::AddSwitchesToCommandLine( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); if (entry_it == name_to_switch_map.end()) { @@ -1170,10 +1166,10 @@ diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_stat + continue; + } + } - NOTREACHED_IN_MIGRATION(); - continue; + NOTREACHED(); } -@@ -1062,6 +1108,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( + +@@ -1057,6 +1103,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( bool FlagsState::IsSupportedFeature(const FlagsStorage* storage, const std::string& name, int platform_mask) const { @@ -1230,7 +1226,7 @@ diff --git a/components/flags_ui/resources/app.html.ts b/components/flags_ui/res -
-
-@@ -138,6 +165,7 @@ export function getHtml(this: AppElement) { +
+@@ -127,6 +154,7 @@ export function getHtml(this: AppElement) {
@@ -1274,7 +1270,7 @@ diff --git a/components/flags_ui/resources/app.html.ts b/components/flags_ui/res diff --git a/components/flags_ui/resources/app.ts b/components/flags_ui/resources/app.ts --- a/components/flags_ui/resources/app.ts +++ b/components/flags_ui/resources/app.ts -@@ -128,6 +128,7 @@ export class FlagsAppElement extends CrLitElement { +@@ -132,6 +132,7 @@ export class FlagsAppElement extends CrLitElement { // loadTimeData.getString('unavailable'), // @@ -1282,19 +1278,20 @@ diff --git a/components/flags_ui/resources/app.ts b/components/flags_ui/resource ]; protected selectedTabIndex_: number = 0; -@@ -149,8 +150,11 @@ export class FlagsAppElement extends CrLitElement { +@@ -150,9 +151,12 @@ export class FlagsAppElement extends CrLitElement { protected defaultFeatures: Feature[] = []; protected nonDefaultFeatures: Feature[] = []; + protected defaultCromiteFeatures: Feature[] = []; + protected nonDefaultCromiteFeatures: Feature[] = []; protected searching: boolean = false; + protected needsRestart: boolean = false; + private onlyCromiteFlags: boolean = false; private announceStatusDelayMs: number = 100; private featuresResolver: PromiseResolver = new PromiseResolver(); private flagSearch: FlagSearch|null = null; -@@ -184,10 +188,24 @@ export class FlagsAppElement extends CrLitElement { +@@ -186,10 +190,24 @@ export class FlagsAppElement extends CrLitElement { if (changedPrivateProperties.has('data')) { const defaultFeatures: Feature[] = []; const nonDefaultFeatures: Feature[] = []; @@ -1318,8 +1315,8 @@ diff --git a/components/flags_ui/resources/app.ts b/components/flags_ui/resource + this.nonDefaultCromiteFeatures = nonDefaultCromiteFeatures; this.defaultFeatures = defaultFeatures; this.nonDefaultFeatures = nonDefaultFeatures; - } -@@ -228,6 +246,11 @@ export class FlagsAppElement extends CrLitElement { + +@@ -233,6 +251,11 @@ export class FlagsAppElement extends CrLitElement { override connectedCallback() { super.connectedCallback(); @@ -1458,7 +1455,7 @@ diff --git a/components/offline_pages/core/offline_page_feature.h b/components/o diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc -@@ -193,4 +193,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, +@@ -188,4 +188,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, "ImprovedPasswordChangeService", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1467,7 +1464,7 @@ diff --git a/components/password_manager/core/browser/features/password_features diff --git a/components/permissions/features.cc b/components/permissions/features.cc --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -153,6 +153,7 @@ BASE_FEATURE(kCpssQuietChipTextUpdate, +@@ -122,6 +122,7 @@ BASE_FEATURE(kCpssQuietChipTextUpdate, BASE_FEATURE(kCpssUseTfliteSignatureRunner, "CpssUseTfliteSignatureRunner", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1541,7 +1538,7 @@ diff --git a/components/version_ui/version_handler_helper.cc b/components/versio diff --git a/content/common/features.cc b/content/common/features.cc --- a/content/common/features.cc +++ b/content/common/features.cc -@@ -619,4 +619,5 @@ BASE_FEATURE(kLimitCrossOriginNonActivatedPaintHolding, +@@ -475,4 +475,5 @@ BASE_FEATURE(kLimitCrossOriginNonActivatedPaintHolding, // Please keep features in alphabetical order. @@ -1550,7 +1547,7 @@ diff --git a/content/common/features.cc b/content/common/features.cc diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -1498,4 +1498,5 @@ bool IsVideoCaptureServiceEnabledForBrowserProcess() { +@@ -1421,4 +1421,5 @@ bool IsVideoCaptureServiceEnabledForBrowserProcess() { VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; } @@ -1559,7 +1556,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h -@@ -352,6 +352,7 @@ CONTENT_EXPORT extern const base::FeatureParam +@@ -341,6 +341,7 @@ CONTENT_EXPORT extern const base::FeatureParam CONTENT_EXPORT bool IsVideoCaptureServiceEnabledForOutOfProcess(); CONTENT_EXPORT bool IsVideoCaptureServiceEnabledForBrowserProcess(); @@ -1905,7 +1902,7 @@ new file mode 100755 diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -1837,5 +1837,5 @@ uint32_t GetPassthroughAudioFormats() { +@@ -1819,5 +1819,5 @@ uint32_t GetPassthroughAudioFormats() { return 0; #endif // BUILDFLAG(ENABLE_PASSTHROUGH_AUDIO_CODECS) } @@ -1915,7 +1912,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc diff --git a/media/base/media_switches.h b/media/base/media_switches.h --- a/media/base/media_switches.h +++ b/media/base/media_switches.h -@@ -572,5 +572,5 @@ MEDIA_EXPORT OOPVDMode GetOutOfProcessVideoDecodingMode(); +@@ -570,5 +570,5 @@ MEDIA_EXPORT OOPVDMode GetOutOfProcessVideoDecodingMode(); MEDIA_EXPORT uint32_t GetPassthroughAudioFormats(); } // namespace media @@ -1925,18 +1922,18 @@ diff --git a/media/base/media_switches.h b/media/base/media_switches.h diff --git a/net/base/features.cc b/net/base/features.cc --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -629,4 +629,5 @@ BASE_FEATURE(kIgnoreHSTSForLocalhost, - "IgnoreHSTSForLocalhost", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -666,4 +666,5 @@ BASE_FEATURE(kHstsTopLevelNavigationsOnly, + "HstsTopLevelNavigationsOnly", + base::FEATURE_DISABLED_BY_DEFAULT); +#include "cromite_flags/net_base_features_cc.inc" } // namespace net::features diff --git a/net/base/features.h b/net/base/features.h --- a/net/base/features.h +++ b/net/base/features.h -@@ -650,6 +650,7 @@ NET_EXPORT extern const base::FeatureParam - // If enabled, ignore Strict-Transport-Security for [*.]localhost hosts. - NET_EXPORT BASE_DECLARE_FEATURE(kIgnoreHSTSForLocalhost); +@@ -687,6 +687,7 @@ NET_EXPORT BASE_DECLARE_FEATURE(kNewClientCertPathBuilding); + // When enabled HSTS upgrades will only apply to top-level navigations. + NET_EXPORT BASE_DECLARE_FEATURE(kHstsTopLevelNavigationsOnly); +#include "cromite_flags/net_base_features_h.inc" } // namespace net::features @@ -1945,18 +1942,18 @@ diff --git a/net/base/features.h b/net/base/features.h diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -475,4 +475,5 @@ BASE_FEATURE(kEnableLockCookieDatabaseByDefault, - base::FEATURE_ENABLED_BY_DEFAULT); - #endif // BUILDFLAG(IS_WIN) +@@ -366,4 +366,5 @@ BASE_FEATURE(kSRIMessageSignatureEnforcement, + "SRIMessageSignatureEnforcement", + base::FEATURE_DISABLED_BY_DEFAULT); +#include "cromite_flags/services_network_public_cpp_features_cc.inc" } // namespace network::features diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h -@@ -211,6 +211,7 @@ COMPONENT_EXPORT(NETWORK_CPP) - BASE_DECLARE_FEATURE(kEnableLockCookieDatabaseByDefault); - #endif // BUILDFLAG(IS_WIN) +@@ -155,6 +155,7 @@ BASE_DECLARE_FEATURE(kEnableLockCookieDatabaseByDefault); + COMPONENT_EXPORT(NETWORK_CPP) + BASE_DECLARE_FEATURE(kSRIMessageSignatureEnforcement); +#include "cromite_flags/services_network_public_cpp_features_h.inc" } // namespace network::features @@ -1965,7 +1962,7 @@ diff --git a/services/network/public/cpp/features.h b/services/network/public/cp diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -2932,4 +2932,5 @@ bool IsCanvasSharedBitmapConversionEnabled() { +@@ -2898,4 +2898,5 @@ bool IsLinkPreviewTriggerTypeEnabled(LinkPreviewTriggerType type) { // // DO NOT ADD NEW FEATURES HERE. @@ -1974,7 +1971,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -1886,6 +1886,7 @@ BLINK_COMMON_EXPORT bool IsCanvasSharedBitmapConversionEnabled(); +@@ -1874,6 +1874,7 @@ BLINK_COMMON_EXPORT bool IsUpdateComplexSafaAreaConstraintsEnabled(); // // DO NOT ADD NEW FEATURES HERE. @@ -1985,7 +1982,7 @@ diff --git a/third_party/blink/public/common/features.h b/third_party/blink/publ diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc -@@ -503,4 +503,5 @@ BASE_FEATURE(kAsyncFullscreenWindowState, +@@ -454,4 +454,5 @@ BASE_FEATURE(kAsyncFullscreenWindowState, "AsyncFullscreenWindowState", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1994,7 +1991,7 @@ diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h --- a/ui/base/ui_base_features.h +++ b/ui/base/ui_base_features.h -@@ -259,6 +259,7 @@ BASE_DECLARE_FEATURE(kWriteBookmarkWithoutTitle); +@@ -235,6 +235,7 @@ BASE_DECLARE_FEATURE(kWriteBookmarkWithoutTitle); COMPONENT_EXPORT(UI_BASE_FEATURES) BASE_DECLARE_FEATURE(kAsyncFullscreenWindowState); 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 36c1cc1a..bf712d23 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -14,7 +14,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../dialogs/DownloadLocationCustomView.java | 4 +- .../strings/android_chrome_strings.grd | 3 + .../bookmark_ui_operations_helper.cc | 2 + - .../views/bookmarks/bookmark_menu_delegate.cc | 2 + components/bookmark_bar_strings.grdp | 6 ++ .../bookmarks/browser/bookmark_codec.cc | 20 +++++- components/bookmarks/browser/bookmark_codec.h | 7 +- @@ -29,7 +28,7 @@ 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, 247 insertions(+), 15 deletions(-) + 24 files changed, 245 insertions(+), 15 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 @@ -45,7 +44,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re -@@ -183,6 +187,9 @@ found in the LICENSE file. +@@ -186,6 +190,9 @@ found in the LICENSE file. @@ -58,7 +57,7 @@ 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 -@@ -95,6 +95,7 @@ import org.chromium.chrome.browser.base.ColdStartTracker; +@@ -96,6 +96,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -66,7 +65,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -2919,6 +2920,8 @@ public class ChromeTabbedActivity extends ChromeActivity mObservers = new ObserverList<>(); + private static final String TAG = "BookmarkBridge"; + private long mNativeBookmarkBridge; - private boolean mIsDestroyed; + private Profile mProfile; private boolean mIsDoingExtensiveChanges; -@@ -395,6 +403,16 @@ class BookmarkBridge { +@@ -411,6 +419,16 @@ class BookmarkBridge { return mMobileFolderId; } @@ -150,7 +151,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** Returns Id representing the special "other" folder from bookmark model. */ public BookmarkId getOtherFolderId() { ThreadUtils.assertOnUiThread(); -@@ -1083,6 +1101,50 @@ class BookmarkBridge { +@@ -1132,6 +1150,50 @@ class BookmarkBridge { .addToReadingList(mNativeBookmarkBridge, parentId, title, url); } @@ -201,7 +202,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Helper method to mark an item as read. * -@@ -1331,6 +1393,9 @@ class BookmarkBridge { +@@ -1339,6 +1401,9 @@ class BookmarkBridge { BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl( long nativeBookmarkBridge, @JniType("GURL") GURL url); @@ -211,7 +212,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); void getTopLevelFolderIds( -@@ -1352,6 +1417,8 @@ class BookmarkBridge { +@@ -1360,6 +1425,8 @@ class BookmarkBridge { BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -232,7 +233,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse result == Result::kSuccess); delete this; } -@@ -355,6 +355,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -356,6 +356,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -266,7 +267,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -467,6 +494,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -468,6 +495,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -274,7 +275,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -560,6 +588,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -561,6 +589,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -284,7 +285,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { -@@ -1261,6 +1292,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1262,6 +1293,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -373,7 +374,7 @@ 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 -@@ -43,6 +43,8 @@ std::optional GetIfPermanentFolderType( +@@ -44,6 +44,8 @@ std::optional GetIfPermanentFolderType( case BookmarkNode::Type::URL: NOTREACHED(); @@ -406,7 +407,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 -@@ -4512,6 +4512,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4515,6 +4515,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs @@ -419,31 +420,19 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/bookmarks/bookmark_ui_operations_helper.cc b/chrome/browser/ui/bookmarks/bookmark_ui_operations_helper.cc --- a/chrome/browser/ui/bookmarks/bookmark_ui_operations_helper.cc +++ b/chrome/browser/ui/bookmarks/bookmark_ui_operations_helper.cc -@@ -54,6 +54,8 @@ ui::mojom::DragOperation BookmarkUIOperationsHelper::DropBookmarks( +@@ -137,6 +137,8 @@ ui::mojom::DragOperation BookmarkUIOperationsHelper::DropBookmarks( if (is_reorder) { base::UmaHistogramEnumeration("Bookmarks.ReorderDropTarget", target); - switch (GetParentType()) { + switch (target_parent()->GetType()) { + case bookmarks::BookmarkNode::TABS_COLLECTION: + break; case bookmarks::BookmarkNode::URL: NOTREACHED(); case bookmarks::BookmarkNode::FOLDER: -diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc ---- a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc -+++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc -@@ -103,6 +103,8 @@ BookmarkParentFolder GetBookmarkParentFolderForNode( - return BookmarkParentFolder::OtherFolder(); - case bookmarks::BookmarkNode::MOBILE: - return BookmarkParentFolder::MobileFolder(); -+ case bookmarks::BookmarkNode::TABS_COLLECTION: -+ NOTREACHED(); - } - NOTREACHED(); - } diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_strings.grdp --- a/components/bookmark_bar_strings.grdp +++ b/components/bookmark_bar_strings.grdp -@@ -20,6 +20,9 @@ +@@ -15,6 +15,9 @@ Mobile bookmarks @@ -453,7 +442,7 @@ diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_stri Other bookmarks -@@ -34,6 +37,9 @@ +@@ -29,6 +32,9 @@ Mobile Bookmarks @@ -551,7 +540,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar // Need to reset the title as the title is persisted and restored from // the file. -@@ -477,12 +489,14 @@ void BookmarkCodec::DecodeMetaInfoHelper( +@@ -475,12 +487,14 @@ void BookmarkCodec::DecodeMetaInfoHelper( void BookmarkCodec::ReassignIDs(BookmarkNode* bb_node, BookmarkNode* other_node, @@ -702,7 +691,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar } bool BookmarkModel::IsBookmarked(const GURL& url) const { -@@ -1134,6 +1134,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { +@@ -1147,6 +1147,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -713,7 +702,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h --- a/components/bookmarks/browser/bookmark_model.h +++ b/components/bookmarks/browser/bookmark_model.h -@@ -149,6 +149,12 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -151,6 +151,12 @@ class BookmarkModel : public BookmarkUndoProvider, // bookmarks in the account storage). const BookmarkNode* account_mobile_node() const; @@ -726,7 +715,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark bool is_root_node(const BookmarkNode* node) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return node == root_; -@@ -566,6 +572,7 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -592,6 +598,7 @@ class BookmarkModel : public BookmarkUndoProvider, raw_ptr account_bookmark_bar_node_ = nullptr; raw_ptr account_other_node_ = nullptr; raw_ptr account_mobile_node_ = nullptr; @@ -860,7 +849,7 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/components/sync_bookmarks/bookmark_specifics_conversions.cc --- a/components/sync_bookmarks/bookmark_specifics_conversions.cc +++ b/components/sync_bookmarks/bookmark_specifics_conversions.cc -@@ -444,6 +444,7 @@ sync_pb::BookmarkSpecifics::Type GetProtoTypeFromBookmarkNode( +@@ -442,6 +442,7 @@ sync_pb::BookmarkSpecifics::Type GetProtoTypeFromBookmarkNode( case bookmarks::BookmarkNode::BOOKMARK_BAR: case bookmarks::BookmarkNode::OTHER_NODE: case bookmarks::BookmarkNode::MOBILE: diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index cd8bbd2f..f72ed320 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -10,7 +10,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/android/java/res/values/dimens.xml | 6 ++++- .../browser/ChromeBaseAppCompatActivity.java | 3 +++ .../chrome/browser/WarmupManager.java | 5 +++- - .../settings/AccessibilitySettings.java | 13 ++++++++++ .../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++ .../chrome/browser/app/ChromeActivity.java | 4 +++- .../overlays/strip/StripLayoutHelper.java | 10 ++++++-- @@ -25,7 +24,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../AppHeaderCoordinator.java | 2 ++ .../omnibox/LocationBarCoordinator.java | 2 +- .../strings/android_chrome_strings.grd | 7 ++++++ - .../java/res/layout/control_container.xml | 10 ++++---- + .../java/res/layout/control_container.xml | 8 +++---- .../java/res/layout/toolbar_tablet.xml | 2 +- .../java/res/values-sw600dp/dimens.xml | 5 ++-- .../toolbar/java/res/values/dimens.xml | 6 +++-- @@ -35,9 +34,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../tab_strip/HeightTransitionHandler.java | 2 ++ .../TabStripTransitionCoordinator.java | 6 ++++- .../res/xml/accessibility_preferences.xml | 5 ++++ + .../accessibility/AccessibilitySettings.java | 13 ++++++++++ .../AccessibilitySettingsDelegate.java | 11 +++++++++ .../chromium/ui/base/DeviceFormFactor.java | 14 +++++++++++ - 33 files changed, 177 insertions(+), 27 deletions(-) + 33 files changed, 176 insertions(+), 26 deletions(-) diff --git a/chrome/android/java/res/layout/custom_tabs_control_container.xml b/chrome/android/java/res/layout/custom_tabs_control_container.xml --- a/chrome/android/java/res/layout/custom_tabs_control_container.xml @@ -80,7 +80,7 @@ diff --git a/chrome/android/java/res/values-sw600dp/dimens.xml b/chrome/android/ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml -@@ -115,9 +115,13 @@ found in the LICENSE file. +@@ -125,9 +125,13 @@ found in the LICENSE file. 16dp @@ -98,7 +98,7 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java -@@ -51,6 +51,7 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; +@@ -57,6 +57,7 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder; import org.chromium.chrome.browser.night_mode.NightModeStateProvider; import org.chromium.chrome.browser.night_mode.NightModeUtils; @@ -106,7 +106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeManager; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; -@@ -115,6 +116,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -128,6 +129,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -126,7 +126,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.j import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayUtil; import org.chromium.url.GURL; -@@ -469,7 +470,9 @@ public class WarmupManager { +@@ -473,7 +474,9 @@ public class WarmupManager { ControlContainer controlContainer = mainView.findViewById(R.id.control_container); if (toolbarId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -137,54 +137,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.j } return mainView; } catch (InflateException e) { -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -@@ -21,6 +21,7 @@ import org.chromium.chrome.browser.preferences.Pref; - import org.chromium.chrome.browser.settings.SettingsNavigationFactory; - import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; - import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate; -+import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate.BooleanPreferenceDelegate; - import org.chromium.components.browser_ui.accessibility.FontSizePrefs; - import org.chromium.components.browser_ui.accessibility.PageZoomPreference; - import org.chromium.components.browser_ui.accessibility.PageZoomUma; -@@ -50,6 +51,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - public static final String PREF_ZOOM_INFO = "zoom_info"; - public static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions"; - -+ private BooleanPreferenceDelegate mForceTabletUIDelegate; -+ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; -+ - private PageZoomPreference mPageZoomDefaultZoomPref; - private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; - private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -124,6 +128,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - mPrefService.getBoolean(Pref.READER_FOR_ACCESSIBILITY)); - readerForAccessibilityPref.setOnPreferenceChangeListener(this); - -+ ChromeSwitchPreference forceTabletUiPref = -+ (ChromeSwitchPreference) findPreference(PREF_FORCE_TABLET_UI); -+ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate(); -+ forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); -+ forceTabletUiPref.setOnPreferenceChangeListener(this); -+ - Preference captions = findPreference(PREF_CAPTIONS); - captions.setOnPreferenceClickListener( - preference -> { -@@ -185,6 +195,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { - mFontSizePrefs.setForceEnableZoom((Boolean) newValue); -+ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) { -+ mForceTabletUIDelegate.setEnabled((Boolean) newValue); -+ mDelegate.requestRestart(getActivity()); - } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) { - mPrefService.setBoolean(Pref.READER_FOR_ACCESSIBILITY, (Boolean) newValue); - } else if (PREF_PAGE_ZOOM_DEFAULT_ZOOM.equals(preference.getKey())) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -38,6 +38,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -62,6 +62,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting } } @@ -213,7 +169,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -850,7 +850,9 @@ public abstract class ChromeActivity +@@ -757,7 +757,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity // Inflate the correct toolbar layout for the device. int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -227,15 +183,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -99,6 +99,7 @@ import org.chromium.components.feature_engagement.Tracker; - import org.chromium.components.prefs.PrefService; +@@ -112,6 +112,7 @@ import org.chromium.components.tab_group_sync.SavedTabGroup; + import org.chromium.components.tab_group_sync.TabGroupSyncService; import org.chromium.components.tab_groups.TabGroupColorId; import org.chromium.ui.MotionEventUtils; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -4277,8 +4278,13 @@ public class StripLayoutHelper +@@ -3999,8 +4000,13 @@ public class StripLayoutHelper mTabMenu.setAnchorView(tabView); // 3. Set the vertical offset to align the tab menu with bottom of the tab strip int tabHeight = mManagerHost.getHeight(); @@ -262,7 +218,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; -@@ -439,7 +440,10 @@ public class StripLayoutHelperManager +@@ -438,7 +439,10 @@ public class StripLayoutHelperManager mIsLayoutOptimizationsEnabled = ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled(true); @@ -296,7 +252,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrow diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -576,7 +576,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -602,7 +602,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @Override public int getControlContainerHeightResource() { @@ -310,7 +266,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -104,6 +104,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; +@@ -105,6 +105,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.pdf.PdfPage; @@ -319,7 +275,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.price_insights.PriceInsightsButtonController; import org.chromium.chrome.browser.price_tracking.CurrentTabPriceTrackingStateSupplier; import org.chromium.chrome.browser.price_tracking.PriceTrackingButtonController; -@@ -1773,7 +1775,9 @@ public class RootUiCoordinator +@@ -1788,7 +1790,9 @@ public class RootUiCoordinator if (!mSupportsFindInPageSupplier.getAsBoolean()) return; int stubId = R.id.find_toolbar_stub; @@ -333,7 +289,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn --- a/chrome/browser/preferences/BUILD.gn +++ b/chrome/browser/preferences/BUILD.gn -@@ -26,6 +26,7 @@ android_library("java") { +@@ -25,6 +25,7 @@ android_library("java") { "//components/cached_flags:java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/jni_zero:jni_zero_java", @@ -344,7 +300,7 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -262,6 +262,7 @@ public final class ChromePreferenceKeys { +@@ -274,6 +274,7 @@ public final class ChromePreferenceKeys { /** Whether the app-specific history info text was already seen by users. */ public static final String HISTORY_APP_SPECIFIC_INFO_SEEN = "Chrome.History.AppSpecificInfoSeen"; @@ -395,26 +351,26 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java --- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java +++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java -@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils.DesktopWi +@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils.Windowing import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.InsetObserver; - import org.chromium.ui.InsetObserver.WindowInsetObserver; + import org.chromium.ui.InsetObserver.WindowInsetsConsumer; import org.chromium.ui.InsetsRectProvider; -@@ -273,6 +274,7 @@ public class AppHeaderCoordinator - InsetObserver insetObserver, +@@ -259,6 +260,7 @@ public class AppHeaderCoordinator + private static @DesktopWindowHeuristicResult int checkIsInDesktopWindow( InsetsRectProvider insetsRectProvider, @DesktopWindowHeuristicResult int currentResult) { + if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW; @DesktopWindowHeuristicResult int newResult; - assert insetObserver.getLastRawWindowInsets() != null + Insets captionBarInset = insetsRectProvider.getCachedInset(); diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -786,7 +786,7 @@ public class LocationBarCoordinator +@@ -814,7 +814,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -479,15 +435,6 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/control_container android:layout_width="match_parent" android:layout_height="@dimen/toolbar_height_no_shadow" android:layout="@layout/find_toolbar" /> -@@ -55,7 +55,7 @@ found in the LICENSE file. - android:id="@+id/target_view_stub" - android:inflatedId="@+id/toolbar_drag_drop_target_view" - android:layout_width="match_parent" -- android:layout_marginTop="@dimen/tab_strip_height" -+ android:layout_marginTop="@dimen/tab_strip_height_cromite" - android:layout_height="@dimen/toolbar_height_no_shadow" - android:layout="@layout/drag_drop_target_view" /> - diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml --- a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml +++ b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml @@ -616,7 +563,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.ui.resources.dynamics.DynamicResourceReadyOnceCallback; import org.chromium.ui.util.TokenHolder; -@@ -542,6 +543,7 @@ class HeightTransitionHandler { +@@ -544,6 +545,7 @@ class HeightTransitionHandler { if (TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting != null) { return TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting; } @@ -627,7 +574,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java -@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; +@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager.AppHeaderObserver; @@ -662,10 +609,54 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil +diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java ++++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +@@ -25,6 +25,7 @@ import org.chromium.content_public.browser.ContentFeatureList; + import org.chromium.content_public.browser.ContentFeatureMap; + + import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; ++import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate.BooleanPreferenceDelegate; + + /** Fragment to keep track of all the accessibility related preferences. */ + public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -39,6 +40,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + public static final String PREF_ZOOM_INFO = "zoom_info"; + public static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions"; + ++ private BooleanPreferenceDelegate mForceTabletUIDelegate; ++ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; ++ + private PageZoomPreference mPageZoomDefaultZoomPref; + private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; + private ChromeSwitchPreference mPageZoomAlwaysShowPref; +@@ -105,6 +109,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + mDelegate.getReaderAccessibilityDelegate().getValue()); + readerForAccessibilityPref.setOnPreferenceChangeListener(this); + ++ ChromeSwitchPreference forceTabletUiPref = ++ (ChromeSwitchPreference) findPreference(PREF_FORCE_TABLET_UI); ++ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate(); ++ forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); ++ forceTabletUiPref.setOnPreferenceChangeListener(this); ++ + Preference captions = findPreference(PREF_CAPTIONS); + captions.setOnPreferenceClickListener( + preference -> { +@@ -165,6 +175,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { + mDelegate.getForceEnableZoomAccessibilityDelegate().setValue((Boolean) newValue); ++ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) { ++ mForceTabletUIDelegate.setEnabled((Boolean) newValue); ++ mDelegate.requestRestart(getActivity()); + } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) { + mDelegate.getReaderAccessibilityDelegate().setValue((Boolean) newValue); + } else if (PREF_PAGE_ZOOM_DEFAULT_ZOOM.equals(preference.getKey())) { diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -11,6 +11,15 @@ import org.chromium.content_public.browser.BrowserContextHandle; +@@ -12,6 +12,15 @@ import org.chromium.content_public.browser.BrowserContextHandle; * embedder-specific logic. */ public interface AccessibilitySettingsDelegate { @@ -681,21 +672,21 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c /** An interface to control a single integer preference. */ interface IntegerPreferenceDelegate { /** -@@ -25,6 +34,8 @@ public interface AccessibilitySettingsDelegate { - /** @return The BrowserContextHandle that should be used to read and update settings. */ +@@ -39,6 +48,8 @@ public interface AccessibilitySettingsDelegate { + */ BrowserContextHandle getBrowserContextHandle(); + BooleanPreferenceDelegate getForceTabletUIDelegate(); + /** - * @return the InterPreferenceDelegate instance that should be used for reading and setting the - * text size contrast value for accessibility settings. Return null to omit the preference. + * @return boolean value specifying if the Image Descriptions user setting should be shown. + */ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java -@@ -49,6 +49,14 @@ public class DeviceFormFactor { - /** See {@link #setIsTabletForTesting(boolean)}. */ - private static Boolean sIsTabletForTesting; +@@ -69,6 +69,14 @@ public class DeviceFormFactor { + return BuildConfig.IS_DESKTOP_ANDROID; + } + private static boolean mForceTabletUI = false; + public static void setForceTabletUI(boolean forceTabletUI) { @@ -708,7 +699,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** * Each activity could be on a different display, and this will just tell you whether the * display associated with the application context is "tablet sized". Use {@link -@@ -57,6 +65,7 @@ public class DeviceFormFactor { +@@ -77,6 +85,7 @@ public class DeviceFormFactor { @CalledByNative @Deprecated public static boolean isTablet() { @@ -716,7 +707,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui if (sIsTabletForTesting != null) { return sIsTabletForTesting; } -@@ -87,6 +96,7 @@ public class DeviceFormFactor { +@@ -107,6 +116,7 @@ public class DeviceFormFactor { * E.g. http://developer.samsung.com/samsung-dex/testing */ public static boolean isNonMultiDisplayContextOnTablet(Context context) { @@ -724,7 +715,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; } -@@ -122,6 +132,7 @@ public class DeviceFormFactor { +@@ -142,6 +152,7 @@ public class DeviceFormFactor { * @return The screen width bucket the device is in (see constants at the top of this class). */ private static int detectScreenWidthBucket(Context context) { @@ -732,7 +723,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -129,6 +140,7 @@ public class DeviceFormFactor { +@@ -149,6 +160,7 @@ public class DeviceFormFactor { ThreadUtils.assertOnUiThread(); Context context = windowAndroid.getContext().get(); if (context == null) return 0; @@ -740,7 +731,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -138,6 +150,7 @@ public class DeviceFormFactor { +@@ -158,6 +170,7 @@ public class DeviceFormFactor { */ @UiThread public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) { @@ -748,7 +739,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context)); } -@@ -146,6 +159,7 @@ public class DeviceFormFactor { +@@ -166,6 +179,7 @@ public class DeviceFormFactor { * layout. */ public static int getMinimumTabletWidthPx(DisplayAndroid display) { diff --git a/build/patches/Add-option-to-use-home-page-as-NTP.patch b/build/patches/Add-option-to-use-home-page-as-NTP.patch index 1d46a529..2d30aa58 100644 --- a/build/patches/Add-option-to-use-home-page-as-NTP.patch +++ b/build/patches/Add-option-to-use-home-page-as-NTP.patch @@ -7,7 +7,6 @@ And allow use about:blank as default homepage License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../tasks/tab_management/TabGroupUiMediator.java | 8 +++++++- - .../browser/tasks/tab_management/TabUiUtils.java | 9 ++++++++- .../java/res/xml/homepage_preferences.xml | 5 +++++ .../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++ .../homepage/settings/HomepageSettings.java | 12 ++++++++++++ @@ -15,15 +14,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/tabmodel/ChromeTabCreator.java | 8 ++++++++ .../preferences/ChromePreferenceKeys.java | 1 + .../preferences/LegacyChromePreferenceKeys.java | 1 + + .../chrome/browser/tabmodel/TabGroupUtils.java | 8 ++++++++ .../android/strings/android_chrome_strings.grd | 3 +++ chrome/browser/ui/browser_ui_prefs.cc | 2 ++ chrome/common/pref_names.h | 4 ++++ - 12 files changed, 67 insertions(+), 3 deletions(-) + 12 files changed, 67 insertions(+), 2 deletions(-) diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -@@ -22,6 +22,7 @@ import org.chromium.base.supplier.OneshotSupplier; +@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.collaboration.CollaborationServiceFactory; import org.chromium.chrome.browser.data_sharing.DataSharingServiceFactory; import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesCoordinator; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -31,7 +31,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; import org.chromium.chrome.browser.layouts.LayoutType; -@@ -408,10 +409,15 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, +@@ -367,10 +368,15 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, assert relatedTabs.size() > 0; Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); @@ -48,33 +48,6 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser TabLaunchType.FROM_TAB_GROUP_UI, parentTabToAttach); RecordUserAction.record( -diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java ---- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java -+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java -@@ -48,6 +48,8 @@ import org.chromium.components.tab_groups.TabGroupColorId; - import org.chromium.content_public.browser.LoadUrlParams; - import org.chromium.ui.modaldialog.ModalDialogManager; - import org.chromium.ui.modaldialog.ModalDialogUtils; -+import org.chromium.chrome.browser.homepage.HomepageManager; -+import org.chromium.url.GURL; - - import java.util.List; - -@@ -210,8 +212,13 @@ public class TabUiUtils { - List relatedTabs = filter.getRelatedTabList(tabId); - assert relatedTabs.size() > 0; - -+ String url = UrlConstants.NTP_URL; -+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) { -+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(); -+ url = gurl != null ? gurl.getSpec() : url; -+ } - Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); -- tabCreator.createNewTab(new LoadUrlParams(UrlConstants.NTP_URL), type, parentTabToAttach); -+ tabCreator.createNewTab(new LoadUrlParams(url), type, parentTabToAttach); - } - - /** diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml --- a/chrome/android/java/res/xml/homepage_preferences.xml +++ b/chrome/android/java/res/xml/homepage_preferences.xml @@ -155,7 +128,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settin diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java -@@ -112,7 +112,6 @@ public class LaunchMetrics { +@@ -113,7 +113,6 @@ public class LaunchMetrics { public static void recordHomePageLaunchMetrics( boolean showHomeButton, boolean homepageIsNtp, GURL homepageGurl) { if (homepageGurl.isEmpty()) { @@ -174,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesState; import org.chromium.chrome.browser.profiles.Profile; -@@ -492,6 +493,13 @@ public class ChromeTabCreator extends TabCreator { +@@ -485,6 +486,13 @@ public class ChromeTabCreator extends TabCreator { * @return the created tab. */ public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) { @@ -191,7 +164,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -275,6 +275,7 @@ public final class ChromePreferenceKeys { +@@ -287,6 +287,7 @@ public final class ChromePreferenceKeys { public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP"; public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled"; @@ -210,10 +183,35 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro ChromePreferenceKeys.INCOGNITO_SHORTCUT_ADDED, ChromePreferenceKeys.LATEST_UNSUPPORTED_VERSION, ChromePreferenceKeys.LOCALE_MANAGER_AUTO_SWITCH, +diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupUtils.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupUtils.java +--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupUtils.java ++++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupUtils.java +@@ -7,6 +7,8 @@ package org.chromium.chrome.browser.tabmodel; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.tab.TabLaunchType; + import org.chromium.content_public.browser.LoadUrlParams; ++import org.chromium.chrome.browser.homepage.HomepageManager; ++import org.chromium.url.GURL; + + import java.util.List; + +@@ -65,6 +67,12 @@ public class TabGroupUtils { + List relatedTabs = tabGroupModelFilter.getRelatedTabList(parentId); + if (relatedTabs.isEmpty()) return; + ++ if (UrlConstants.NTP_URL.equals(url) ++ && HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) { ++ GURL gurl = HomepageManager.getInstance().getHomepageGurl(); ++ url = gurl != null ? gurl.getSpec() : url; ++ } ++ + Tab lastTab = relatedTabs.get(relatedTabs.size() - 1); + TabCreator tabCreator = tabGroupModelFilter.getTabModel().getTabCreator(); + LoadUrlParams loadUrlParams = new LoadUrlParams(url); 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 -@@ -1520,6 +1520,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1528,6 +1528,9 @@ Your Google account may have other forms of browsing history like searches and a Last hour @@ -226,7 +224,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -89,6 +89,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -91,6 +91,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( prefs::kShowForwardButton, true, GetHomeAndForwardButtonAndHomePageIsNewTabPageFlags()); @@ -238,7 +236,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u 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 -@@ -1339,6 +1339,10 @@ inline constexpr char kShowHomeButton[] = "browser.show_home_button"; +@@ -1342,6 +1342,10 @@ inline constexpr char kShowHomeButton[] = "browser.show_home_button"; // toolbar. inline constexpr char kShowForwardButton[] = "browser.show_forward_button"; 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 9e7f372e..aa59a0a3 100644 --- a/build/patches/Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/Add-setting-to-clear-data-on-exit.patch @@ -14,7 +14,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../chrome_browsing_data_lifetime_manager.cc | 22 +++++- .../chrome_browsing_data_remover_constants.h | 3 +- .../chrome_browsing_data_remover_delegate.cc | 14 ++++ - chrome/browser/dips/dips_service_impl.cc | 3 +- .../api/settings_private/prefs_util.cc | 17 +++++ .../browser/profiles/ProfileManagerUtils.java | 5 ++ .../profiles/android/profile_manager_utils.cc | 5 ++ @@ -32,14 +31,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html components/browsing_data/core/pref_names.cc | 17 +++++ components/browsing_data/core/pref_names.h | 10 +++ .../search_engines/template_url_service.cc | 1 + + content/browser/dips/dips_service_impl.cc | 2 +- content/browser/storage_partition_impl.cc | 1 + - 29 files changed, 324 insertions(+), 23 deletions(-) + 29 files changed, 323 insertions(+), 23 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java 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 -@@ -309,6 +309,7 @@ chrome_java_sources = [ +@@ -316,6 +316,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAdvanced.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java", @@ -50,7 +50,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java 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 -@@ -180,6 +180,7 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; +@@ -184,6 +184,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; @@ -58,7 +58,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; -@@ -1590,7 +1591,11 @@ public class ChromeTabbedActivity extends ChromeActivity Delete browsing data @@ -234,13 +234,13 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp diff --git a/chrome/browser/android/browsing_data/browsing_data_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_bridge.cc --- a/chrome/browser/android/browsing_data/browsing_data_bridge.cc +++ b/chrome/browser/android/browsing_data/browsing_data_bridge.cc -@@ -340,7 +340,7 @@ static void JNI_BrowsingDataBridge_SetLastClearBrowsingDataTab( - const JavaParamRef& jprofile, - jint tab_index) { +@@ -304,7 +304,7 @@ static void JNI_BrowsingDataBridge_SetLastClearBrowsingDataTab(JNIEnv* env, + Profile* profile, + jint tab_index) { DCHECK_GE(tab_index, 0); - DCHECK_LT(tab_index, 2); + DCHECK_LT(tab_index, 3); - GetPrefService(jprofile)->SetInteger( + GetPrefService(profile)->SetInteger( browsing_data::prefs::kLastClearBrowsingDataTab, tab_index); } diff --git a/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc b/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc @@ -298,7 +298,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_constants diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc -@@ -464,6 +464,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( +@@ -462,6 +462,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( CreateTaskCompletionClosure(TracingDataType::kHistory), &history_task_tracker_); } @@ -308,7 +308,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate. if (ClipboardRecentContent::GetInstance()) ClipboardRecentContent::GetInstance()->SuppressClipboardContent(); -@@ -572,6 +575,11 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( +@@ -570,6 +573,11 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( // and SSL host state are scoped to hosts and represent them as std::string. // Rename the method to indicate its more general usage. if (profile_->GetSSLHostStateDelegate()) { @@ -320,7 +320,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate. profile_->GetSSLHostStateDelegate()->Clear( filter_builder->MatchesAllOriginsAndDomains() ? base::RepeatingCallback() -@@ -600,9 +608,13 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( +@@ -598,9 +606,13 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( } device_event_log::Clear(delete_begin_, delete_end_); @@ -334,7 +334,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate. content::BackgroundTracingManager::GetInstance().DeleteTracesInDateRange( delete_begin_, delete_end_); -@@ -1302,6 +1314,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( +@@ -1281,6 +1293,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( if (should_clear_zero_suggest_and_session_token && template_url_service) template_url_service->ClearSessionToken(); @@ -343,30 +343,10 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate. } ////////////////////////////////////////////////////////////////////////////// -diff --git a/chrome/browser/dips/dips_service_impl.cc b/chrome/browser/dips/dips_service_impl.cc ---- a/chrome/browser/dips/dips_service_impl.cc -+++ b/chrome/browser/dips/dips_service_impl.cc -@@ -26,6 +26,7 @@ - #include "base/time/time.h" - #include "base/types/pass_key.h" - #include "chrome/browser/chrome_content_browser_client.h" -+#include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h" - #include "chrome/browser/dips/chrome_dips_delegate.h" - #include "chrome/browser/dips/dips_redirect_info.h" - #include "chrome/browser/dips/dips_service_factory.h" -@@ -195,7 +196,7 @@ class StateClearer : public content::BrowsingDataRemover::Observer { - } - remover->RemoveWithFilterAndReply( - base::Time::Min(), base::Time::Max(), -- remove_mask | -+ remove_mask | chrome_browsing_data_remover::DATA_TYPE_SKIP_SSL_HOST_STATE | - content::BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS, - content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | - content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, 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 -@@ -540,6 +540,23 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -535,6 +535,23 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { (*s_allowlist)[browsing_data::prefs::kLastClearBrowsingDataTab] = settings_api::PrefType::kNumber; @@ -424,7 +404,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 -@@ -1428,6 +1428,19 @@ void ProfileManager::DoFinalInit(ProfileInfo* profile_info, +@@ -1427,6 +1427,19 @@ void ProfileManager::DoFinalInit(ProfileInfo* profile_info, } } @@ -444,7 +424,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) { +@@ -2109,7 +2122,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()) { @@ -468,7 +448,7 @@ diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html --- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html +++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html -@@ -318,6 +318,50 @@ +@@ -297,6 +297,50 @@ disabled="[[clearingInProgress_]]" no-set-pref> @@ -522,7 +502,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 -@@ -297,6 +297,7 @@ export class SettingsClearBrowsingDataDialogElement extends +@@ -239,6 +239,7 @@ export class SettingsClearBrowsingDataDialogElement extends value: () => [loadTimeData.getString('basicPageTitle'), loadTimeData.getString('advancedPageTitle'), @@ -530,7 +510,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ ], }, -@@ -423,6 +424,7 @@ export class SettingsClearBrowsingDataDialogElement extends +@@ -363,6 +364,7 @@ export class SettingsClearBrowsingDataDialogElement extends } this.clearButtonDisabled_ = this.getSelectedDataTypes_(page as HTMLElement).length === 0; @@ -541,7 +521,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 -@@ -1454,7 +1454,7 @@ For example, some websites may respond to this request by showing you ads that a +@@ -1462,7 +1462,7 @@ For example, some websites may respond to this request by showing you ads that a Delete browsing data @@ -550,7 +530,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Deleted Chrome data -@@ -1615,6 +1615,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1623,6 +1623,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>. @@ -563,7 +543,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro 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 -@@ -1839,6 +1839,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1895,6 +1895,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"clearedData", IDS_SETTINGS_CLEARED_DATA}, {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA}, {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, @@ -574,7 +554,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide diff --git a/components/browsing_data/content/browsing_data_helper.cc b/components/browsing_data/content/browsing_data_helper.cc --- a/components/browsing_data/content/browsing_data_helper.cc +++ b/components/browsing_data/content/browsing_data_helper.cc -@@ -40,8 +40,13 @@ bool WebsiteSettingsFilterAdapter( +@@ -39,8 +39,13 @@ bool WebsiteSettingsFilterAdapter( // this filter is used for is DURABLE_STORAGE, which also only uses // origin-scoped patterns. Such patterns can be directly translated to a GURL. GURL url(primary_pattern.ToString()); @@ -649,7 +629,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 -@@ -347,6 +347,37 @@ bool GetDeletionPreferenceFromDataType( +@@ -346,6 +346,37 @@ bool GetDeletionPreferenceFromDataType( BrowsingDataType data_type, ClearBrowsingDataTab clear_browsing_data_tab, std::string* out_pref) { @@ -702,7 +682,7 @@ diff --git a/components/browsing_data/core/clear_browsing_data_tab.h b/component diff --git a/components/browsing_data/core/pref_names.cc b/components/browsing_data/core/pref_names.cc --- a/components/browsing_data/core/pref_names.cc +++ b/components/browsing_data/core/pref_names.cc -@@ -65,6 +65,23 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -63,6 +63,23 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterIntegerPref( kClearBrowsingDataHistoryNoticeShownTimes, 0); @@ -749,7 +729,7 @@ diff --git a/components/browsing_data/core/pref_names.h b/components/browsing_da 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 -@@ -777,6 +777,7 @@ void TemplateURLService::RemoveAutoGeneratedForUrlsBetween( +@@ -778,6 +778,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 && @@ -757,10 +737,22 @@ diff --git a/components/search_engines/template_url_service.cc b/components/sear turl->starter_pack_id() == 0 && !MatchesDefaultSearchProvider(turl) && (url_filter.is_null() || url_filter.Run(turl->GenerateSearchURL(search_terms_data())))) { +diff --git a/content/browser/dips/dips_service_impl.cc b/content/browser/dips/dips_service_impl.cc +--- a/content/browser/dips/dips_service_impl.cc ++++ b/content/browser/dips/dips_service_impl.cc +@@ -198,7 +198,7 @@ class StateClearer : public content::BrowsingDataRemover::Observer { + remove_mask &= ~content::BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX; + remover->RemoveWithFilterAndReply( + base::Time::Min(), base::Time::Max(), +- remove_mask | ++ remove_mask | chrome_browsing_data_remover::DATA_TYPE_SKIP_SSL_HOST_STATE | + content::BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS, + content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | + content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB, 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 -@@ -1499,6 +1499,7 @@ void StoragePartitionImpl::Initialize( +@@ -1529,6 +1529,7 @@ void StoragePartitionImpl::Initialize( .AppendASCII("Code Cache"); } DCHECK_GE(settings.size_in_bytes(), 0); diff --git a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch index 639dfc23..811a2493 100644 --- a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch +++ b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch @@ -10,7 +10,6 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- .../AwContextMenuItemDelegate.java | 4 +++ chrome/android/java/res/values/ids.xml | 1 + - .../settings/AccessibilitySettings.java | 12 +++++++ .../ChromeAccessibilitySettingsDelegate.java | 18 ++++++++++ .../contextmenu/ChromeContextMenuItem.java | 5 ++- .../ChromeContextMenuPopulator.java | 5 +++ @@ -19,6 +18,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../browser/flags/ChromeFeatureList.java | 5 +++ .../strings/android_chrome_strings.grd | 9 +++++ .../res/xml/accessibility_preferences.xml | 5 +++ + .../accessibility/AccessibilitySettings.java | 12 +++++++ .../AccessibilitySettingsDelegate.java | 2 ++ .../contextmenu/ContextMenuItemDelegate.java | 3 ++ ...Add-setting-to-invert-tap-and-long-tap.inc | 8 +++++ @@ -67,46 +67,10 @@ diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/va -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -@@ -59,6 +59,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - private BooleanPreferenceDelegate mMoveTopToolbarToBottomDelegate; - private BooleanPreferenceDelegate mDisableToolbarSwipeUpDelegate; - -+ static final String PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS = "always_show_contextmenu_on_links"; -+ private BooleanPreferenceDelegate mShowAlwaysContextMenuOnLinksDelegate; -+ - private PageZoomPreference mPageZoomDefaultZoomPref; - private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; - private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -155,6 +158,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - mDisableToolbarSwipeUpPref.setChecked(mDisableToolbarSwipeUpDelegate.isEnabled()); - mDisableToolbarSwipeUpPref.setOnPreferenceChangeListener(this); - -+ ChromeSwitchPreference mShowAlwaysContextMenuOnLinksPref = -+ (ChromeSwitchPreference) findPreference(PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS); -+ mShowAlwaysContextMenuOnLinksDelegate = mDelegate.getShowAlwaysContextMenuOnLinksDelegate(); -+ mShowAlwaysContextMenuOnLinksPref.setChecked(mShowAlwaysContextMenuOnLinksDelegate.isEnabled()); -+ mShowAlwaysContextMenuOnLinksPref.setOnPreferenceChangeListener(this); -+ - Preference captions = findPreference(PREF_CAPTIONS); - captions.setOnPreferenceClickListener( - preference -> { -@@ -233,6 +242,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - mDelegate.requestRestart(getActivity()); - } else if (PREF_DISABLE_TOOLBAR_SWIPE_UP.equals(preference.getKey())) { - mDisableToolbarSwipeUpDelegate.setEnabled((Boolean) newValue); -+ } else if (PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS.equals(preference.getKey())) { -+ mShowAlwaysContextMenuOnLinksDelegate.setEnabled((Boolean) newValue); -+ mDelegate.requestRestart(getActivity()); - } else if (PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT.equals(preference.getKey())) { - // TODO(mschillaci): Implement the override behavior for OS level. - } else if (OmniboxFeatures.KEY_JUMP_START_OMNIBOX.equals(preference.getKey())) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -137,6 +137,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -162,6 +162,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting mSnackbarManagerSupplier.get().showSnackbar(mSnackbar); } @@ -164,7 +128,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java -@@ -275,6 +275,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -337,6 +337,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { if (mParams.isAnchor()) { ModelList linkGroup = new ModelList(); @@ -174,7 +138,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl()) && UrlUtilities.isAcceptedScheme(mParams.getUrl())) { -@@ -657,6 +660,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -725,6 +728,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { getProfile(), false); }); @@ -186,7 +150,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -@@ -326,6 +326,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { +@@ -301,6 +301,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { mTab.loadUrl(loadUrlParams); } @@ -204,18 +168,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -325,6 +325,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -340,6 +340,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kTabDragDropAndroid, &kToolbarPhoneCleanup, &kTabGroupCreationDialogAndroid, + &blink::features::kShowAlwaysContextMenuOnLinks, - &kTabletToolbarReordering, &kTabResumptionModuleAndroid, &kTabStateFlatBuffer, + &kTabStripGroupCollapseAndroid, diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -390,6 +390,8 @@ public abstract class ChromeFeatureList { +@@ -407,6 +407,8 @@ public abstract class ChromeFeatureList { "DisableToolbarSwipeUp"; public static final String MOVE_TOP_TOOLBAR_TO_BOTTOM = "MoveTopToolbarToBottom"; @@ -224,7 +188,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -695,6 +697,8 @@ public abstract class ChromeFeatureList { +@@ -761,6 +763,8 @@ public abstract class ChromeFeatureList { newCachedFlag(DISABLE_TOOLBAR_SWIPE_UP, false); public static final CachedFlag sMoveTopToolbarToBottom = newCachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false); @@ -233,7 +197,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, false); -@@ -848,6 +852,7 @@ public abstract class ChromeFeatureList { +@@ -941,6 +945,7 @@ public abstract class ChromeFeatureList { sTabWindowManagerReportIndicesMismatch, sTraceBinderIpc, sUseChimeAndroidSdk, @@ -282,18 +246,54 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil { +@@ -213,6 +222,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + mDelegate.requestRestart(getActivity()); + } else if (PREF_DISABLE_TOOLBAR_SWIPE_UP.equals(preference.getKey())) { + mDisableToolbarSwipeUpDelegate.setEnabled((Boolean) newValue); ++ } else if (PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS.equals(preference.getKey())) { ++ mShowAlwaysContextMenuOnLinksDelegate.setEnabled((Boolean) newValue); ++ mDelegate.requestRestart(getActivity()); + } else if (PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT.equals(preference.getKey())) { + // TODO(mschillaci): Implement the override behavior for OS level. + } else if (OmniboxFeatures.KEY_JUMP_START_OMNIBOX.equals(preference.getKey())) { diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -38,6 +38,8 @@ public interface AccessibilitySettingsDelegate { +@@ -51,6 +51,8 @@ public interface AccessibilitySettingsDelegate { BooleanPreferenceDelegate getMoveTopToolbarToBottomDelegate(); BooleanPreferenceDelegate getDisableToolbarSwipeUpDelegate(); + BooleanPreferenceDelegate getShowAlwaysContextMenuOnLinksDelegate(); + - /** @return The BrowserContextHandle that should be used to read and update settings. */ - BrowserContextHandle getBrowserContextHandle(); - + /** + * @return The BrowserContextHandle that should be used to read and update settings. + */ diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java @@ -370,7 +370,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third LocalDOMWindow* window = GetDocument().domWindow(); if (!window) { return; -@@ -568,6 +580,15 @@ void HTMLAnchorElementBase::NavigateToHyperlink( +@@ -582,6 +594,15 @@ void HTMLAnchorElementBase::NavigateToHyperlink( request.GetReferrerPolicy())); } @@ -386,7 +386,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third Frame* target_frame = frame->Tree().FindOrCreateFrameForNavigation(frame_request, target).frame; -@@ -622,7 +643,7 @@ AtomicString HTMLAnchorElementBase::interestAction() const { +@@ -636,7 +657,7 @@ AtomicString HTMLAnchorElementBase::interestAction() const { return g_empty_atom; } @@ -395,7 +395,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third event.SetDefaultHandled(); LocalDOMWindow* window = GetDocument().domWindow(); -@@ -718,13 +739,12 @@ void HTMLAnchorElementBase::HandleClick(MouseEvent& event) { +@@ -732,13 +753,12 @@ void HTMLAnchorElementBase::HandleClick(MouseEvent& event) { return; } @@ -413,7 +413,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third // We distinguish single/double click with some modifiers. // See the comment of `EventHandler.delayed_navigation_task_handle_`. auto task_handle = PostDelayedCancellableTask( -@@ -734,7 +754,9 @@ void HTMLAnchorElementBase::HandleClick(MouseEvent& event) { +@@ -748,7 +768,9 @@ void HTMLAnchorElementBase::HandleClick(MouseEvent& event) { frame->GetEventHandler().SetDelayedNavigationTaskHandle( std::move(task_handle)); } else { @@ -504,7 +504,7 @@ diff --git a/third_party/blink/renderer/core/html/html_image_element.h b/third_p diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc --- a/third_party/blink/renderer/core/page/context_menu_controller.cc +++ b/third_party/blink/renderer/core/page/context_menu_controller.cc -@@ -190,14 +190,16 @@ void ContextMenuController::DocumentDetached(Document* document) { +@@ -196,14 +196,16 @@ void ContextMenuController::DocumentDetached(Document* document) { } } @@ -524,7 +524,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t mouse_event->SetDefaultHandled(); } -@@ -415,7 +417,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( +@@ -427,7 +429,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( bool ContextMenuController::ShowContextMenu(LocalFrame* frame, const PhysicalOffset& point, WebMenuSourceType source_type, @@ -534,7 +534,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t // Displaying the context menu in this function is a big hack as we don't // have context, i.e. whether this is being invoked via a script or in // response to user input (Mouse event WM_RBUTTONDOWN, -@@ -438,6 +441,16 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, +@@ -450,6 +453,16 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, if (!result.InnerNodeOrImageMapImage()) return false; @@ -573,7 +573,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t diff --git a/third_party/blink/renderer/core/page/context_menu_controller.h b/third_party/blink/renderer/core/page/context_menu_controller.h --- a/third_party/blink/renderer/core/page/context_menu_controller.h +++ b/third_party/blink/renderer/core/page/context_menu_controller.h -@@ -57,7 +57,7 @@ class CORE_EXPORT ContextMenuController final +@@ -58,7 +58,7 @@ class CORE_EXPORT ContextMenuController final void DocumentDetached(Document*); @@ -582,7 +582,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.h b/th void ShowContextMenuAtPoint(LocalFrame*, float x, float y, -@@ -123,7 +123,8 @@ class CORE_EXPORT ContextMenuController final +@@ -125,7 +125,8 @@ class CORE_EXPORT ContextMenuController final bool ShowContextMenu(LocalFrame*, const PhysicalOffset&, WebMenuSourceType, diff --git a/build/patches/Add-webRTC-site-settings.patch b/build/patches/Add-webRTC-site-settings.patch index ec5144bd..7bf99d5d 100644 --- a/build/patches/Add-webRTC-site-settings.patch +++ b/build/patches/Add-webRTC-site-settings.patch @@ -187,7 +187,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc -@@ -40,6 +40,7 @@ +@@ -41,6 +41,7 @@ #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" @@ -195,22 +195,22 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h" #include "third_party/blink/public/web/web_document.h" -@@ -879,6 +880,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( +@@ -936,6 +937,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( + // |request_multiple_routes|. Whether local IP addresses could be + // collected depends on if mic/camera permission is granted for this // origin. - WebRTCIPHandlingPolicy policy = - GetWebRTCIPHandlingPolicy(webrtc_ip_handling_policy); + blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient(); + if (settings && settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) { + policy = kDefault; + } + - switch (policy) { + switch (webrtc_ip_handling_policy) { // TODO(guoweis): specify the flag of disabling local candidate // collection when webrtc is updated. diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc -@@ -12,6 +12,8 @@ +@@ -13,6 +13,8 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" @@ -219,7 +219,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver. #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h" -@@ -283,6 +285,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, +@@ -284,6 +286,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; @@ -237,7 +237,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver. diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc -@@ -17,6 +17,8 @@ +@@ -18,6 +18,8 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" @@ -246,7 +246,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoding_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" -@@ -1030,6 +1032,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, +@@ -1031,6 +1033,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; diff --git a/build/patches/Allow-building-without-enable_reporting.patch b/build/patches/Allow-building-without-enable_reporting.patch index 469a6951..cb919d06 100644 --- a/build/patches/Allow-building-without-enable_reporting.patch +++ b/build/patches/Allow-building-without-enable_reporting.patch @@ -13,9 +13,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../web_package/signed_exchange_reporter.cc | 2 ++ ...content_switch_dependent_feature_overrides.cc | 1 + .../Allow-building-without-enable_reporting.inc | 2 ++ - net/base/features.cc | 1 + + net/reporting/reporting_header_parser.cc | 1 + net/reporting/reporting_service.cc | 6 ++++++ services/network/network_context.h | 6 +++--- + services/network/public/cpp/parsed_headers.cc | 1 + services/network/public/mojom/BUILD.gn | 1 - .../network/public/mojom/network_context.mojom | 3 +++ .../core/frame/csp/content_security_policy.cc | 3 +++ @@ -24,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/core/frame/reporting_context.cc | 9 +++++++++ .../renderer/core/frame/reporting_context.h | 7 +++++-- .../renderer/core/frame/reporting_observer.cc | 3 +-- - 20 files changed, 60 insertions(+), 26 deletions(-) + 21 files changed, 61 insertions(+), 26 deletions(-) create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chrome_report_sender.cc @@ -41,15 +42,15 @@ diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chr diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc -@@ -1464,6 +1464,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { +@@ -1470,6 +1470,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { } } +#if BUILDFLAG(ENABLE_REPORTING) std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { std::vector urls; - frame_host->ForEachRenderFrameHostWithAction( -@@ -1477,6 +1478,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { + frame_host->ForEachRenderFrameHostImplWithAction( +@@ -1483,6 +1484,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { }); return urls; } @@ -106,7 +107,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse #include "content/browser/service_worker/service_worker_host.h" #include "content/browser/worker_host/dedicated_worker_host.h" #include "content/browser/worker_host/shared_worker_host.h" -@@ -175,12 +176,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy { +@@ -190,12 +191,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy { const std::string& group, const std::string& type, base::Value::Dict body) { @@ -124,7 +125,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse 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 -@@ -15172,12 +15172,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( +@@ -15257,12 +15257,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( } } } @@ -251,17 +252,17 @@ new file mode 100644 @@ -0,0 +1,2 @@ +SET_CROMITE_FEATURE_DISABLED(kNetworkErrorLogging); +SET_CROMITE_FEATURE_DISABLED(kReporting); -diff --git a/net/base/features.cc b/net/base/features.cc ---- a/net/base/features.cc -+++ b/net/base/features.cc -@@ -207,6 +207,7 @@ extern const base::FeatureParam kTimeoutTcpConnectAttemptMax( - base::Seconds(30)); - - #if BUILDFLAG(ENABLE_REPORTING) -+#error Attempting to build with enable_reporting - BASE_FEATURE(kDocumentReporting, - "DocumentReporting", - base::FEATURE_ENABLED_BY_DEFAULT); +diff --git a/net/reporting/reporting_header_parser.cc b/net/reporting/reporting_header_parser.cc +--- a/net/reporting/reporting_header_parser.cc ++++ b/net/reporting/reporting_header_parser.cc +@@ -332,6 +332,7 @@ void ReportingHeaderParser::ProcessParsedReportingEndpointsHeader( + const NetworkAnonymizationKey& network_anonymization_key, + const url::Origin& origin, + base::flat_map header) { ++ CHECK(false); + DCHECK(GURL::SchemeIsCryptographic(origin.scheme())); + DCHECK(!reporting_source.is_empty()); + DCHECK(network_anonymization_key.IsEmpty() || diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc --- a/net/reporting/reporting_service.cc +++ b/net/reporting/reporting_service.cc @@ -299,10 +300,21 @@ diff --git a/services/network/network_context.h b/services/network/network_conte void AddDomainReliabilityContextForTesting( const url::Origin& origin, const GURL& upload_url, +diff --git a/services/network/public/cpp/parsed_headers.cc b/services/network/public/cpp/parsed_headers.cc +--- a/services/network/public/cpp/parsed_headers.cc ++++ b/services/network/public/cpp/parsed_headers.cc +@@ -115,6 +115,7 @@ mojom::ParsedHeadersPtr PopulateParsedHeaders( + } + + #if BUILDFLAG(ENABLE_REPORTING) ++#error Attempting to build with enable_reporting + if (std::optional reporting_endpoints = + headers->GetNormalizedHeader("Reporting-Endpoints")) { + parsed_headers->reporting_endpoints = diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn --- a/services/network/public/mojom/BUILD.gn +++ b/services/network/public/mojom/BUILD.gn -@@ -1560,7 +1560,6 @@ mojom("mojom") { +@@ -1557,7 +1557,6 @@ mojom("mojom") { export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" if (enable_reporting) { @@ -313,7 +325,7 @@ diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mo diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1181,6 +1181,7 @@ interface NetworkContext { +@@ -1208,6 +1208,7 @@ interface NetworkContext { // provided `network_anonymization_key`. // // Spec: https://w3c.github.io/reporting/#concept-reports @@ -321,15 +333,15 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw QueueReport(string type, string group, url.mojom.Url url, -@@ -1188,6 +1189,7 @@ interface NetworkContext { +@@ -1215,6 +1216,7 @@ interface NetworkContext { NetworkAnonymizationKey network_anonymization_key, mojo_base.mojom.DictionaryValue body); + [EnableIf=enable_reporting] QueueEnterpriseReport(string type, - string group, - url.mojom.Url url, -@@ -1198,6 +1200,7 @@ interface NetworkContext { + string group, + url.mojom.Url url, +@@ -1225,6 +1227,7 @@ interface NetworkContext { // Note that this queued report will never be delivered if no reporting // endpoint matching is registered for with the provided // `network_anonymization_key`. @@ -340,15 +352,15 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc --- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc -@@ -29,6 +29,7 @@ - #include +@@ -30,6 +30,7 @@ + #include #include +#include "net/net_buildflags.h" #include "base/containers/contains.h" #include "base/debug/dump_without_crashing.h" #include "base/ranges/algorithm.h" -@@ -1243,6 +1244,7 @@ void ContentSecurityPolicy::ReportViolation( +@@ -1284,6 +1285,7 @@ void ContentSecurityPolicy::ReportViolation( return; } @@ -356,7 +368,7 @@ diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.c PostViolationReport(violation_data, context_frame, report_endpoints, use_reporting_api); -@@ -1250,6 +1252,7 @@ void ContentSecurityPolicy::ReportViolation( +@@ -1291,6 +1293,7 @@ void ContentSecurityPolicy::ReportViolation( // `context_frame` (i.e. we're not processing 'frame-ancestors'). if (delegate_ && !context_frame) delegate_->DispatchViolationEvent(*violation_data, element); @@ -375,7 +387,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ #include "services/network/public/cpp/features.h" #include "services/network/public/mojom/content_security_policy.mojom-blink.h" #include "services/network/public/mojom/source_location.mojom-blink.h" -@@ -2789,9 +2790,11 @@ DocumentResourceCoordinator* LocalFrame::GetDocumentResourceCoordinator() { +@@ -2791,9 +2792,11 @@ DocumentResourceCoordinator* LocalFrame::GetDocumentResourceCoordinator() { return CHECK_DEREF(GetDocument()).GetResourceCoordinator(); } @@ -398,7 +410,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/metrics/public/cpp/ukm_source_id.h" -@@ -659,8 +660,9 @@ class CORE_EXPORT LocalFrame final +@@ -660,8 +661,9 @@ class CORE_EXPORT LocalFrame final void FinishedScrollSequence(); SmoothScrollSequencer* GetSmoothScrollSequencer() const; @@ -420,7 +432,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ #include "third_party/blink/public/platform/browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" -@@ -53,7 +54,9 @@ const char ReportingContext::kSupplementName[] = "ReportingContext"; +@@ -58,7 +59,9 @@ const char ReportingContext::kSupplementName[] = "ReportingContext"; ReportingContext::ReportingContext(ExecutionContext& context) : Supplement(context), execution_context_(context), @@ -430,7 +442,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ receiver_(this, &context) {} // static -@@ -121,7 +124,9 @@ void ReportingContext::Trace(Visitor* visitor) const { +@@ -126,7 +129,9 @@ void ReportingContext::Trace(Visitor* visitor) const { visitor->Trace(observers_); visitor->Trace(report_buffer_); visitor->Trace(execution_context_); @@ -440,7 +452,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ visitor->Trace(receiver_); Supplement::Trace(visitor); } -@@ -143,6 +148,7 @@ void ReportingContext::CountReport(Report* report) { +@@ -148,6 +153,7 @@ void ReportingContext::CountReport(Report* report) { UseCounter::Count(execution_context_, feature); } @@ -448,23 +460,23 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ const HeapMojoRemote& ReportingContext::GetReportingService() const { if (!reporting_service_.is_bound()) { -@@ -152,6 +158,7 @@ ReportingContext::GetReportingService() const { +@@ -157,6 +163,7 @@ ReportingContext::GetReportingService() const { } return reporting_service_; } +#endif void ReportingContext::NotifyInternal(Report* report) { - // Buffer the report. -@@ -174,6 +181,7 @@ void ReportingContext::NotifyInternal(Report* report) { + if (!ShouldReportBeVisibleToObservers(report)) { +@@ -183,6 +190,7 @@ void ReportingContext::NotifyInternal(Report* report) { void ReportingContext::SendToReportingAPI(Report* report, const String& endpoint) const { +#if BUILDFLAG(ENABLE_REPORTING) const String& type = report->type(); - if (!(type == ReportType::kCSPViolation || type == ReportType::kDeprecation || - type == ReportType::kPermissionsPolicyViolation || -@@ -230,6 +238,7 @@ void ReportingContext::SendToReportingAPI(Report* report, + if (!(type == ReportType::kCSPViolation || type == ReportType::kCSPHash || + type == ReportType::kDeprecation || +@@ -246,6 +254,7 @@ void ReportingContext::SendToReportingAPI(Report* report, url, endpoint, body->featureId(), body->disposition(), body->message(), body->sourceFile(), line_number, column_number); } diff --git a/build/patches/Disable-all-promo-dialogs.patch b/build/patches/Disable-all-promo-dialogs.patch index aff148b0..3da7a8e3 100644 --- a/build/patches/Disable-all-promo-dialogs.patch +++ b/build/patches/Disable-all-promo-dialogs.patch @@ -4,20 +4,20 @@ Subject: Disable all promo dialogs License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java | 1 + - chrome/browser/ui/browser_ui_prefs.cc | 2 +- - .../views/profiles/profile_picker_feature_promo_controller.cc | 1 + - .../user_education/impl/browser_feature_promo_controller_20.cc | 1 + - .../chrome/browser/user_education/UserEducationHelper.java | 1 + - .../common/feature_promo/feature_promo_registry.cc | 2 ++ - .../common/feature_promo/impl/feature_promo_controller_20.cc | 1 + - .../common/feature_promo/impl/feature_promo_controller_25.cc | 1 + - 8 files changed, 9 insertions(+), 1 deletion(-) + .../chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java | 1 + + chrome/browser/ui/browser_ui_prefs.cc | 2 +- + .../views/profiles/profile_picker_feature_promo_controller.cc | 1 + + .../user_education/impl/browser_feature_promo_controller_20.cc | 1 + + .../chrome/browser/user_education/UserEducationHelper.java | 1 + + .../common/feature_promo/feature_promo_registry.cc | 2 ++ + .../common/feature_promo/impl/feature_promo_controller_20.cc | 1 + + .../common/feature_promo/impl/feature_promo_controller_25.cc | 3 ++- + 8 files changed, 10 insertions(+), 2 deletions(-) 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 -@@ -1379,6 +1379,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -1465,6 +1465,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { } private boolean maybeShowPromo(Profile profile) { @@ -28,7 +28,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -148,7 +148,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -151,7 +151,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kEnterpriseHardwarePlatformAPIEnabled, false); @@ -57,8 +57,8 @@ diff --git a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_c ui::TrackedElement* anchor_element) const { + if ((true)) return false; // Trying to show an IPH while the browser is closing can cause problems; - // see crbug.com/346461762 for an example. - if (browser_view_->browser()->IsBrowserClosing()) { + // see crbug.com/346461762 for an example. This can also crash unit_tests that + // use a BrowserWindow but not a browser, so also check if the browser view's diff --git a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java --- a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java +++ b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java @@ -92,7 +92,7 @@ diff --git a/components/user_education/common/feature_promo/feature_promo_regist diff --git a/components/user_education/common/feature_promo/impl/feature_promo_controller_20.cc b/components/user_education/common/feature_promo/impl/feature_promo_controller_20.cc --- a/components/user_education/common/feature_promo/impl/feature_promo_controller_20.cc +++ b/components/user_education/common/feature_promo/impl/feature_promo_controller_20.cc -@@ -89,6 +89,7 @@ FeaturePromoResult FeaturePromoController20::CanShowPromoCommon( +@@ -99,6 +99,7 @@ FeaturePromoResult FeaturePromoController20::CanShowPromoCommon( const FeaturePromoParams& params, ShowSource source, CanShowPromoOutputs* outputs) const { @@ -103,12 +103,21 @@ diff --git a/components/user_education/common/feature_promo/impl/feature_promo_c diff --git a/components/user_education/common/feature_promo/impl/feature_promo_controller_25.cc b/components/user_education/common/feature_promo/impl/feature_promo_controller_25.cc --- a/components/user_education/common/feature_promo/impl/feature_promo_controller_25.cc +++ b/components/user_education/common/feature_promo/impl/feature_promo_controller_25.cc -@@ -48,6 +48,7 @@ FeaturePromoResult FeaturePromoController25::CanShowPromoCommon( - const FeaturePromoParams& params, - ShowSource source, - CanShowPromoOutputs* outputs) const { -+ if ((true)) return FeaturePromoResult::kBlockedByContext; - return FeaturePromoResult::kError; - } +@@ -172,6 +172,7 @@ FeaturePromoController25::~FeaturePromoController25() { + FeaturePromoResult FeaturePromoController25::CanShowPromo( + const FeaturePromoParams& params) const { ++ if ((true)) return FeaturePromoResult::kBlockedByContext; + auto* const spec = registry()->GetParamsForFeature(*params.feature); + return spec ? private_->queues.CanShow(*spec, params) + : FeaturePromoResult::kError; +@@ -184,7 +185,7 @@ void FeaturePromoController25::MaybeShowStartupPromo( + + void FeaturePromoController25::MaybeShowPromo(FeaturePromoParams params) { + auto* const spec = registry()->GetParamsForFeature(*params.feature); +- if (!spec) { ++ if (((true)) || !spec) { + PostShowPromoResult(std::move(params.show_promo_result_callback), + FeaturePromoResult::kError); + return; -- diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index b44d1679..70978260 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -22,18 +22,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../tab_management/TabGroupUiProperties.java | 5 + .../tab_management/TabGroupUiToolbarView.java | 17 ++ .../tab_management/TabGroupUiViewBinder.java | 3 + - .../tab_management/TabListCoordinator.java | 162 +++++++++++++++++- + .../tab_management/TabListCoordinator.java | 161 +++++++++++++++++- .../TabListEmptyCoordinator.java | 17 +- .../browser/feed/FeedSurfaceCoordinator.java | 4 + - .../settings/AccessibilitySettings.java | 26 +++ .../ChromeAccessibilitySettingsDelegate.java | 70 ++++++++ .../chrome/browser/app/ChromeActivity.java | 3 + .../compositor/CompositorViewHolder.java | 7 + - .../layouts/LayoutManagerChrome.java | 19 +- + .../layouts/LayoutManagerChrome.java | 19 ++- .../layouts/LayoutManagerChromeTablet.java | 4 +- .../layouts/ToolbarSwipeLayout.java | 14 +- .../overlays/strip/ScrollDelegate.java | 2 +- - .../strip/StripLayoutHelperManager.java | 38 +++- + .../strip/StripLayoutHelperManager.java | 38 ++++- .../scene_layer/StaticTabSceneLayer.java | 7 +- .../scene_layer/TabListSceneLayer.java | 8 + .../scene_layer/TabStripSceneLayer.java | 20 ++- @@ -83,23 +82,24 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bottom/BottomControlsMediator.java | 20 ++- .../bottom/BottomControlsProperties.java | 6 +- .../bottom/BottomControlsViewBinder.java | 2 + - .../bottom/ScrollingBottomViewSceneLayer.java | 19 +- + .../bottom/ScrollingBottomViewSceneLayer.java | 19 ++- .../toolbar/top/ToolbarControlContainer.java | 9 + .../top/TopToolbarOverlayCoordinator.java | 10 ++ .../top/TopToolbarOverlayProperties.java | 8 +- .../toolbar/top/TopToolbarSceneLayer.java | 10 +- .../res/xml/accessibility_preferences.xml | 8 + - .../AccessibilitySettingsDelegate.java | 7 + + .../accessibility/AccessibilitySettings.java | 26 +++ + .../AccessibilitySettingsDelegate.java | 8 + .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ - 79 files changed, 1012 insertions(+), 78 deletions(-) + 79 files changed, 1013 insertions(+), 77 deletions(-) create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc diff --git a/cc/base/features.cc b/cc/base/features.cc --- a/cc/base/features.cc +++ b/cc/base/features.cc -@@ -45,6 +45,14 @@ BASE_FEATURE(kSynchronizedScrolling, +@@ -28,6 +28,14 @@ BASE_FEATURE(kSynchronizedScrolling, base::FEATURE_ENABLED_BY_DEFAULT); #endif @@ -117,9 +117,9 @@ diff --git a/cc/base/features.cc b/cc/base/features.cc diff --git a/cc/base/features.h b/cc/base/features.h --- a/cc/base/features.h +++ b/cc/base/features.h -@@ -18,6 +18,8 @@ CC_BASE_EXPORT BASE_DECLARE_FEATURE(kAlignSurfaceLayerImplToPixelGrid); - CC_BASE_EXPORT BASE_DECLARE_FEATURE(kAnimatedImageResume); - CC_BASE_EXPORT extern bool IsImpulseScrollAnimationEnabled(); +@@ -16,6 +16,8 @@ namespace features { + + CC_BASE_EXPORT BASE_DECLARE_FEATURE(kAlignSurfaceLayerImplToPixelGrid); CC_BASE_EXPORT BASE_DECLARE_FEATURE(kSynchronizedScrolling); +CC_BASE_EXPORT BASE_DECLARE_FEATURE(kMoveTopToolbarToBottom); +CC_BASE_EXPORT BASE_DECLARE_FEATURE(kDisableToolbarSwipeUp); @@ -137,7 +137,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont namespace cc { namespace { -@@ -526,6 +527,11 @@ gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( +@@ -539,6 +540,11 @@ gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( // content. If the top controls have no height, the content should scroll // immediately. gfx::Vector2dF applied_delta(0.f, old_top_offset - ContentTopOffset()); @@ -152,7 +152,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -4670,6 +4670,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -4776,6 +4776,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -165,7 +165,7 @@ diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -@@ -51,6 +51,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; +@@ -50,6 +50,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -173,7 +173,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.util.List; -@@ -180,7 +181,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -174,7 +175,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T public void initializeWithNative( Activity activity, BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, @@ -183,12 +183,12 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser var currentTabGroupModelFilterSupplier = mTabModelSelector .getTabGroupModelFilterProvider() -@@ -260,7 +262,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T - mTabGridDialogControllerSupplier, +@@ -257,7 +259,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T mOmniboxFocusStateSupplier, sharedImageTilesCoordinator, -- mThemeColorProvider); -+ mThemeColorProvider, + mThemeColorProvider, +- mBackgroundColorSupplier); ++ mBackgroundColorSupplier, + topUiThemeColorProvider, tabSupplier); Profile profile = mTabModelSelector.getModel(false).getProfile(); @@ -196,9 +196,9 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -@@ -59,6 +59,12 @@ import org.chromium.url.GURL; - +@@ -65,6 +65,12 @@ import org.chromium.url.GURL; import java.util.List; + import java.util.Objects; +import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +import org.chromium.chrome.browser.tab.CurrentTabObserver; @@ -209,9 +209,9 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** A mediator for the TabGroupUi. Responsible for managing the internal state of the component. */ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, TintObserver { -@@ -97,6 +103,11 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, - private final ObservableSupplierImpl mHandleBackPressChangedSupplier; +@@ -104,6 +110,11 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, private final ThemeColorProvider mThemeColorProvider; + private final ObservableSupplierImpl mBackgroundColorSupplier; + private final TopUiThemeColorProvider mTopUiThemeColorProvider; + @@ -221,19 +221,18 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser // These should only be used when regular (non-incognito) tabs are set in the model. private final @Nullable SharedImageTilesCoordinator mSharedImageTilesCoordinator; private final @Nullable TransitiveSharedGroupObserver mTransitiveSharedGroupObserver; -@@ -126,7 +137,9 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, - dialogControllerSupplier, +@@ -134,7 +145,8 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, ObservableSupplier omniboxFocusStateSupplier, SharedImageTilesCoordinator sharedImageTilesCoordinator, -- ThemeColorProvider themeColorProvider) { -+ ThemeColorProvider themeColorProvider, + ThemeColorProvider themeColorProvider, +- ObservableSupplierImpl backgroundColorSupplier) { ++ ObservableSupplierImpl backgroundColorSupplier, + TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier tabSupplier) { -+ mTopUiThemeColorProvider = topUiThemeColorProvider; mResetHandler = resetHandler; mModel = model; mTabModelSelector = tabModelSelector; -@@ -170,11 +183,30 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, - mIsShowingOverViewMode = true; +@@ -182,11 +194,30 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, + mIsShowingHub = true; } + // Keep an observer attached to the visible tab (and only the visible tab) to update @@ -260,27 +259,28 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser @Override public void didSelectTab(Tab tab, @TabSelectionType int type, int lastId) { + updateThemeColor(tab); - if (getTabsToShowForId(lastId).contains(tab)) { - return; - } -@@ -234,6 +266,7 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, - return; - } - resetTabStripWithRelatedTabsForId(currentTab.getId()); + resetTabStrip(); + } + +@@ -211,6 +242,8 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, + @Override + public void restoreCompleted() { + resetTabStrip(); ++ Tab currentTab = mTabModelSelector.getCurrentTab(); + updateThemeColor(currentTab); } @Override -@@ -351,6 +384,8 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, - resetTabStripWithRelatedTabsForId(tab.getId()); - } +@@ -309,6 +342,8 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, + mModel.set(TabGroupUiProperties.IS_MAIN_CONTENT_VISIBLE, true); + resetTabStrip(); + mTabObserver.triggerWithCurrentTab(); + mHandleBackPressChangedSupplier = handleBackPressChangedSupplier; if (mTabGridDialogControllerSupplier != null) { mTabGridDialogControllerSupplier.onAvailable( -@@ -379,6 +414,18 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, +@@ -338,6 +373,18 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, mModel.set(TabGroupUiProperties.TINT, mThemeColorProvider.getTint()); } @@ -299,7 +299,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser private void setupToolbarButtons() { View.OnClickListener showGroupDialogOnClickListener = view -> { -@@ -531,6 +578,7 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, +@@ -516,6 +563,7 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, } public void destroy() { @@ -392,7 +392,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java -@@ -6,8 +6,12 @@ package org.chromium.chrome.browser.tasks.tab_management; +@@ -6,7 +6,11 @@ package org.chromium.chrome.browser.tasks.tab_management; import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.CardProperties.CARD_TYPE; @@ -400,12 +400,11 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser +import android.os.Parcelable; + import android.app.Activity; - import android.content.Context; +import android.content.res.Configuration; import android.graphics.Rect; import android.util.Size; import android.view.LayoutInflater; -@@ -16,6 +20,7 @@ import android.view.View; +@@ -15,6 +19,7 @@ import android.view.View; import android.view.View.OnLayoutChangeListener; import android.view.ViewGroup; import android.view.ViewTreeObserver.OnGlobalLayoutListener; @@ -551,7 +550,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Construct a coordinator for UI that shows a list of tabs. * -@@ -344,6 +473,12 @@ public class TabListCoordinator +@@ -350,6 +479,12 @@ public class TabListCoordinator checkAwaitingLayout(); } }; @@ -564,17 +563,16 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -355,8 +490,7 @@ public class TabListCoordinator - .getDecorView() - .getWindowVisibleDisplayFrame(frame); +@@ -359,7 +494,7 @@ public class TabListCoordinator + Rect frame = new Rect(); + mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); updateGridCardLayout(frame.width()); -- } else if (mMode == TabListMode.STRIP -- || mMode == TabListMode.LIST) { +- } else if (mMode == TabListMode.STRIP || mMode == TabListMode.LIST) { + } else if (mMode == TabListMode.STRIP) { LinearLayoutManager layoutManager = new LinearLayoutManager( - context, -@@ -371,6 +505,25 @@ public class TabListCoordinator + activity, +@@ -374,6 +509,25 @@ public class TabListCoordinator } }; mRecyclerView.setLayoutManager(layoutManager); @@ -600,7 +598,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -391,7 +544,7 @@ public class TabListCoordinator +@@ -395,7 +549,7 @@ public class TabListCoordinator if (hasEmptyView) { mTabListEmptyCoordinator = new TabListEmptyCoordinator( @@ -609,27 +607,30 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } configureRecyclerViewTouchHelpers(); -@@ -692,6 +845,9 @@ public class TabListCoordinator +@@ -688,6 +842,9 @@ public class TabListCoordinator void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); + if (mRecyclerView.getLayoutManager() instanceof GridLayoutManagerDockBottom) { + ((GridLayoutManagerDockBottom)mRecyclerView.getLayoutManager()).ResetTopPosition(); + } - mMediator.registerOnScrolledListener(mRecyclerView); } + private void initializeEmptyStateView() { diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java -@@ -9,11 +9,14 @@ import android.view.View; +@@ -9,7 +9,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.FrameLayout; +import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; - import org.chromium.base.Callback; + import androidx.annotation.DrawableRes; + import androidx.annotation.Nullable; + import androidx.annotation.StringRes; +@@ -19,6 +21,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.tab_ui.R; import org.chromium.ui.modelutil.ListObservable; import org.chromium.ui.modelutil.ListObservable.ListObserver; @@ -637,10 +638,10 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Empty coordinator that is responsible for showing an empty state view in tab switcher when we are -@@ -32,15 +35,18 @@ class TabListEmptyCoordinator { - private Callback mRunOnItemAnimatorFinished; +@@ -39,15 +42,18 @@ class TabListEmptyCoordinator { private boolean mIsTabSwitcherShowing; private boolean mIsListObserverAttached; + private @Nullable TabListEmptyIllustrationAnimationManager mIllustrationAnimationManager; + private BrowserControlsStateProvider mBrowserControlsStateProvider; public TabListEmptyCoordinator( @@ -657,7 +658,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mListObserver = new ListObserver() { @Override -@@ -136,6 +142,15 @@ class TabListEmptyCoordinator { +@@ -169,6 +175,15 @@ class TabListEmptyCoordinator { public void attachEmptyView() { if (mEmptyView != null && mEmptyView.getParent() == null) { mRootView.addView(mEmptyView); @@ -694,67 +695,10 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ mNtpHeader.setLayoutParams(layoutParams); } -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java -@@ -54,6 +54,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - private BooleanPreferenceDelegate mForceTabletUIDelegate; - static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; - -+ static final String PREF_MOVE_TOOLBAR_TO_BOTTOM = "move_toolbar_bottom"; -+ static final String PREF_DISABLE_TOOLBAR_SWIPE_UP = "disable_toolbar_swipeup"; -+ private BooleanPreferenceDelegate mMoveTopToolbarToBottomDelegate; -+ private BooleanPreferenceDelegate mDisableToolbarSwipeUpDelegate; -+ - private PageZoomPreference mPageZoomDefaultZoomPref; - private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; - private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -77,6 +82,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - mFontSizePrefs = FontSizePrefs.getInstance(delegate.getBrowserContextHandle()); - } - -+ public AccessibilitySettingsDelegate getDelegate() { -+ return mDelegate; -+ } -+ - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); -@@ -134,6 +143,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); - forceTabletUiPref.setOnPreferenceChangeListener(this); - -+ ChromeSwitchPreference mMoveToolbarToBottomPref = -+ (ChromeSwitchPreference) findPreference(PREF_MOVE_TOOLBAR_TO_BOTTOM); -+ mMoveTopToolbarToBottomDelegate = mDelegate.getMoveTopToolbarToBottomDelegate(); -+ mMoveToolbarToBottomPref.setChecked(mMoveTopToolbarToBottomDelegate.isEnabled()); -+ mMoveToolbarToBottomPref.setOnPreferenceChangeListener(this); -+ -+ ChromeSwitchPreference mDisableToolbarSwipeUpPref = -+ (ChromeSwitchPreference) findPreference(PREF_DISABLE_TOOLBAR_SWIPE_UP); -+ mDisableToolbarSwipeUpDelegate = mDelegate.getDisableToolbarSwipeUpDelegate(); -+ mDisableToolbarSwipeUpPref.setChecked(mDisableToolbarSwipeUpDelegate.isEnabled()); -+ mDisableToolbarSwipeUpPref.setOnPreferenceChangeListener(this); -+ - Preference captions = findPreference(PREF_CAPTIONS); - captions.setOnPreferenceClickListener( - preference -> { -@@ -207,6 +228,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment - mDelegate.getBrowserContextHandle(), (Integer) newValue); - } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { - PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); -+ } else if (PREF_MOVE_TOOLBAR_TO_BOTTOM.equals(preference.getKey())) { -+ mMoveTopToolbarToBottomDelegate.setEnabled((Boolean) newValue); -+ mDelegate.requestRestart(getActivity()); -+ } else if (PREF_DISABLE_TOOLBAR_SWIPE_UP.equals(preference.getKey())) { -+ mDisableToolbarSwipeUpDelegate.setEnabled((Boolean) newValue); - } else if (PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT.equals(preference.getKey())) { - // TODO(mschillaci): Implement the override behavior for OS level. - } else if (OmniboxFeatures.KEY_JUMP_START_OMNIBOX.equals(preference.getKey())) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -15,6 +15,14 @@ import org.chromium.chrome.browser.flags.CromiteNativeUtils; +@@ -18,6 +18,14 @@ import org.chromium.chrome.browser.flags.CromiteNativeUtils; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; @@ -769,7 +713,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s /** The Chrome implementation of AccessibilitySettingsDelegate. */ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySettingsDelegate { private static class TextSizeContrastAccessibilityDelegate -@@ -57,6 +65,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -81,6 +89,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting return new ForceTabletUIDelegate(); } @@ -782,7 +726,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s private final Profile mProfile; /** -@@ -67,6 +81,62 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -92,6 +106,62 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting mProfile = profile; } @@ -848,7 +792,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -246,6 +246,9 @@ import org.chromium.webapk.lib.client.WebApkNavigationClient; +@@ -248,6 +248,9 @@ import org.chromium.webapk.lib.client.WebApkNavigationClient; import java.util.ArrayList; import java.util.List; @@ -861,7 +805,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -@@ -255,6 +255,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -254,6 +254,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -872,7 +816,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp if (forwarder != null) forwarder.setCurrentTouchOffsetY(top); } -@@ -895,6 +899,9 @@ public class CompositorViewHolder extends FrameLayout +@@ -894,6 +898,9 @@ public class CompositorViewHolder extends FrameLayout mApplicationBottomInsetSupplier != null ? mApplicationBottomInsetSupplier.get().webContentsHeightInset : 0; @@ -959,7 +903,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo /** LayoutManagerChromeTablet is the specialization of LayoutManagerChrome for the tablet. */ public class LayoutManagerChromeTablet extends LayoutManagerChrome { -@@ -123,7 +124,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { +@@ -124,7 +125,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { desktopWindowStateManager, actionConfirmationManager, modalDialogManager, @@ -972,7 +916,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java -@@ -46,6 +46,8 @@ import org.chromium.ui.base.LocalizationUtils; +@@ -50,6 +50,8 @@ import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; @@ -981,7 +925,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.ArrayList; import java.util.List; -@@ -492,7 +494,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -509,7 +511,11 @@ public class ToolbarSwipeLayout extends Layout { mLeftToolbarOverlay.setXOffset(leftX * dpToPx); } mLeftTab.setX(leftX); @@ -994,7 +938,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo needUpdate = updateSnap(dt, mLeftTab) || needUpdate; } else if (mLeftToolbarOverlay != null) { mLeftToolbarOverlay.setManualVisibility(false); -@@ -505,7 +511,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -522,7 +528,11 @@ public class ToolbarSwipeLayout extends Layout { mRightToolbarOverlay.setXOffset(rightX * dpToPx); } mRightTab.setX(rightX); @@ -1039,7 +983,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.util.ArrayList; import java.util.List; -@@ -251,12 +254,16 @@ public class StripLayoutHelperManager +@@ -250,12 +253,16 @@ public class StripLayoutHelperManager // Drag-Drop @Nullable private TabDragSource mTabDragSource; @@ -1056,7 +1000,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null && mModelSelectorButton.onDown(x, y, fromMouse, buttons)) { return; -@@ -282,6 +289,7 @@ public class StripLayoutHelperManager +@@ -281,6 +288,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1064,7 +1008,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over if (mModelSelectorButton != null) { mModelSelectorButton.drag(x, y); } -@@ -293,6 +301,7 @@ public class StripLayoutHelperManager +@@ -292,6 +300,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1072,7 +1016,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over long time = time(); if (mModelSelectorButton != null && mModelSelectorButton.click(x, y, fromMouse, buttons)) { -@@ -307,6 +316,7 @@ public class StripLayoutHelperManager +@@ -306,6 +315,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1080,7 +1024,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().fling(time(), x, y, velocityX, velocityY); } -@@ -315,6 +325,7 @@ public class StripLayoutHelperManager +@@ -314,6 +324,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1088,7 +1032,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(time(), x, y); } -@@ -422,7 +433,8 @@ public class StripLayoutHelperManager +@@ -421,7 +432,8 @@ public class StripLayoutHelperManager @Nullable DesktopWindowStateManager desktopWindowStateManager, ActionConfirmationManager actionConfirmationManager, ModalDialogManager modalDialogManager, @@ -1215,7 +1159,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen /** * The Java component of what is basically a CC Layer that manages drawing the Tab Strip (which is -@@ -89,9 +92,22 @@ public class TabStripSceneLayer extends SceneOverlayLayer { +@@ -100,9 +103,22 @@ public class TabStripSceneLayer extends SceneOverlayLayer { float scrimOpacity, float leftPaddingDp, float rightPaddingDp, @@ -1279,7 +1223,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow /** A class that manages browser control visibility and positioning. */ public class BrowserControlsManager implements ActivityStateListener, BrowserControlsSizer { // The amount of time to delay the control show request after returning to a once visible -@@ -454,6 +456,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -459,6 +461,14 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon return mTopControlsHeight; } @@ -1294,7 +1238,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/Brow @Override public int getTopControlsMinHeight() { return mTopControlsMinHeight; -@@ -550,6 +560,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon +@@ -560,6 +570,8 @@ public class BrowserControlsManager implements ActivityStateListener, BrowserCon @Override public float getTopVisibleContentOffset() { @@ -1330,7 +1274,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/messages/Messag mContainer.setLayoutParams(params); } -@@ -133,6 +141,12 @@ public class MessageContainerCoordinator implements BrowserControlsStateProvider +@@ -135,6 +143,12 @@ public class MessageContainerCoordinator implements BrowserControlsStateProvider /** @return Offset of the message container from the top of the screen. */ private int getContainerTopOffset() { @@ -1346,7 +1290,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/messages/Messag diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java --- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java -@@ -287,7 +287,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter +@@ -289,7 +289,7 @@ public class ChromeTabModalPresenter extends TabModalPresenter Resources resources, BrowserControlsStateProvider provider) { int scrimVerticalMargin = resources.getDimensionPixelSize(R.dimen.tab_modal_scrim_vertical_margin); @@ -1358,15 +1302,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -111,6 +111,7 @@ import org.chromium.ui.base.DeviceFormFactor; +@@ -115,6 +115,7 @@ import org.chromium.content_public.browser.NavigationController; + import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; - import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import java.util.List; -@@ -665,11 +666,16 @@ public class NewTabPage +@@ -761,11 +762,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1385,7 +1329,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -685,9 +691,7 @@ public class NewTabPage +@@ -781,9 +787,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1426,7 +1370,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java -@@ -31,6 +31,7 @@ import org.chromium.components.browser_ui.styles.SemanticColorUtils; +@@ -32,6 +32,7 @@ import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ViewUtils; @@ -1434,7 +1378,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP /** * The native recent tabs page. Lists recently closed tabs, open windows and tabs from the user's -@@ -105,7 +106,8 @@ public class RecentTabsPage +@@ -106,7 +107,8 @@ public class RecentTabsPage mView.addOnAttachStateChangeListener(this); @@ -1444,7 +1388,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP mBrowserControlsStateProvider = browserControlsStateProvider; mBrowserControlsStateProvider.addObserver(this); onBottomControlsHeightChanged( -@@ -117,14 +119,22 @@ public class RecentTabsPage +@@ -118,14 +120,22 @@ public class RecentTabsPage mTabStripHeightSupplier = tabStripHeightSupplier; mView.setPadding(0, mTabStripHeightSupplier.get(), 0, 0); @@ -1469,7 +1413,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP mEdgeToEdgeSupplier = edgeToEdgeSupplier; if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { mPadAdjuster = -@@ -334,7 +344,7 @@ public class RecentTabsPage +@@ -337,7 +347,7 @@ public class RecentTabsPage private void updateMargins() { final View recentTabsRoot = mView.findViewById(R.id.recent_tabs_root); @@ -1478,7 +1422,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP final int contentOffset = mBrowserControlsStateProvider.getContentOffset(); ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) recentTabsRoot.getLayoutParams(); -@@ -350,9 +360,17 @@ public class RecentTabsPage +@@ -353,9 +363,17 @@ public class RecentTabsPage // If the content offset is different from the margin, we use translationY to position the // view in line with the content offset. @@ -1501,7 +1445,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -@@ -82,6 +82,11 @@ import org.chromium.url.GURL; +@@ -81,6 +81,11 @@ import org.chromium.url.GURL; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -1513,7 +1457,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se import java.lang.ref.WeakReference; /** Queries the user's default search engine and shows autocomplete suggestions. */ -@@ -291,6 +296,12 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -286,6 +291,12 @@ public class SearchActivity extends AsyncInitializationActivity // Build the search box. mSearchBox = contentView.findViewById(R.id.search_location_bar); mAnchorView = contentView.findViewById(R.id.toolbar); @@ -1529,7 +1473,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -241,6 +241,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -219,6 +219,11 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } @@ -1593,9 +1537,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -198,6 +198,9 @@ import org.chromium.url.GURL; - +@@ -192,6 +192,9 @@ import org.chromium.url.GURL; import java.util.List; + import java.util.Objects; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import android.view.Gravity; @@ -1603,7 +1547,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -703,6 +706,17 @@ public class ToolbarManager +@@ -706,6 +709,17 @@ public class ToolbarManager }, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1621,7 +1565,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1222,6 +1236,7 @@ public class ToolbarManager +@@ -1261,6 +1275,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1629,7 +1573,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1235,6 +1250,7 @@ public class ToolbarManager +@@ -1274,6 +1289,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1637,7 +1581,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -1667,9 +1683,21 @@ public class ToolbarManager +@@ -1706,9 +1722,21 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarViewRectProvider(); } @@ -1660,7 +1604,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar assert mTabGroupUiOneshotSupplier == null; ThemeColorProvider bottomUiThemeColorProvider = new BottomUiThemeColorProvider( -@@ -1682,7 +1710,7 @@ public class ToolbarManager +@@ -1722,7 +1750,7 @@ public class ToolbarManager mActivityTabProvider, mTabModelSelector, mActivity, @@ -1669,7 +1613,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsSizer, mScrimCoordinator, mOmniboxFocusStateSupplier, -@@ -1707,7 +1735,7 @@ public class ToolbarManager +@@ -1747,7 +1775,7 @@ public class ToolbarManager mControlsVisibilityDelegate, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1678,7 +1622,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -1715,7 +1743,8 @@ public class ToolbarManager +@@ -1755,7 +1783,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1691,15 +1635,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContainer.java -@@ -15,6 +15,7 @@ import org.chromium.base.lifetime.Destroyable; - import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; +@@ -18,6 +18,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; + import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.ui.base.ApplicationViewportInsetSupplier; import org.chromium.ui.base.ViewportInsets; +import org.chromium.chrome.browser.flags.ChromeFeatureList; /** * The container that holds both infobars and snackbars. It will be translated up and down when the -@@ -63,10 +64,27 @@ public class BottomContainer extends FrameLayout +@@ -72,11 +73,28 @@ public class BottomContainer extends FrameLayout setTranslationY(mBaseYOffset); } @@ -1717,6 +1661,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContai + @Override public void setTranslationY(float y) { + mBaseYOffset = y; + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -1789,15 +1734,15 @@ diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/b diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc --- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc +++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc -@@ -20,6 +20,7 @@ +@@ -15,6 +15,7 @@ + #include "ui/android/resources/resource_manager_impl.h" #include "ui/gfx/geometry/point_f.h" - #include "ui/gfx/geometry/rounded_corners_f.h" #include "ui/gfx/geometry/transform.h" +#include "cc/base/features.h" // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/TabStripSceneLayer_jni.h" -@@ -97,8 +98,10 @@ void TabStripSceneLayer::SetContentTree( +@@ -107,8 +108,10 @@ void TabStripSceneLayer::SetContentTree( content_tree_ = content_tree; if (content_tree) { layer()->InsertChild(content_tree->layer(), 0); @@ -1810,7 +1755,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer } } } -@@ -155,7 +158,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, +@@ -160,7 +163,12 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, jfloat right_padding, jfloat top_padding) { gfx::RectF content(0, y_offset, width, height); @@ -1824,8 +1769,8 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer tab_strip_layer_->SetBounds(gfx::Size(width, height)); tab_strip_layer_->SetBackgroundColor(SkColor4f::FromColor(background_color)); -@@ -167,7 +175,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, - group_indicator_layer_->SetPosition(gfx::PointF(0, top_padding)); +@@ -172,7 +180,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env, + group_ui_parent_layer_->SetPosition(gfx::PointF(0, top_padding)); // Content tree should not be affected by tab strip scene layer visibility. - if (content_tree_) @@ -1836,7 +1781,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java -@@ -204,7 +204,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser +@@ -246,7 +246,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser /** * @return {@link BrowserControlsStateProvider} instance in the current Activity. */ @@ -1856,7 +1801,7 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom /** * An implementation of {@link DestroyableObservableSupplier} that monitors changes to browser -@@ -59,6 +60,10 @@ public class BrowserControlsMarginSupplier extends ObservableSupplierImpl +@@ -61,6 +62,10 @@ public class BrowserControlsMarginSupplier extends ObservableSupplierImpl int bottomMargin = mBrowserControlsStateProvider.getBottomControlsHeight() - mBrowserControlsStateProvider.getBottomControlOffset(); @@ -1870,7 +1815,7 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserControlsStateProvider.java -@@ -108,6 +108,12 @@ public interface BrowserControlsStateProvider { +@@ -116,6 +116,12 @@ public interface BrowserControlsStateProvider { */ int getTopControlsHeight(); @@ -1909,15 +1854,15 @@ diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/fe diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -12,6 +12,7 @@ - #include "base/feature_list.h" +@@ -13,6 +13,7 @@ #include "base/features.h" #include "base/no_destructor.h" + #include "build/android_buildflags.h" +#include "cc/base/features.h" #include "chrome/browser/android/webapk/webapk_features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/flags/android/chrome_session_state.h" -@@ -279,6 +280,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -292,6 +293,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNavBarColorMatchesTabBackground, &kNewTabSearchEngineUrlAndroid, &kNewTabPageAndroidTriggerForPrerender2, @@ -1929,7 +1874,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -386,6 +386,10 @@ public abstract class ChromeFeatureList { +@@ -403,6 +403,10 @@ public abstract class ChromeFeatureList { public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 = "NewTabPageAndroidTriggerForPrerender2"; public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe"; @@ -1940,10 +1885,10 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -687,6 +691,10 @@ public abstract class ChromeFeatureList { - public static final CachedFlag sPriceInsights = newCachedFlag(PRICE_INSIGHTS, false); +@@ -753,6 +757,10 @@ public abstract class ChromeFeatureList { + PRICE_INSIGHTS, /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sOptimizationGuidePushNotifications = - newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, false); + newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true); + public static final CachedFlag sDisableToolbarSwipeUp = + newCachedFlag(DISABLE_TOOLBAR_SWIPE_UP, false); + public static final CachedFlag sMoveTopToolbarToBottom = @@ -1951,7 +1896,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, false); -@@ -812,6 +820,8 @@ public abstract class ChromeFeatureList { +@@ -905,6 +913,8 @@ public abstract class ChromeFeatureList { sPriceChangeModule, sPriceInsights, sOptimizationGuidePushNotifications, @@ -1971,7 +1916,7 @@ diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/ "android/java/src/org/chromium/chrome/browser/hub/ApplyButtonData.java", "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactory.java", "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactoryImpl.java", -@@ -79,6 +80,10 @@ android_library("java") { +@@ -83,6 +84,10 @@ android_library("java") { "//ui/android:ui_no_recycler_view_java", "//url:url_java", ] @@ -2002,9 +1947,9 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator; @@ -109,6 +111,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { + HubPaneHostView hubPaneHostView = mContainerView.findViewById(R.id.hub_pane_host); mHubPaneHostCoordinator = - new HubPaneHostCoordinator( - hubPaneHostView, paneManager.getFocusedPaneSupplier(), edgeToEdgeSupplier); + new HubPaneHostCoordinator(hubPaneHostView, paneManager.getFocusedPaneSupplier()); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) + hubPaneHostView.getLayoutParams(); @@ -2033,7 +1978,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; -@@ -128,7 +130,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -126,7 +128,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mStatusIndicatorHeight = height; @@ -2045,7 +1990,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -138,7 +143,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -136,7 +141,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mAppHeaderHeight = height; @@ -2057,7 +2002,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -267,6 +275,8 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -272,6 +280,8 @@ public class HubManagerImpl implements HubManager, HubController { } mSnackbarOverrideToken = mSnackbarManager.pushParentViewToOverrideStack( @@ -2157,7 +2102,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -2327,7 +2327,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2433,7 +2433,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2424,7 +2369,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; -@@ -1216,7 +1218,9 @@ class AutocompleteMediator +@@ -1213,7 +1215,9 @@ class AutocompleteMediator @Override public void onSuggestionDropdownScroll() { mSuggestionsListScrolled = true; @@ -2449,7 +2394,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java -@@ -43,6 +43,9 @@ import org.chromium.ui.base.ViewUtils; +@@ -47,6 +47,9 @@ import org.chromium.ui.base.ViewUtils; import java.util.Optional; @@ -2458,8 +2403,8 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow + /** A widget for showing a list of omnibox suggestions. */ public class OmniboxSuggestionsDropdown extends RecyclerView { - /** -@@ -244,7 +247,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { + /** Used to tag and cancel the Accessibility focus events. */ +@@ -267,7 +270,6 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { addItemDecoration(new SuggestionHorizontalDivider(context)); mLayoutScrollListener = new SuggestionLayoutScrollListener(context); @@ -2467,7 +2412,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow mSelectionController = new RecyclerViewSelectionController(mLayoutScrollListener); addOnChildAttachStateChangeListener(mSelectionController); -@@ -253,6 +255,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -276,6 +278,13 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_bottom); int paddingTop = resources.getDimensionPixelOffset(R.dimen.omnibox_suggestion_list_padding_top); @@ -2505,7 +2450,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionViewBinder.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionViewBinder.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionViewBinder.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionViewBinder.java -@@ -31,6 +31,7 @@ import androidx.appcompat.content.res.AppCompatResources; +@@ -32,6 +32,7 @@ import androidx.appcompat.content.res.AppCompatResources; import androidx.core.view.ViewCompat; import androidx.core.widget.ImageViewCompat; @@ -2513,7 +2458,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.omnibox.R; import org.chromium.chrome.browser.omnibox.styles.OmniboxDrawableState; import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; -@@ -107,6 +108,12 @@ public final class BaseSuggestionViewBinder +@@ -108,6 +109,12 @@ public final class BaseSuggestionViewBinder updateColorScheme(model, view); } else if (DropdownCommonProperties.BG_BOTTOM_CORNER_ROUNDED == propertyKey || DropdownCommonProperties.BG_TOP_CORNER_ROUNDED == propertyKey) { @@ -2608,16 +2553,16 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java -@@ -32,6 +32,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -34,6 +34,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.dynamics.ViewResourceAdapter; import org.chromium.ui.widget.Toast; +import org.chromium.chrome.browser.theme.TopUiThemeColorProvider; +import org.chromium.chrome.browser.tab.Tab; - /** - * The root coordinator for the bottom controls component. This component is intended for use with -@@ -81,6 +83,8 @@ public class BottomControlsCoordinator implements BackPressHandler { + import java.util.HashSet; + import java.util.Set; +@@ -86,6 +88,8 @@ public class BottomControlsCoordinator implements BackPressHandler { * @param constraintsSupplier Used to access current constraints of the browser controls. * @param readAloudRestoringSupplier Supplier that returns true if Read Aloud is currently * restoring its player, e.g. after theme change. @@ -2626,7 +2571,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow */ @SuppressLint("CutPasteId") // Not actually cut and paste since it's View vs ViewGroup. public BottomControlsCoordinator( -@@ -97,7 +101,9 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -102,7 +106,9 @@ public class BottomControlsCoordinator implements BackPressHandler { TabObscuringHandler tabObscuringHandler, ObservableSupplier overlayPanelVisibilitySupplier, ObservableSupplier constraintsSupplier, @@ -2637,7 +2582,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mRootFrameLayout = root; root.setConstraintsSupplier(constraintsSupplier); PropertyModel model = new PropertyModel(BottomControlsProperties.ALL_KEYS); -@@ -158,7 +164,8 @@ public class BottomControlsCoordinator implements BackPressHandler { +@@ -171,7 +177,8 @@ public class BottomControlsCoordinator implements BackPressHandler { mMediator.setBottomControlsColor(color); } }, @@ -2650,7 +2595,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java -@@ -28,6 +28,7 @@ import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeSupplier.Change +@@ -29,6 +29,7 @@ import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeSupplier.Change import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modelutil.PropertyModel; @@ -2658,7 +2603,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * This class is responsible for reacting to events from the outside world, interacting with other -@@ -152,6 +153,12 @@ class BottomControlsMediator +@@ -158,6 +159,12 @@ class BottomControlsMediator void setBottomControlsVisible(boolean visible) { boolean visibilityChanged = mIsBottomControlsVisible != visible; @@ -2671,15 +2616,15 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mIsBottomControlsVisible = visible; updateCompositedViewVisibility(); updateAndroidViewVisibility(); -@@ -194,6 +201,7 @@ class BottomControlsMediator - int bottomControlsMinHeightOffset, - boolean needsAnimate, +@@ -202,6 +209,7 @@ class BottomControlsMediator + boolean bottomControlsMinHeightChanged, + boolean requestNewFrame, boolean isVisibilityForced) { + mModel.set(BottomControlsProperties.TOPCONTROLSMINHEIGHT_OFFSET, topControlsMinHeightOffset); // Method call routed to onBrowserControlsOffsetUpdate. if (BottomControlsStacker.isDispatchingYOffset()) return; -@@ -319,11 +327,13 @@ class BottomControlsMediator +@@ -334,11 +342,13 @@ class BottomControlsMediator && !mIsInSwipeLayout && getBrowserControls().getBottomControlOffset() == 0; if (visible) { @@ -2701,7 +2646,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java -@@ -22,6 +22,9 @@ class BottomControlsProperties { +@@ -23,6 +23,9 @@ class BottomControlsProperties { */ static final WritableIntPropertyKey ANDROID_VIEW_TRANSLATE_Y = new WritableIntPropertyKey(); @@ -2711,12 +2656,12 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Whether the Android view version of the bottom controls component is visible. */ static final WritableBooleanPropertyKey ANDROID_VIEW_VISIBLE = new WritableBooleanPropertyKey(); -@@ -40,6 +43,7 @@ class BottomControlsProperties { - ANDROID_VIEW_TRANSLATE_Y, +@@ -46,6 +49,7 @@ class BottomControlsProperties { ANDROID_VIEW_VISIBLE, COMPOSITED_VIEW_VISIBLE, -- IS_OBSCURED -+ IS_OBSCURED, + IS_OBSCURED, +- OFFSET_TAG ++ OFFSET_TAG, + TOPCONTROLSMINHEIGHT_OFFSET }; } @@ -2735,7 +2680,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java -@@ -20,6 +20,8 @@ import org.chromium.ui.resources.ResourceManager; +@@ -22,6 +22,8 @@ import org.chromium.ui.resources.ResourceManager; import java.util.List; @@ -2744,7 +2689,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * A composited view that sits at the bottom of the screen and listens to changes in the browser * controls. When visible, the view will mimic the behavior of the top browser controls when -@@ -39,6 +41,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -41,6 +43,9 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements /** The current Y offset of the bottom view in px. */ private int mCurrentYOffsetPx; @@ -2754,8 +2699,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** The current X offset of the bottom view in px. */ private int mCurrentXOffsetPx; -@@ -86,6 +91,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements - mCurrentXOffsetPx = offsetPx; +@@ -98,6 +103,13 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements + mOffsetTag = offsetTag; } + /** @@ -2768,9 +2713,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * @param visible Whether this {@link SceneLayer} is visible. */ -@@ -114,6 +126,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements - // The composited shadow should be visible if the Android toolbar's isn't. - boolean isShadowVisible = mBottomView.getVisibility() != View.VISIBLE; +@@ -131,6 +143,11 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements + isShadowVisible = mBottomView.getVisibility() != View.VISIBLE; + } + float offsetPy = viewport.height() + mCurrentYOffsetPx; + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { @@ -2780,15 +2725,15 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow ScrollingBottomViewSceneLayerJni.get() .updateScrollingBottomViewLayer( mNativePtr, -@@ -122,7 +139,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements +@@ -139,7 +156,7 @@ public class ScrollingBottomViewSceneLayer extends SceneOverlayLayer implements mResourceId, mTopShadowHeightPx, mCurrentXOffsetPx, - viewport.height() + mCurrentYOffsetPx, + offsetPy, - isShadowVisible); + isShadowVisible, + mOffsetTag); - return this; diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java @@ -2927,20 +2872,79 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil + android:title="@string/disable_toolbar_swipe_up" /> + +diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java ++++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +@@ -43,6 +43,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + private BooleanPreferenceDelegate mForceTabletUIDelegate; + static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; + ++ static final String PREF_MOVE_TOOLBAR_TO_BOTTOM = "move_toolbar_bottom"; ++ static final String PREF_DISABLE_TOOLBAR_SWIPE_UP = "disable_toolbar_swipeup"; ++ private BooleanPreferenceDelegate mMoveTopToolbarToBottomDelegate; ++ private BooleanPreferenceDelegate mDisableToolbarSwipeUpDelegate; ++ + private PageZoomPreference mPageZoomDefaultZoomPref; + private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; + private ChromeSwitchPreference mPageZoomAlwaysShowPref; +@@ -57,6 +62,10 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + mDelegate = delegate; + } + ++ public AccessibilitySettingsDelegate getDelegate() { ++ return mDelegate; ++ } ++ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); +@@ -115,6 +124,18 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); + forceTabletUiPref.setOnPreferenceChangeListener(this); + ++ ChromeSwitchPreference mMoveToolbarToBottomPref = ++ (ChromeSwitchPreference) findPreference(PREF_MOVE_TOOLBAR_TO_BOTTOM); ++ mMoveTopToolbarToBottomDelegate = mDelegate.getMoveTopToolbarToBottomDelegate(); ++ mMoveToolbarToBottomPref.setChecked(mMoveTopToolbarToBottomDelegate.isEnabled()); ++ mMoveToolbarToBottomPref.setOnPreferenceChangeListener(this); ++ ++ ChromeSwitchPreference mDisableToolbarSwipeUpPref = ++ (ChromeSwitchPreference) findPreference(PREF_DISABLE_TOOLBAR_SWIPE_UP); ++ mDisableToolbarSwipeUpDelegate = mDelegate.getDisableToolbarSwipeUpDelegate(); ++ mDisableToolbarSwipeUpPref.setChecked(mDisableToolbarSwipeUpDelegate.isEnabled()); ++ mDisableToolbarSwipeUpPref.setOnPreferenceChangeListener(this); ++ + Preference captions = findPreference(PREF_CAPTIONS); + captions.setOnPreferenceClickListener( + preference -> { +@@ -187,6 +208,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + mDelegate.getBrowserContextHandle(), (Integer) newValue); + } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { + PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); ++ } else if (PREF_MOVE_TOOLBAR_TO_BOTTOM.equals(preference.getKey())) { ++ mMoveTopToolbarToBottomDelegate.setEnabled((Boolean) newValue); ++ mDelegate.requestRestart(getActivity()); ++ } else if (PREF_DISABLE_TOOLBAR_SWIPE_UP.equals(preference.getKey())) { ++ mDisableToolbarSwipeUpDelegate.setEnabled((Boolean) newValue); + } else if (PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT.equals(preference.getKey())) { + // TODO(mschillaci): Implement the override behavior for OS level. + } else if (OmniboxFeatures.KEY_JUMP_START_OMNIBOX.equals(preference.getKey())) { diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -4,6 +4,8 @@ +@@ -4,7 +4,10 @@ package org.chromium.components.browser_ui.accessibility; +import android.app.Activity; ++ + import org.chromium.components.browser_ui.settings.SettingsNavigation; + import org.chromium.content_public.browser.BrowserContextHandle; /** -@@ -31,6 +33,11 @@ public interface AccessibilitySettingsDelegate { - void setValue(int value); +@@ -43,6 +46,11 @@ public interface AccessibilitySettingsDelegate { + void setValue(boolean value); } + void requestRestart(Activity activity); @@ -2948,9 +2952,9 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c + BooleanPreferenceDelegate getMoveTopToolbarToBottomDelegate(); + BooleanPreferenceDelegate getDisableToolbarSwipeUpDelegate(); + - /** @return The BrowserContextHandle that should be used to read and update settings. */ - BrowserContextHandle getBrowserContextHandle(); - + /** + * @return The BrowserContextHandle that should be used to read and update settings. + */ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc @@ -2962,7 +2966,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ #include "cc/base/math_util.h" #include "cc/input/browser_controls_offset_tags_info.h" #include "cc/slim/layer.h" -@@ -860,6 +861,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -863,6 +864,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( // factor. Thus, |top_content_offset| in CSS pixels is also in DIPs. float top_content_offset = metadata.top_controls_height * metadata.top_controls_shown_ratio; diff --git a/build/patches/Partition-HSTS-cache-by-NAK.patch b/build/patches/Partition-HSTS-cache-by-NAK.patch index 03be13ec..853399cc 100644 --- a/build/patches/Partition-HSTS-cache-by-NAK.patch +++ b/build/patches/Partition-HSTS-cache-by-NAK.patch @@ -13,7 +13,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../web_package/signed_exchange_loader.h | 2 + .../signed_exchange_prefetch_handler.cc | 2 +- .../signed_exchange_request_handler.cc | 1 + - net/http/transport_security_state.cc | 109 ++++++++++++------ + net/http/transport_security_state.cc | 100 ++++++++++++------ net/http/transport_security_state.h | 39 ++++--- net/quic/crypto/proof_verifier_chromium.cc | 5 +- net/quic/quic_chromium_client_session.cc | 2 +- @@ -21,16 +21,16 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html net/spdy/spdy_session.cc | 11 +- net/spdy/spdy_session.h | 3 +- .../url_request_context_builder.cc | 14 --- - net/url_request/url_request_http_job.cc | 7 +- - services/network/network_context.cc | 31 +++-- + net/url_request/url_request_http_job.cc | 5 +- + services/network/network_context.cc | 31 ++++-- services/network/network_context.h | 13 ++- .../public/mojom/network_context.mojom | 9 +- - 21 files changed, 180 insertions(+), 103 deletions(-) + 21 files changed, 171 insertions(+), 101 deletions(-) diff --git a/chrome/browser/ssl/https_upgrades_interceptor.cc b/chrome/browser/ssl/https_upgrades_interceptor.cc --- a/chrome/browser/ssl/https_upgrades_interceptor.cc +++ b/chrome/browser/ssl/https_upgrades_interceptor.cc -@@ -409,6 +409,7 @@ void HttpsUpgradesInterceptor::MaybeCreateLoader( +@@ -410,6 +410,7 @@ void HttpsUpgradesInterceptor::MaybeCreateLoader( network::mojom::NetworkContext* network_context = profile->GetDefaultStoragePartition()->GetNetworkContext(); network_context->IsHSTSActiveForHost( @@ -41,7 +41,7 @@ diff --git a/chrome/browser/ssl/https_upgrades_interceptor.cc b/chrome/browser/s diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc --- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc +++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc -@@ -410,7 +410,10 @@ void NetInternalsMessageHandler::OnDomainSecurityPolicyDelete( +@@ -402,7 +402,10 @@ void NetInternalsMessageHandler::OnDomainSecurityPolicyDelete( // There cannot be a unicode entry in the HSTS set. return; } @@ -52,7 +52,7 @@ diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/ *domain, base::BindOnce(&IgnoreBoolCallback)); } -@@ -420,7 +423,10 @@ void NetInternalsMessageHandler::OnHSTSQuery(const base::Value::List& list) { +@@ -412,7 +415,10 @@ void NetInternalsMessageHandler::OnHSTSQuery(const base::Value::List& list) { DCHECK(callback_id && domain); AllowJavascript(); @@ -63,7 +63,7 @@ diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/ *domain, base::BindOnce(&NetInternalsMessageHandler::ResolveCallbackWithResult, weak_factory_.GetWeakPtr(), *callback_id)); -@@ -446,8 +452,12 @@ void NetInternalsMessageHandler::OnHSTSAdd(const base::Value::List& list) { +@@ -438,8 +444,12 @@ void NetInternalsMessageHandler::OnHSTSAdd(const base::Value::List& list) { const bool sts_include_subdomains = list[1].GetBool(); base::Time expiry = base::Time::Now() + base::Days(1000); @@ -125,7 +125,7 @@ diff --git a/content/browser/web_package/signed_exchange_handler.cc b/content/br outer_request_isolation_info_(std::move(outer_request_isolation_info)), load_flags_(load_flags), remote_endpoint_(remote_endpoint), -@@ -532,7 +535,7 @@ void SignedExchangeHandler::OnCertReceived( +@@ -531,7 +534,7 @@ void SignedExchangeHandler::OnCertReceived( // property, or const std::string& stapled_ocsp_response = unverified_cert_chain_->ocsp(); @@ -220,7 +220,7 @@ diff --git a/content/browser/web_package/signed_exchange_request_handler.cc b/co diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc --- a/net/http/transport_security_state.cc +++ b/net/http/transport_security_state.cc -@@ -88,7 +88,7 @@ bool AddHash(const char* sha256_hash, HashValueVector* out) { +@@ -87,7 +87,7 @@ bool AddHash(const char* sha256_hash, HashValueVector* out) { // Converts |hostname| from dotted form ("www.google.com") to the form // used in DNS: "\x03www\x06google\x03com", lowercases that, and returns // the result. @@ -229,7 +229,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // We cannot perform the operations as detailed in the spec here as `host` // has already undergone IDN processing before it reached us. Thus, we // lowercase the input (probably redudnant since most input here has been -@@ -109,6 +109,29 @@ std::vector CanonicalizeHost(std::string_view host) { +@@ -108,6 +108,29 @@ std::vector CanonicalizeHost(std::string_view host) { return std::move(new_host).value(); } @@ -259,7 +259,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // PreloadResult is the result of resolving a specific name in the preloaded // data. struct PreloadResult { -@@ -200,7 +223,7 @@ bool DecodeHSTSPreload(const std::string& search_hostname, PreloadResult* out) { +@@ -199,7 +222,7 @@ bool DecodeHSTSPreload(std::string_view search_hostname, PreloadResult* out) { // Ensure that |search_hostname| is a valid hostname before // processing. @@ -268,12 +268,12 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ return false; } // Normalize any trailing '.' used for DNS suffix searches. -@@ -261,18 +284,19 @@ TransportSecurityState::TransportSecurityState( +@@ -259,18 +282,19 @@ TransportSecurityState::TransportSecurityState( // Both HSTS and HPKP cause fatal SSL errors, so return true if a // host has either. --bool TransportSecurityState::ShouldSSLErrorsBeFatal(const std::string& host) { -+bool TransportSecurityState::ShouldSSLErrorsBeFatal(const NetworkAnonymizationKey& nak, const std::string& host) { +-bool TransportSecurityState::ShouldSSLErrorsBeFatal(std::string_view host) { ++bool TransportSecurityState::ShouldSSLErrorsBeFatal(const NetworkAnonymizationKey& nak, std::string_view host) { STSState unused_sts; PKPState unused_pkp; - return GetSTSState(host, &unused_sts) || GetPKPState(host, &unused_pkp); @@ -282,7 +282,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ base::Value::Dict TransportSecurityState::NetLogUpgradeToSSLParam( + const NetworkAnonymizationKey& nak, - const std::string& host) { + std::string_view host) { STSState sts_state; base::Value::Dict dict; dict.Set("host", host); @@ -291,17 +291,23 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ dict.Set("should_upgrade_to_ssl", sts_state.ShouldUpgradeToSSL()); dict.Set("host_found_in_hsts_bypass_list", hsts_host_bypass_list_.find(host) != hsts_host_bypass_list_.end()); -@@ -280,14 +304,15 @@ base::Value::Dict TransportSecurityState::NetLogUpgradeToSSLParam( +@@ -278,12 +302,13 @@ base::Value::Dict TransportSecurityState::NetLogUpgradeToSSLParam( } SSLUpgradeDecision TransportSecurityState::GetSSLUpgradeDecision( + const NetworkAnonymizationKey& nak, - const std::string& host, + std::string_view host, + bool is_top_level_nav, const NetLogWithSource& net_log) { net_log.AddEvent( NetLogEventType::TRANSPORT_SECURITY_STATE_SHOULD_UPGRADE_TO_SSL, - [&] { return NetLogUpgradeToSSLParam(host); }); + [&] { return NetLogUpgradeToSSLParam(nak, host); }); + + // Only top level navigations should be upgraded when + // kHstsTopLevelNavigationsOnly is enabled. +@@ -294,7 +319,7 @@ SSLUpgradeDecision TransportSecurityState::GetSSLUpgradeDecision( + STSState sts_state; // Check the dynamic list first (removing the entry if expired). - if (GetDynamicSTSState(host, &sts_state)) { @@ -309,43 +315,42 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // [*.]localhost hosts now ignore Strict-Transport-Security response // headers, but an entry may have been stored before this restriction // was introduced (crbug.com/41251622). -@@ -312,27 +337,29 @@ SSLUpgradeDecision TransportSecurityState::GetSSLUpgradeDecision( +@@ -319,10 +344,11 @@ SSLUpgradeDecision TransportSecurityState::GetSSLUpgradeDecision( } bool TransportSecurityState::ShouldUpgradeToSSL( + const NetworkAnonymizationKey& nak, - const std::string& host, + std::string_view host, const NetLogWithSource& net_log) { -- return GetSSLUpgradeDecision(host, net_log) != SSLUpgradeDecision::kNoUpgrade; -+ return GetSSLUpgradeDecision(nak, host, net_log) != SSLUpgradeDecision::kNoUpgrade; + // TODO(crbug.com/361746120): Propagate `is_top_level_nav` to callers. +- return GetSSLUpgradeDecision(host, true, net_log) != ++ return GetSSLUpgradeDecision(nak, host, true, net_log) != + SSLUpgradeDecision::kNoUpgrade; } - TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( - const HostPortPair& host_port_pair, +@@ -331,17 +357,17 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( bool is_issued_by_known_root, -- const HashValueVector& public_key_hashes) { -+ const HashValueVector& public_key_hashes, -+ const NetworkAnonymizationKey& network_anonymization_key) { + const HashValueVector& public_key_hashes) { // Perform pin validation only if the server actually has public key pins. -- if (!HasPublicKeyPins(host_port_pair.host())) { -+ if (!HasPublicKeyPins(network_anonymization_key, host_port_pair.host())) { +- if (!HasPublicKeyPins(host)) { ++ if (!HasPublicKeyPins(network_anonymization_key, host)) { return PKPStatus::OK; } - return CheckPublicKeyPinsImpl(host_port_pair, is_issued_by_known_root, + return CheckPublicKeyPinsImpl(host, is_issued_by_known_root, - public_key_hashes); + public_key_hashes, network_anonymization_key); } --bool TransportSecurityState::HasPublicKeyPins(const std::string& host) { -+bool TransportSecurityState::HasPublicKeyPins(const NetworkAnonymizationKey& nak, const std::string& host) { +-bool TransportSecurityState::HasPublicKeyPins(std::string_view host) { ++bool TransportSecurityState::HasPublicKeyPins(const NetworkAnonymizationKey& nak, std::string_view host) { PKPState pkp_state; - return GetPKPState(host, &pkp_state) && pkp_state.HasPublicKeyPins(); + return GetPKPState(nak, host, &pkp_state) && pkp_state.HasPublicKeyPins(); } TransportSecurityState::CTRequirementsStatus -@@ -412,12 +439,13 @@ void TransportSecurityState::UpdatePinList( +@@ -421,12 +447,13 @@ void TransportSecurityState::UpdatePinList( } void TransportSecurityState::AddHSTSInternal( @@ -360,7 +365,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return; -@@ -441,13 +469,14 @@ void TransportSecurityState::AddHSTSInternal( +@@ -450,13 +477,14 @@ void TransportSecurityState::AddHSTSInternal( DirtyNotify(); } @@ -377,14 +382,12 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return; -@@ -492,10 +521,12 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPins( +@@ -500,10 +528,10 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPins( return PKPStatus::VIOLATED; } --bool TransportSecurityState::DeleteDynamicDataForHost(const std::string& host) { -+bool TransportSecurityState::DeleteDynamicDataForHost( -+ const NetworkAnonymizationKey& nak, -+ const std::string& host) { +-bool TransportSecurityState::DeleteDynamicDataForHost(std::string_view host) { ++bool TransportSecurityState::DeleteDynamicDataForHost(const NetworkAnonymizationKey& nak, std::string_view host) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - const std::vector canonicalized_host = CanonicalizeHost(host); @@ -392,7 +395,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return false; -@@ -572,7 +603,8 @@ void TransportSecurityState::DirtyNotify() { +@@ -580,7 +608,8 @@ void TransportSecurityState::DirtyNotify() { delegate_->StateIsDirty(this); } @@ -402,7 +405,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ std::string_view value) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); -@@ -591,23 +623,25 @@ bool TransportSecurityState::AddHSTSHeader(std::string_view host, +@@ -599,23 +628,25 @@ bool TransportSecurityState::AddHSTSHeader(std::string_view host, upgrade_mode = STSState::MODE_FORCE_HTTPS; } @@ -433,20 +436,20 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ } size_t TransportSecurityState::num_sts_entries() const { -@@ -632,9 +666,10 @@ TransportSecurityState::PKPStatus - TransportSecurityState::CheckPublicKeyPinsImpl( - const HostPortPair& host_port_pair, - bool is_issued_by_known_root, -- const HashValueVector& hashes) { -+ const HashValueVector& hashes, -+ const NetworkAnonymizationKey& network_anonymization_key) { +@@ -639,9 +670,10 @@ bool TransportSecurityState::IsBuildTimely() { + TransportSecurityState::PKPStatus + TransportSecurityState::CheckPublicKeyPinsImpl(std::string_view host, + bool is_issued_by_known_root, +- const HashValueVector& hashes) { ++ const HashValueVector& hashes, ++ const NetworkAnonymizationKey& network_anonymization_key) { PKPState pkp_state; -- bool found_state = GetPKPState(host_port_pair.host(), &pkp_state); -+ bool found_state = GetPKPState(network_anonymization_key, host_port_pair.host(), &pkp_state); +- bool found_state = GetPKPState(host, &pkp_state); ++ bool found_state = GetPKPState(network_anonymization_key, host, &pkp_state); // HasPublicKeyPins should have returned true in order for this method to have // been called. -@@ -675,7 +710,7 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, +@@ -682,7 +714,7 @@ bool TransportSecurityState::GetStaticPKPState(std::string_view host, PreloadResult result; if (host_pins_.has_value()) { // Ensure that |host| is a valid hostname before processing. @@ -455,29 +458,26 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ return false; } // Normalize any trailing '.' used for DNS suffix searches. -@@ -758,21 +793,24 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, +@@ -764,21 +796,21 @@ bool TransportSecurityState::GetStaticPKPState(std::string_view host, return false; } --bool TransportSecurityState::GetSTSState(const std::string& host, -+bool TransportSecurityState::GetSTSState(const NetworkAnonymizationKey& nak, -+ const std::string& host, +-bool TransportSecurityState::GetSTSState(std::string_view host, ++bool TransportSecurityState::GetSTSState(const NetworkAnonymizationKey& nak, std::string_view host, STSState* result) { - return GetDynamicSTSState(host, result) || GetStaticSTSState(host, result); + return GetDynamicSTSState(nak, host, result) || GetStaticSTSState(host, result); } --bool TransportSecurityState::GetPKPState(const std::string& host, -+bool TransportSecurityState::GetPKPState(const NetworkAnonymizationKey& nak, -+ const std::string& host, +-bool TransportSecurityState::GetPKPState(std::string_view host, ++bool TransportSecurityState::GetPKPState(const NetworkAnonymizationKey& nak, std::string_view host, PKPState* result) { - return GetDynamicPKPState(host, result) || GetStaticPKPState(host, result); + return GetDynamicPKPState(nak, host, result) || GetStaticPKPState(host, result); } --bool TransportSecurityState::GetDynamicSTSState(const std::string& host, -+bool TransportSecurityState::GetDynamicSTSState(const NetworkAnonymizationKey& nak, -+ const std::string& host, +-bool TransportSecurityState::GetDynamicSTSState(std::string_view host, ++bool TransportSecurityState::GetDynamicSTSState(const NetworkAnonymizationKey& nak, std::string_view host, STSState* result) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -486,13 +486,12 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return false; -@@ -809,11 +847,12 @@ bool TransportSecurityState::GetDynamicSTSState(const std::string& host, +@@ -815,11 +847,11 @@ bool TransportSecurityState::GetDynamicSTSState(std::string_view host, return false; } --bool TransportSecurityState::GetDynamicPKPState(const std::string& host, -+bool TransportSecurityState::GetDynamicPKPState(const NetworkAnonymizationKey& nak, -+ const std::string& host, +-bool TransportSecurityState::GetDynamicPKPState(std::string_view host, ++bool TransportSecurityState::GetDynamicPKPState(const NetworkAnonymizationKey& nak, std::string_view host, PKPState* result) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -504,30 +503,30 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h --- a/net/http/transport_security_state.h +++ b/net/http/transport_security_state.h -@@ -291,6 +291,7 @@ class NET_EXPORT TransportSecurityState { +@@ -290,6 +290,7 @@ class NET_EXPORT TransportSecurityState { // As ShouldUpgradeToSSL(), but also returns whether the decision came from // static or dynamic state, for metrics. SSLUpgradeDecision GetSSLUpgradeDecision( + const NetworkAnonymizationKey& nak, - const std::string& host, + std::string_view host, + bool is_top_level_nav, const NetLogWithSource& net_log = NetLogWithSource()); - @@ -299,13 +300,14 @@ class NET_EXPORT TransportSecurityState { // primary public interface; direct access to STS and PKP states is best // left to tests. The caller needs to handle the optional pinning override // when is_issued_by_known_root is false. -- bool ShouldSSLErrorsBeFatal(const std::string& host); -- bool ShouldUpgradeToSSL(const std::string& host, -+ bool ShouldSSLErrorsBeFatal(const NetworkAnonymizationKey& nak, const std::string& host); -+ bool ShouldUpgradeToSSL(const NetworkAnonymizationKey& nak, const std::string& host, +- bool ShouldSSLErrorsBeFatal(std::string_view host); +- bool ShouldUpgradeToSSL(std::string_view host, ++ bool ShouldSSLErrorsBeFatal(const NetworkAnonymizationKey& nak, std::string_view host); ++ bool ShouldUpgradeToSSL(const NetworkAnonymizationKey& nak, std::string_view host, const NetLogWithSource& net_log = NetLogWithSource()); - PKPStatus CheckPublicKeyPins(const HostPortPair& host_port_pair, + PKPStatus CheckPublicKeyPins(std::string_view host, bool is_issued_by_known_root, - const HashValueVector& hashes); -- bool HasPublicKeyPins(const std::string& host); +- bool HasPublicKeyPins(std::string_view host); + const HashValueVector& hashes, -+ const NetworkAnonymizationKey& network_anonymization_key); -+ bool HasPublicKeyPins(const NetworkAnonymizationKey& nak, const std::string& host); ++ const NetworkAnonymizationKey& nak, ); ++ bool HasPublicKeyPins(const NetworkAnonymizationKey& nak, std::string_view host); // Returns CT_REQUIREMENTS_NOT_MET if a connection violates CT policy // requirements: that is, if a connection to |host|, using the validated @@ -535,8 +534,8 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // // If an entry is deleted, the new state will be persisted through // the Delegate (if any). -- bool DeleteDynamicDataForHost(const std::string& host); -+ bool DeleteDynamicDataForHost(const NetworkAnonymizationKey& nak, const std::string& host); +- bool DeleteDynamicDataForHost(std::string_view host); ++ bool DeleteDynamicDataForHost(const NetworkAnonymizationKey& nak, std::string_view host); // Returns true and updates |*result| if |host| has dynamic or static // HSTS/HPKP (respectively) state. If multiple entries match |host|, dynamic @@ -544,10 +543,10 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // // Note that these methods are not const because they opportunistically remove // entries that have expired. -- bool GetSTSState(const std::string& host, STSState* sts_result); -- bool GetPKPState(const std::string& host, PKPState* pkp_result); -+ bool GetSTSState(const NetworkAnonymizationKey& nak, const std::string& host, STSState* sts_result); -+ bool GetPKPState(const NetworkAnonymizationKey& nak, const std::string& host, PKPState* pkp_result); +- bool GetSTSState(std::string_view host, STSState* sts_result); +- bool GetPKPState(std::string_view host, PKPState* pkp_result); ++ bool GetSTSState(const NetworkAnonymizationKey& nak, std::string_view host, STSState* sts_result); ++ bool GetPKPState(const NetworkAnonymizationKey& nak, std::string_view host, PKPState* pkp_result); // Returns true and updates |*result| iff |host| has static HSTS/HPKP // (respectively) state. If multiple entries match |host|, the most specific @@ -555,10 +554,10 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // // Note that these methods are not const because they opportunistically remove // entries that have expired. -- bool GetDynamicSTSState(const std::string& host, STSState* result); -- bool GetDynamicPKPState(const std::string& host, PKPState* result); -+ bool GetDynamicSTSState(const NetworkAnonymizationKey& nak, const std::string& host, STSState* result); -+ bool GetDynamicPKPState(const NetworkAnonymizationKey& nak, const std::string& host, PKPState* result); +- bool GetDynamicSTSState(std::string_view host, STSState* result); +- bool GetDynamicPKPState(std::string_view host, PKPState* result); ++ bool GetDynamicSTSState(const NetworkAnonymizationKey& nak, std::string_view host, STSState* result); ++ bool GetDynamicPKPState(const NetworkAnonymizationKey& nak, std::string_view host, PKPState* result); // Processes an HSTS header value from the host, adding entries to // dynamic state if necessary. @@ -585,14 +584,14 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s typedef std::map STSStateMap; typedef std::map PKPStateMap; -- base::Value::Dict NetLogUpgradeToSSLParam(const std::string& host); -+ base::Value::Dict NetLogUpgradeToSSLParam(const NetworkAnonymizationKey& nak, const std::string& host); +- base::Value::Dict NetLogUpgradeToSSLParam(std::string_view host); ++ base::Value::Dict NetLogUpgradeToSSLParam(const NetworkAnonymizationKey& nak, std::string_view host); // IsBuildTimely returns true if the current build is new enough ensure that // built in security information (i.e. HSTS preloading and pinning @@ -481,7 +485,8 @@ class NET_EXPORT TransportSecurityState { // Helper method for actually checking pins. - PKPStatus CheckPublicKeyPinsImpl(const HostPortPair& host_port_pair, + PKPStatus CheckPublicKeyPinsImpl(std::string_view host, bool is_issued_by_known_root, - const HashValueVector& hashes); + const HashValueVector& hashes, @@ -619,17 +618,17 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_verifier_chromium.cc --- a/net/quic/crypto/proof_verifier_chromium.cc +++ b/net/quic/crypto/proof_verifier_chromium.cc -@@ -412,7 +412,8 @@ int ProofVerifierChromium::Job::DoVerifyCertComplete(int result) { +@@ -411,7 +411,8 @@ int ProofVerifierChromium::Job::DoVerifyCertComplete(int result) { + TransportSecurityState::PKPStatus pin_validity = transport_security_state_->CheckPublicKeyPins( - HostPortPair(hostname_, port_), - cert_verify_result.is_issued_by_known_root, + hostname_, cert_verify_result.is_issued_by_known_root, - cert_verify_result.public_key_hashes); + cert_verify_result.public_key_hashes, + proof_verifier_->network_anonymization_key_); switch (pin_validity) { case TransportSecurityState::PKPStatus::VIOLATED: result = ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN; -@@ -439,7 +440,7 @@ int ProofVerifierChromium::Job::DoVerifyCertComplete(int result) { +@@ -438,7 +439,7 @@ int ProofVerifierChromium::Job::DoVerifyCertComplete(int result) { verify_details_->is_fatal_cert_error = IsCertStatusError(cert_status) && result != ERR_CERT_KNOWN_INTERCEPTION_BLOCKED && @@ -641,7 +640,7 @@ diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_ diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc --- a/net/quic/quic_chromium_client_session.cc +++ b/net/quic/quic_chromium_client_session.cc -@@ -1504,7 +1504,7 @@ bool QuicChromiumClientSession::CanPool( +@@ -1509,7 +1509,7 @@ bool QuicChromiumClientSession::CanPool( return SpdySession::CanPool(transport_security_state_, ssl_info, *ssl_config_service_, session_key_.host(), @@ -653,17 +652,17 @@ diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_c diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc --- a/net/socket/ssl_client_socket_impl.cc +++ b/net/socket/ssl_client_socket_impl.cc -@@ -1186,7 +1186,8 @@ ssl_verify_result_t SSLClientSocketImpl::HandleVerifyResult() { - TransportSecurityState::PKPStatus pin_validity = +@@ -1188,7 +1188,8 @@ ssl_verify_result_t SSLClientSocketImpl::HandleVerifyResult() { context_->transport_security_state()->CheckPublicKeyPins( - host_and_port_, server_cert_verify_result_.is_issued_by_known_root, + host_and_port_.host(), + server_cert_verify_result_.is_issued_by_known_root, - server_cert_verify_result_.public_key_hashes); + server_cert_verify_result_.public_key_hashes, + ssl_config_.network_anonymization_key); switch (pin_validity) { case TransportSecurityState::PKPStatus::VIOLATED: server_cert_verify_result_.cert_status |= -@@ -1208,7 +1209,7 @@ ssl_verify_result_t SSLClientSocketImpl::HandleVerifyResult() { +@@ -1210,7 +1211,7 @@ ssl_verify_result_t SSLClientSocketImpl::HandleVerifyResult() { IsCertStatusError(server_cert_verify_result_.cert_status) && result != ERR_CERT_KNOWN_INTERCEPTION_BLOCKED && context_->transport_security_state()->ShouldSSLErrorsBeFatal( @@ -685,16 +684,16 @@ diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc // Pooling is prohibited if the server cert is not valid for the new domain, // and for connections on which client certs were sent. It is also prohibited // when channel ID was sent if the hosts are from different eTLDs+1. -@@ -754,7 +755,7 @@ bool SpdySession::CanPool(TransportSecurityState* transport_security_state, - // Port is left at 0 as it is never used. +@@ -753,7 +754,7 @@ bool SpdySession::CanPool(TransportSecurityState* transport_security_state, + if (transport_security_state->CheckPublicKeyPins( - HostPortPair(new_hostname, 0), ssl_info.is_issued_by_known_root, + new_hostname, ssl_info.is_issued_by_known_root, - ssl_info.public_key_hashes) == + ssl_info.public_key_hashes, network_anonymization_key) == TransportSecurityState::PKPStatus::VIOLATED) { return false; } -@@ -977,7 +978,8 @@ bool SpdySession::VerifyDomainAuthentication(std::string_view domain) const { +@@ -976,7 +977,8 @@ bool SpdySession::VerifyDomainAuthentication(std::string_view domain) const { return true; // This is not a secure session, so all domains are okay. return CanPool(transport_security_state_, ssl_info, *ssl_config_service_, @@ -704,7 +703,7 @@ diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc } void SpdySession::EnqueueStreamWrite( -@@ -3011,7 +3013,8 @@ void SpdySession::OnAltSvc( +@@ -3010,7 +3012,8 @@ void SpdySession::OnAltSvc( return; } if (!CanPool(transport_security_state_, ssl_info, *ssl_config_service_, @@ -754,17 +753,15 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc -@@ -344,7 +344,8 @@ std::unique_ptr URLRequestHttpJob::Create(URLRequest* request) { +@@ -343,6 +343,7 @@ std::unique_ptr URLRequestHttpJob::Create(URLRequest* request) { if (TransportSecurityState* hsts = request->context()->transport_security_state()) { - upgrade_decision = -- hsts->GetSSLUpgradeDecision(url.host(), request->net_log()); -+ hsts->GetSSLUpgradeDecision(request->isolation_info().network_anonymization_key(), -+ url.host(), request->net_log()); - } - - // Check for reasons not to return a URLRequestHttpJob. These don't apply to -@@ -1204,7 +1205,7 @@ void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() { + upgrade_decision = hsts->GetSSLUpgradeDecision( ++ request->isolation_info().network_anonymization_key(), + url.host(), + /*is_top_level_nav=*/request->isolation_info().IsMainFrameRequest(), + request->net_log()); +@@ -1205,7 +1206,7 @@ void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() { std::optional value; if ((value = headers->EnumerateHeader(nullptr, "Strict-Transport-Security"))) { @@ -773,7 +770,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque } } -@@ -1275,7 +1276,7 @@ void URLRequestHttpJob::OnStartCompleted(int result) { +@@ -1276,7 +1277,7 @@ void URLRequestHttpJob::OnStartCompleted(int result) { TransportSecurityState* state = context->transport_security_state(); NotifySSLCertificateError( result, transaction_->GetResponseInfo()->ssl_info, @@ -785,7 +782,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -2016,6 +2016,7 @@ void NetworkContext::CreateHostResolver( +@@ -2011,6 +2011,7 @@ void NetworkContext::CreateHostResolver( void NetworkContext::VerifyCertForSignedExchange( const scoped_refptr& certificate, const GURL& url, @@ -793,7 +790,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont const std::string& ocsp_result, const std::string& sct_list, VerifyCertForSignedExchangeCallback callback) { -@@ -2026,6 +2027,7 @@ void NetworkContext::VerifyCertForSignedExchange( +@@ -2021,6 +2022,7 @@ void NetworkContext::VerifyCertForSignedExchange( pending_cert_verify->result = std::make_unique(); pending_cert_verify->certificate = certificate; pending_cert_verify->url = url; @@ -801,7 +798,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont pending_cert_verify->ocsp_result = ocsp_result; pending_cert_verify->sct_list = sct_list; net::CertVerifier* cert_verifier = -@@ -2070,17 +2072,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin( +@@ -2065,17 +2067,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin( std::move(callback).Run(); } @@ -824,7 +821,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont IsHSTSActiveForHostCallback callback) { net::TransportSecurityState* security_state = url_request_context_->transport_security_state(); -@@ -2090,10 +2094,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host, +@@ -2085,10 +2089,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host, return; } @@ -837,7 +834,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont GetHSTSStateCallback callback) { base::Value::Dict result; -@@ -2131,10 +2135,10 @@ void NetworkContext::GetHSTSState(const std::string& domain, +@@ -2126,10 +2130,10 @@ void NetworkContext::GetHSTSState(const std::string& domain, net::TransportSecurityState::STSState dynamic_sts_state; net::TransportSecurityState::PKPState dynamic_pkp_state; bool found_sts_dynamic = transport_security_state->GetDynamicSTSState( @@ -850,7 +847,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont if (found_sts_dynamic) { result.Set("dynamic_upgrade_mode", static_cast(dynamic_sts_state.upgrade_mode)); -@@ -2172,6 +2176,7 @@ void NetworkContext::GetHSTSState(const std::string& domain, +@@ -2167,6 +2171,7 @@ void NetworkContext::GetHSTSState(const std::string& domain, } void NetworkContext::DeleteDynamicDataForHost( @@ -858,7 +855,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont const std::string& host, DeleteDynamicDataForHostCallback callback) { net::TransportSecurityState* transport_security_state = -@@ -2182,7 +2187,7 @@ void NetworkContext::DeleteDynamicDataForHost( +@@ -2177,7 +2182,7 @@ void NetworkContext::DeleteDynamicDataForHost( } std::move(callback).Run( @@ -867,7 +864,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont } void NetworkContext::EnableStaticKeyPinningForTesting( -@@ -2226,7 +2231,7 @@ void NetworkContext::PreconnectSockets( +@@ -2221,7 +2226,7 @@ void NetworkContext::PreconnectSockets( DCHECK(!require_network_anonymization_key_ || !network_anonymization_key.IsEmpty()); @@ -876,7 +873,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont // |PreconnectSockets| may receive arguments from the renderer, which is not // guaranteed to validate them. -@@ -3071,7 +3076,9 @@ void NetworkContext::OnConnectionError() { +@@ -3059,7 +3064,9 @@ void NetworkContext::OnConnectionError() { } } @@ -887,7 +884,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont // TODO(lilyhoughton) This needs to be gotten rid of once explicit // construction with a URLRequestContext is no longer supported. -@@ -3088,6 +3095,7 @@ GURL NetworkContext::GetHSTSRedirectForPreconnect(const GURL& original_url) { +@@ -3076,6 +3083,7 @@ GURL NetworkContext::GetHSTSRedirectForPreconnect(const GURL& original_url) { } if (!url_request_context_->transport_security_state()->ShouldUpgradeToSSL( @@ -895,9 +892,9 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont original_url.host())) { RecordHSTSPreconnectUpgradeReason( HSTSRedirectUpgradeReason::kNotUpgradedNoHSTSPin); -@@ -3139,7 +3147,8 @@ void NetworkContext::OnVerifyCertForSignedExchangeComplete( +@@ -3127,7 +3135,8 @@ void NetworkContext::OnVerifyCertForSignedExchangeComplete( url_request_context_->transport_security_state()->CheckPublicKeyPins( - net::HostPortPair::FromURL(pending_cert_verify->url), + pending_cert_verify->url.host(), pending_cert_verify->result->is_issued_by_known_root, - pending_cert_verify->result->public_key_hashes); + pending_cert_verify->result->public_key_hashes, @@ -933,7 +930,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte const std::string& host, DeleteDynamicDataForHostCallback callback) override; void SetCorsOriginAccessListsForOrigin( -@@ -748,7 +751,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -752,7 +755,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext mojo::PendingRemote cookie_observer, net::FirstPartySetMetadata first_party_set_metadata); @@ -943,7 +940,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte #if BUILDFLAG(IS_P2P_ENABLED) void DestroySocketManager(P2PSocketManager* socket_manager); -@@ -951,6 +955,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -955,6 +959,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext VerifyCertForSignedExchangeCallback callback; scoped_refptr certificate; GURL url; @@ -954,21 +951,20 @@ diff --git a/services/network/network_context.h b/services/network/network_conte diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1489,6 +1489,7 @@ interface NetworkContext { +@@ -1523,22 +1523,23 @@ interface NetworkContext { // implementation is currently specific for use by Signed Exchange. VerifyCertForSignedExchange(X509Certificate certificate, url.mojom.Url url, + NetworkAnonymizationKey network_anonymization_key, string ocsp_response, - string sct_list) => (int32 error_code, - CertVerifyResult cv_result, -@@ -1496,16 +1497,16 @@ interface NetworkContext { + string sct_list) + => (int32 error_code, CertVerifyResult cv_result, bool pkp_bypassed); // Adds explicitly-specified data as if it was processed from an // HSTS header. Used by tests and implementation of chrome://net-internals. -- AddHSTS(string host, mojo_base.mojom.Time expiry, -+ AddHSTS(NetworkAnonymizationKey nak, string host, mojo_base.mojom.Time expiry, - bool include_subdomains) => (); +- AddHSTS(string host, mojo_base.mojom.Time expiry, bool include_subdomains) ++ AddHSTS(NetworkAnonymizationKey nak, string host, mojo_base.mojom.Time expiry, bool include_subdomains) + => (); // Returns true if it is known that |host| has requested to always be // accessed via HTTPS. @@ -977,12 +973,12 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw // Retrieve values from the HSTS state from the associated contexts // transport security state. -- GetHSTSState(string domain) -+ GetHSTSState(NetworkAnonymizationKey nak, string domain) - => (mojo_base.mojom.DictionaryValue state); +- GetHSTSState(string domain) => (mojo_base.mojom.DictionaryValue state); ++ GetHSTSState(NetworkAnonymizationKey nak, string domain) => (mojo_base.mojom.DictionaryValue state); // Sets allowed and blocked origins respectively for the URLLoaderFactory -@@ -1524,7 +1525,7 @@ interface NetworkContext { + // consumers to access beyond the same-origin policy. The list is managed per +@@ -1557,7 +1558,7 @@ interface NetworkContext { // Deletes any dynamic data stored for |host| from the transport // security state. Returns true iff an entry was deleted. // See net::TransportSecurityState::DeleteDynamicDataForHost for more detail. diff --git a/build/patches/WIN-Disable-first-run.patch b/build/patches/WIN-Disable-first-run.patch index 0012d033..9f5ed746 100644 --- a/build/patches/WIN-Disable-first-run.patch +++ b/build/patches/WIN-Disable-first-run.patch @@ -9,7 +9,7 @@ Subject: WIN Disable first run diff --git a/chrome/browser/ui/startup/first_run_service.cc b/chrome/browser/ui/startup/first_run_service.cc --- a/chrome/browser/ui/startup/first_run_service.cc +++ b/chrome/browser/ui/startup/first_run_service.cc -@@ -170,7 +170,7 @@ bool IsFirstRunMarkedFinishedInPrefs() { +@@ -123,7 +123,7 @@ bool IsFirstRunMarkedFinishedInPrefs() { // static void FirstRunService::RegisterLocalStatePrefs(PrefRegistrySimple* registry) { diff --git a/build/patches/WIN-enable-file-system-access-blocklist.patch b/build/patches/WIN-enable-file-system-access-blocklist.patch index fdd0e169..3618ce15 100644 --- a/build/patches/WIN-enable-file-system-access-blocklist.patch +++ b/build/patches/WIN-enable-file-system-access-blocklist.patch @@ -10,10 +10,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/content/browser/file_system_access/features.cc b/content/browser/file_system_access/features.cc --- a/content/browser/file_system_access/features.cc +++ b/content/browser/file_system_access/features.cc -@@ -24,6 +24,7 @@ BASE_FEATURE(kFileSystemAccessBFCache, - BASE_FEATURE(kFileSystemAccessDragAndDropCheckBlocklist, - "FileSystemAccessDragAndDropCheckBlocklist", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -10,6 +10,7 @@ + #include "third_party/blink/public/common/features_generated.h" + + namespace content::features { +SET_CROMITE_FEATURE_ENABLED(kFileSystemAccessDragAndDropCheckBlocklist); // TODO(crbug.com/40896420): Remove this flag eventually. diff --git a/build/patches/Welcome-screen.patch b/build/patches/Welcome-screen.patch index 7a7454a7..1ceceeed 100644 --- a/build/patches/Welcome-screen.patch +++ b/build/patches/Welcome-screen.patch @@ -11,17 +11,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/java/res/layout/fre_tosanduma.xml | 160 +++++++++ chrome/android/java/res/values/dimens.xml | 10 + chrome/android/java/res/values/styles.xml | 24 ++ - .../firstrun/ChildAccountStatusSupplier.java | 13 - .../DefaultSearchEngineFirstRunFragment.java | 3 - - .../browser/firstrun/FirstRunActivity.java | 32 +- - .../firstrun/FirstRunActivityBase.java | 6 +- - .../firstrun/FirstRunFlowSequencer.java | 73 +--- + .../browser/firstrun/FirstRunActivity.java | 23 +- + .../firstrun/FirstRunFlowSequencer.java | 61 +--- .../browser/firstrun/FirstRunUtils.java | 1 + .../firstrun/ToSAndUMAFirstRunFragment.java | 335 +++++++++++++++++ .../firstrun/TosAndUmaFragmentView.java | 336 ++++++++++++++++++ + ...creenSigninAndHistorySyncActivityBase.java | 6 +- .../browser/locale/LocaleManagerDelegate.java | 5 +- .../Welcome-screen.grdp | 27 ++ - 15 files changed, 915 insertions(+), 113 deletions(-) + 14 files changed, 914 insertions(+), 80 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 +29,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 -@@ -501,6 +501,7 @@ chrome_java_resources = [ +@@ -505,6 +505,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,7 +40,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -655,6 +655,8 @@ chrome_java_sources = [ +@@ -651,6 +651,8 @@ chrome_java_sources = [ "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", @@ -218,7 +217,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml -@@ -104,6 +104,16 @@ found in the LICENSE file. +@@ -114,6 +114,16 @@ found in the LICENSE file. 48dp 18dp 8dp @@ -269,36 +268,6 @@ diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res