Browse Source

Patches for v95 (#1532)

* fix build

* only lines changes

* remove patch not referenced in patch list

* fix crash when open an offline page without any opened tabs

* Remove duplicate patch for pull-to-refresh

* Latest PRs and disable third-party origin trials

Co-authored-by: uazo <29201891+uazo@users.noreply.github.com>
Carl 3 năm trước cách đây
mục cha
commit
2fe296b6b9
100 tập tin đã thay đổi với 1366 bổ sung1679 xóa
  1. 1 1
      build/RELEASE
  2. 2 2
      build/bromite_patches_list.txt
  3. 5 5
      build/patches/AImageReader-CFI-crash-mitigations.patch
  4. 9 9
      build/patches/Add-AllowUserCertificates-flag.patch
  5. 4 4
      build/patches/Add-IsCleartextPermitted-flag.patch
  6. 4 4
      build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch
  7. 37 34
      build/patches/Add-a-proxy-configuration-page.patch
  8. 16 16
      build/patches/Add-an-always-incognito-mode.patch
  9. 26 26
      build/patches/Add-bookmark-import-export-actions.patch
  10. 5 5
      build/patches/Add-custom-tab-intents-privacy-option.patch
  11. 4 4
      build/patches/Add-exit-menu-item.patch
  12. 3 3
      build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch
  13. 5 5
      build/patches/Add-flag-for-save-data-header.patch
  14. 4 4
      build/patches/Add-flag-to-configure-maximum-connections-per-host.patch
  15. 3 3
      build/patches/Add-flag-to-control-video-playback-resume-feature.patch
  16. 5 5
      build/patches/Add-flag-to-disable-IPv6-probes.patch
  17. 3 3
      build/patches/Add-flag-to-disable-WebGL.patch
  18. 3 3
      build/patches/Add-flag-to-disable-external-intent-requests.patch
  19. 0 58
      build/patches/Add-flag-to-disable-pull-to-refresh-effect.patch
  20. 8 8
      build/patches/Add-flag-to-disable-vibration.patch
  21. 22 20
      build/patches/Add-history-support-in-incognito-mode.patch
  22. 5 5
      build/patches/Add-menu-item-to-bookmark-all-tabs.patch
  23. 2 2
      build/patches/Add-menu-item-to-view-source.patch
  24. 5 5
      build/patches/Add-option-to-force-tablet-UI.patch
  25. 6 6
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  26. 3 3
      build/patches/Add-support-for-ISupportHelpAndFeedback.patch
  27. 69 7
      build/patches/Allow-building-without-enable_reporting.patch
  28. 2 2
      build/patches/Allow-playing-audio-in-background.patch
  29. 0 38
      build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch
  30. 180 118
      build/patches/Automated-domain-substitution.patch
  31. 2 2
      build/patches/Block-gateway-attacks-via-websockets.patch
  32. 6 6
      build/patches/Block-qjz9zk-or-trk-requests.patch
  33. 16 16
      build/patches/Bromite-AdBlockUpdaterService.patch
  34. 25 25
      build/patches/Bromite-auto-updater.patch
  35. 2 2
      build/patches/Disable-AGSA-by-default.patch
  36. 1 1
      build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch
  37. 2 2
      build/patches/Disable-all-promo-dialogs.patch
  38. 1 1
      build/patches/Disable-feeds-support-by-default.patch
  39. 2 2
      build/patches/Disable-media-router-and-remoting-by-default.patch
  40. 4 4
      build/patches/Disable-metrics-collection-for-NTP-tiles.patch
  41. 1 1
      build/patches/Disable-metrics-on-all-I-O-threads.patch
  42. 164 117
      build/patches/Disable-safe-browsing.patch
  43. 2 2
      build/patches/Disable-seed-based-field-trials.patch
  44. 5 5
      build/patches/Disable-smart-selection-by-default.patch
  45. 2 2
      build/patches/Disable-some-signed-exchange-features.patch
  46. 5 5
      build/patches/Disable-support-for-RAR-files-inspection.patch
  47. 6 6
      build/patches/Disable-text-fragments-by-default.patch
  48. 1 1
      build/patches/Disable-third-party-cookies-by-default.patch
  49. 25 0
      build/patches/Disable-third-party-origin-trials.patch
  50. 1 1
      build/patches/Disable-unified-autoplay-feature.patch
  51. 1 1
      build/patches/Do-not-build-API-keys-infobar.patch
  52. 11 11
      build/patches/Do-not-compile-QR-code-sharing.patch
  53. 2 2
      build/patches/Enable-SPPI-for-devices-with-enough-memory.patch
  54. 0 483
      build/patches/Enable-android-autofill.patch
  55. 2 2
      build/patches/Enable-darken-websites-checkbox-in-themes.patch
  56. 1 1
      build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
  57. 15 15
      build/patches/Enable-native-Android-autofill.patch
  58. 2 2
      build/patches/Enable-network-isolation-features.patch
  59. 1 1
      build/patches/Enable-prefetch-privacy-changes-by-default.patch
  60. 10 10
      build/patches/Enable-share-intent.patch
  61. 1 1
      build/patches/Enable-user-agent-freeze-by-default.patch
  62. 41 42
      build/patches/Experimental-user-scripts-support.patch
  63. 6 6
      build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch
  64. 11 11
      build/patches/JIT-less-toggle.patch
  65. 1 1
      build/patches/Keep-empty-tabs-between-sessions.patch
  66. 21 19
      build/patches/Logcat-crash-reports-UI.patch
  67. 19 12
      build/patches/Modify-default-preferences.patch
  68. 7 7
      build/patches/Move-some-account-settings-back-to-privacy-settings.patch
  69. 31 30
      build/patches/Multiple-fingerprinting-mitigations.patch
  70. 1 1
      build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch
  71. 1 1
      build/patches/Open-YouTube-links-in-Bromite.patch
  72. 3 3
      build/patches/Override-UA-client-hint-for-model.patch
  73. 6 6
      build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch
  74. 60 11
      build/patches/Remove-SMS-integration.patch
  75. 40 95
      build/patches/Remove-binary-blob-integrations.patch
  76. 6 6
      build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch
  77. 1 1
      build/patches/Remove-help-menu-item.patch
  78. 1 1
      build/patches/Remove-offline-measurement-background-task.patch
  79. 131 146
      build/patches/Remove-signin-and-data-saver-integrations.patch
  80. 1 1
      build/patches/Remove-weblayer-dependency-on-Play-Services.patch
  81. 1 1
      build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch
  82. 11 11
      build/patches/Restore-Search-Ready-Omnibox-flag.patch
  83. 11 11
      build/patches/Restore-Simplified-NTP-launch.patch
  84. 12 12
      build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch
  85. 5 5
      build/patches/Revert-flags-remove-num-raster-threads.patch
  86. 34 27
      build/patches/Revert-the-removal-of-an-option-to-block-autoplay.patch
  87. 57 18
      build/patches/Site-setting-for-images.patch
  88. 1 1
      build/patches/Switch-to-fstack-protector-strong.patch
  89. 6 6
      build/patches/Timezone-customization.patch
  90. 4 4
      build/patches/Unexpire-tab-groups-flags.patch
  91. 5 5
      build/patches/Update-i18n-zh_CN-support.patch
  92. 1 1
      build/patches/Use-4-tile-rows-never-show-logo.patch
  93. 16 16
      build/patches/User-agent-customization.patch
  94. 1 1
      build/patches/autofill-disable-autofill-download-manager.patch
  95. 3 3
      build/patches/build-remove-calling-untrusted-hooks.patch
  96. 46 15
      build/patches/disable-AdsBlockedInfoBar.patch
  97. 1 1
      build/patches/disable-WebView-variations-support.patch
  98. 1 1
      build/patches/disable-autofill-server-communication-by-default.patch
  99. 1 1
      build/patches/disable-browser-autologin-by-default.patch
  100. 1 1
      build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch

+ 1 - 1
build/RELEASE

@@ -1 +1 @@
-94.0.4606.109
+95.0.4638.67

+ 2 - 2
build/bromite_patches_list.txt

@@ -48,7 +48,6 @@ Remove-help-menu-item.patch
 AudioBuffer-AnalyserNode-fp-mitigations.patch
 Multiple-fingerprinting-mitigations.patch
 Disable-metrics-on-all-I-O-threads.patch
-Always-respect-async-dns-flag-regardless-of-SDK-version.patch
 Add-flag-to-configure-maximum-connections-per-host.patch
 Do-not-ignore-download-location-prompt-setting.patch
 Add-bookmark-import-export-actions.patch
@@ -160,7 +159,8 @@ Add-custom-tab-intents-privacy-option.patch
 Enable-share-intent.patch
 Site-setting-for-images.patch
 Bromite-auto-updater.patch
-Add-flag-to-disable-pull-to-refresh-effect.patch
 Experimental-user-scripts-support.patch
 Enable-native-Android-autofill.patch
+Keep-empty-tabs-between-sessions.patch
 Automated-domain-substitution.patch
+Disable-third-party-origin-trials.patch

+ 5 - 5
build/patches/AImageReader-CFI-crash-mitigations.patch

@@ -82,7 +82,7 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -2017,7 +2017,7 @@
+@@ -2101,7 +2101,7 @@
    {
      "name": "enable-image-reader",
      "owners": [ "vikassoni", "liberato" ],
@@ -156,8 +156,8 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
    if (!gpu_preferences.enable_android_surface_control)
      return kGpuFeatureStatusDisabled;
  
-@@ -319,6 +322,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
-     gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] =
+@@ -344,6 +347,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
+     gpu_feature_info->status_values[GPU_FEATURE_TYPE_CANVAS_OOP_RASTERIZATION] =
          kGpuFeatureStatusBlocklisted;
    }
 +
@@ -225,7 +225,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_
 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
-@@ -668,6 +668,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
+@@ -653,6 +653,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
  // Note: Has no effect if kMediaDrmPreprovisioning feature is disabled.
  const base::Feature kMediaDrmPreprovisioningAtStartup{
      "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT};
@@ -239,7 +239,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
-@@ -219,6 +219,7 @@ MEDIA_EXPORT extern const base::Feature kForceHardwareAudioDecoders;
+@@ -216,6 +216,7 @@ MEDIA_EXPORT extern const base::Feature kForceHardwareAudioDecoders;
  MEDIA_EXPORT extern const base::Feature kAllowNonSecureOverlays;
  MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
  MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;

+ 9 - 9
build/patches/Add-AllowUserCertificates-flag.patch

@@ -18,7 +18,7 @@ Subject: Add AllowUserCertificates flag
 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
-@@ -223,6 +223,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider;
+@@ -226,6 +226,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider;
  import org.chromium.content_public.browser.SelectionPopupController;
  import org.chromium.content_public.browser.WebContents;
  import org.chromium.content_public.common.ContentSwitches;
@@ -26,7 +26,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.printing.PrintManagerDelegateImpl;
  import org.chromium.printing.PrintingController;
  import org.chromium.printing.PrintingControllerImpl;
-@@ -976,6 +977,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -984,6 +985,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          UpdateMenuItemHelper.getInstance().onStart();
          ChromeActivitySessionTracker.getInstance().onStartWithNative();
          ChromeCachedFlags.getInstance().cacheNativeFlags();
@@ -38,7 +38,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
-@@ -88,6 +88,7 @@ public class ChromeCachedFlags {
+@@ -87,6 +87,7 @@ public class ChromeCachedFlags {
                  add(ChromeFeatureList.EARLY_LIBRARY_LOAD);
                  add(ChromeFeatureList.ELASTIC_OVERSCROLL);
                  add(ChromeFeatureList.IMMERSIVE_UI_MODE);
@@ -49,7 +49,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/Chrom
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -2781,6 +2781,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2910,6 +2910,10 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kCSSContainerQueriesDescription, kOsAll,
       FEATURE_VALUE_TYPE(blink::features::kCSSContainerQueries)},
  #if defined(OS_ANDROID)
@@ -91,15 +91,15 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -139,6 +139,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
-     &feed::kFeedInteractiveRefresh,
+@@ -142,6 +142,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+     &feed::kFeedSignInPromoDismiss,
      &feed::kInterestFeedContentSuggestions,
      &feed::kInterestFeedSpinnerAlwaysAnimate,
 +    &kAllowUserCertificates,
      &feed::kInterestFeedV1ClicksAndViewsConditionalUpload,
      &feed::kInterestFeedV2,
      &feed::kInterestFeedV2Autoplay,
-@@ -373,6 +374,9 @@ const base::Feature kAdaptiveButtonInTopToolbarCustomizationV2{
+@@ -377,6 +378,9 @@ const base::Feature kAdaptiveButtonInTopToolbarCustomizationV2{
      "AdaptiveButtonInTopToolbarCustomizationV2",
      base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -128,13 +128,13 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
      private static Map<String, Boolean> sDefaults =
              ImmutableMap.<String, Boolean>builder()
 +                    .put(ChromeFeatureList.ALLOW_USER_CERTIFICATES, false)
-                     .put(ChromeFeatureList.ANDROID_PARTNER_CUSTOMIZATION_PHENOTYPE, true)
                      .put(ChromeFeatureList.BOOKMARK_BOTTOM_SHEET, false)
                      .put(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID, false)
+                     .put(ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, false)
 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
-@@ -211,6 +211,7 @@ public abstract class ChromeFeatureList {
+@@ -193,6 +193,7 @@ public abstract class ChromeFeatureList {
      }
  
      /* Alphabetical: */

+ 4 - 4
build/patches/Add-IsCleartextPermitted-flag.patch

@@ -14,7 +14,7 @@ Subject: Add IsCleartextPermitted flag
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -7617,6 +7617,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -7852,6 +7852,11 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(
           chrome::android::kBookmarksExportUseSaf)},
  
@@ -29,7 +29,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1407,6 +1407,10 @@ const char kHttpsOnlyModeDescription[] =
+@@ -1460,6 +1460,10 @@ const char kHttpsOnlyModeDescription[] =
      "Adds a setting under chrome://settings/security to opt-in to HTTPS-First "
      "Mode.";
  
@@ -43,7 +43,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -814,6 +814,9 @@ extern const char kHostedAppShimCreationDescription[];
+@@ -845,6 +845,9 @@ extern const char kHostedAppShimCreationDescription[];
  extern const char kHttpsOnlyModeName[];
  extern const char kHttpsOnlyModeDescription[];
  
@@ -81,7 +81,7 @@ diff --git a/net/base/features.h b/net/base/features.h
 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
-@@ -214,6 +214,10 @@ std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(URLRequest* request) {
+@@ -215,6 +215,10 @@ std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(URLRequest* request) {
      }
  
  #if defined(OS_ANDROID)

+ 4 - 4
build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch

@@ -17,7 +17,7 @@ See also:
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -7518,6 +7518,12 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -7709,6 +7709,12 @@ const FeatureEntry kFeatureEntries[] = {
                                      "AndroidDynamicColor")},
  #endif  //   defined(OS_ANDROID)
  
@@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -635,6 +635,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] =
+@@ -658,6 +658,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] =
      "authenticator (if available) to verify card ownership when retrieving "
      "credit cards from Google Payments.";
  
@@ -48,7 +48,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -404,6 +404,9 @@ extern const char kEnableAutofillSaveCardInfoBarAccountIndicationFooterName[];
+@@ -420,6 +420,9 @@ extern const char kEnableAutofillSaveCardInfoBarAccountIndicationFooterName[];
  extern const char
      kEnableAutofillSaveCardInfoBarAccountIndicationFooterDescription[];
  
@@ -61,7 +61,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl
 --- a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl
 +++ b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl
-@@ -129,10 +129,6 @@ public abstract class ChromeSwitches {{
+@@ -123,10 +123,6 @@ public abstract class ChromeSwitches {{
      /** Switch for enabling the Chrome Survey. Only works when UMA is accepted. */
      public static final String CHROME_FORCE_ENABLE_SURVEY = "force-enable-chrome-survey";
  

+ 37 - 34
build/patches/Add-a-proxy-configuration-page.patch

@@ -23,17 +23,17 @@ for SimpleURLLoaders as well.
  chrome/browser/resources/proxy_config.js      | 266 +++++++++++
  chrome/browser/ui/BUILD.gn                    |   2 +
  .../webui/chrome_web_ui_controller_factory.cc |   3 +
- chrome/browser/ui/webui/proxy_config_ui.cc    | 416 ++++++++++++++++++
+ chrome/browser/ui/webui/proxy_config_ui.cc    | 419 ++++++++++++++++++
  chrome/browser/ui/webui/proxy_config_ui.h     |  33 ++
  chrome/common/webui_url_constants.cc          |   4 +
  chrome/common/webui_url_constants.h           |   2 +
- .../core/browser/proxy_policy_handler.cc      |   2 +-
  .../pref_proxy_config_tracker_impl.cc         |   1 +
  .../proxy_config/proxy_config_dictionary.cc   |  30 +-
  .../proxy_config/proxy_config_dictionary.h    |   7 +-
+ .../proxy_config/proxy_policy_handler.cc      |   2 +-
  net/proxy_resolution/proxy_config.cc          |  52 ++-
  net/proxy_resolution/proxy_config.h           |   3 +
- 24 files changed, 995 insertions(+), 14 deletions(-)
+ 24 files changed, 998 insertions(+), 14 deletions(-)
  create mode 100644 chrome/browser/resources/proxy_config.css
  create mode 100644 chrome/browser/resources/proxy_config.html
  create mode 100644 chrome/browser/resources/proxy_config.js
@@ -70,7 +70,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
-@@ -50,6 +50,7 @@ import org.chromium.ui.text.SpanApplier;
+@@ -49,6 +49,7 @@ import org.chromium.ui.text.SpanApplier;
  public class PrivacySettings
          extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener,
                                                      INeedSnackbarManager {
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
 diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
-@@ -365,6 +365,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
+@@ -367,6 +367,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
    builtins_to_provide.push_back(
        base::ASCIIToUTF16(chrome::kChromeUISettingsURL));
  #endif
@@ -93,7 +93,7 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 +++ b/chrome/browser/browser_resources.grd
-@@ -88,6 +88,12 @@
+@@ -89,6 +89,12 @@
          <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
        </if>
  
@@ -182,7 +182,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
  #if BUILDFLAG(ENABLE_BACKGROUND_MODE)
  #include "chrome/browser/background/background_mode_manager.h"
  #endif
-@@ -914,6 +916,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
+@@ -941,6 +943,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
    PluginsResourceService::RegisterPrefs(registry);
  #endif
  
@@ -647,7 +647,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
  #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
  #include "chrome/browser/ui/webui/signin_internals_ui.h"
  #include "chrome/browser/ui/webui/sync_internals/sync_internals_ui.h"
-@@ -619,6 +620,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -638,6 +639,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
@@ -660,7 +660,7 @@ diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webu
 new file mode 100644
 --- /dev/null
 +++ b/chrome/browser/ui/webui/proxy_config_ui.cc
-@@ -0,0 +1,416 @@
+@@ -0,0 +1,419 @@
 +/*
 +    This file is part of Bromite.
 +
@@ -747,9 +747,9 @@ new file mode 100644
 +  void RegisterMessages() override;
 +
 +  // Messages
-+  void OnEnableNotifyUIWithState(const base::ListValue* list);
-+  void OnApply(const base::ListValue* config);
-+  void OnClear(const base::ListValue* config);
++  void OnEnableNotifyUIWithState(base::Value::ConstListView list);
++  void OnApply(base::Value::ConstListView config);
++  void OnClear(base::Value::ConstListView config);
 +
 +  // net::ProxyConfigService::Observer implementation:
 +  // Calls ProxyConfigView.onProxyConfigChanged JavaScript function in the
@@ -910,7 +910,7 @@ new file mode 100644
 +// The proxy configuration UI is not notified of state changes until this function runs.
 +// After this function, OnProxyConfigChanged() will be called on all proxy state changes.
 +void ProxyConfigMessageHandler::OnEnableNotifyUIWithState(
-+    const base::ListValue* list) {
++    base::Value::ConstListView list) {
 +  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 +
 +  if (!is_observing_) {
@@ -932,24 +932,24 @@ new file mode 100644
 +  OnProxyConfigChanged(config, availability);
 +}
 +
-+void ProxyConfigMessageHandler::OnClear(const base::ListValue* list) {
++void ProxyConfigMessageHandler::OnClear(base::Value::ConstListView list) {
 +  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 +
 +  const base::Value cfg = ProxyConfigDictionary::CreateSystem();
 +  pref_service_->Set(proxy_config::prefs::kProxy, cfg);
 +  pref_service_->CommitPendingWrite();
-+  OnEnableNotifyUIWithState(nullptr);
++  OnEnableNotifyUIWithState(list);
 +}
 +
-+void ProxyConfigMessageHandler::OnApply(const base::ListValue* list) {
++void ProxyConfigMessageHandler::OnApply(base::Value::ConstListView list) {
 +  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 +
-+  if ((list->GetList().size() != 1) || !list->GetList()[0].is_dict()) {
++  if ((list.size() != 1) || !list[0].is_dict()) {
 +    return;
 +  }
 +
 +  const base::DictionaryValue* config = nullptr;
-+  if (!list->GetDictionary(0, &config))
++  if (!list[0].GetAsDictionary(&config))
 +    return;
 +
 +  const base::Value *autoDetect = config->FindKeyOfType("auto_detect", base::Value::Type::BOOLEAN);
@@ -1019,7 +1019,8 @@ new file mode 100644
 +  } else if (t == "direct") {
 +      proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::EMPTY;
 +  } else if (t == "none") {
-+      OnClear(nullptr);
++      base::Value::ConstListView empty;
++      OnClear(empty);
 +      return;
 +  } else {
 +     // invalid type
@@ -1064,7 +1065,9 @@ new file mode 100644
 +    pref_service_->Set(proxy_config::prefs::kProxy, cfg);
 +  }
 +  pref_service_->CommitPendingWrite();
-+  OnEnableNotifyUIWithState(nullptr);
++
++  base::Value::ConstListView empty;
++  OnEnableNotifyUIWithState(empty);
 +}
 +
 +}  // namespace
@@ -1118,7 +1121,7 @@ new file mode 100644
 diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
 --- a/chrome/common/webui_url_constants.cc
 +++ b/chrome/common/webui_url_constants.cc
-@@ -34,6 +34,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert";
+@@ -35,6 +35,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert";
  const char kChromeUICertificateViewerURL[] = "chrome://view-cert/";
  const char kChromeUIChromeSigninHost[] = "chrome-signin";
  const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/";
@@ -1146,7 +1149,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
 diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
 --- a/chrome/common/webui_url_constants.h
 +++ b/chrome/common/webui_url_constants.h
-@@ -125,6 +125,8 @@ extern const char kChromeUIMemoryInternalsHost[];
+@@ -126,6 +126,8 @@ extern const char kChromeUIMemoryInternalsHost[];
  extern const char kChromeUINTPTilesInternalsHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINetExportHost[];
@@ -1155,18 +1158,6 @@ diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_const
  extern const char kChromeUINetInternalsHost[];
  extern const char kChromeUINetInternalsURL[];
  extern const char kChromeUINewTabHost[];
-diff --git a/components/policy/core/browser/proxy_policy_handler.cc b/components/policy/core/browser/proxy_policy_handler.cc
---- a/components/policy/core/browser/proxy_policy_handler.cc
-+++ b/components/policy/core/browser/proxy_policy_handler.cc
-@@ -207,7 +207,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
-             ProxyConfigDictionary::CreateFixedServers(
-                 server->GetString(), bypass_list && bypass_list->is_string()
-                                          ? bypass_list->GetString()
--                                         : std::string()));
-+                                         : std::string(), false));
-       }
-       break;
-     }
 diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc
 --- a/components/proxy_config/pref_proxy_config_tracker_impl.cc
 +++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc
@@ -1303,6 +1294,18 @@ diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/prox
  
    base::Value dict_;
  
+diff --git a/components/proxy_config/proxy_policy_handler.cc b/components/proxy_config/proxy_policy_handler.cc
+--- a/components/proxy_config/proxy_policy_handler.cc
++++ b/components/proxy_config/proxy_policy_handler.cc
+@@ -259,7 +259,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
+             ProxyConfigDictionary::CreateFixedServers(
+                 server->GetString(), bypass_list && bypass_list->is_string()
+                                          ? bypass_list->GetString()
+-                                         : std::string()));
++                                         : std::string(), false));
+       }
+       break;
+     }
 diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_config.cc
 --- a/net/proxy_resolution/proxy_config.cc
 +++ b/net/proxy_resolution/proxy_config.cc

+ 16 - 16
build/patches/Add-an-always-incognito-mode.patch

@@ -44,7 +44,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 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
-@@ -28,6 +28,11 @@
+@@ -32,6 +32,11 @@
          android:key="secure_dns"
          android:title="@string/settings_secure_dns_title"
          android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings"/>
@@ -152,7 +152,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
  import org.chromium.chrome.browser.IntentHandler.TabOpenType;
  import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
-@@ -1756,8 +1757,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1766,8 +1767,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          Bundle savedInstanceState = getSavedInstanceState();
  
          // We determine the model as soon as possible so every systems get initialized coherently.
@@ -175,7 +175,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
  import org.chromium.chrome.browser.dependency_injection.ModuleFactoryOverrides;
  import org.chromium.chrome.browser.device.DeviceClassManager;
-@@ -1872,6 +1873,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1884,6 +1885,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }
@@ -212,7 +212,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
  import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
  import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType;
-@@ -409,6 +410,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -408,6 +409,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
          boolean hasSaveImage = false;
          mShowEphemeralTabNewLabel = null;
  
@@ -223,7 +223,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
          List<Pair<Integer, ModelList>> groupedItems = new ArrayList<>();
  
          if (mParams.isAnchor()) {
-@@ -427,6 +432,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -426,6 +431,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
                              linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
                          }
                      }
@@ -231,7 +231,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
                      if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) {
                          linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB));
                      }
-@@ -451,7 +457,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -450,7 +456,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
                  }
              }
              if (FirstRunStatus.getFirstRunFlowComplete()) {
@@ -278,7 +278,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
-@@ -50,6 +50,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable;
+@@ -49,6 +49,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable;
  import org.chromium.components.embedder_support.util.UrlConstants;
  import org.chromium.device.mojom.ScreenOrientationLockType;
  
@@ -288,7 +288,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.util.ArrayList;
-@@ -727,7 +730,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
+@@ -726,7 +729,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
  
      @Override
      public boolean isIncognito() {
@@ -339,7 +339,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
-@@ -27,6 +27,10 @@ import org.chromium.chrome.browser.profiles.Profile;
+@@ -26,6 +26,10 @@ import org.chromium.chrome.browser.profiles.Profile;
  import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
  import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
  import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
@@ -350,7 +350,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
  import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
  import org.chromium.components.browser_ui.settings.SettingsLauncher;
-@@ -41,7 +45,12 @@ import org.chromium.ui.text.SpanApplier;
+@@ -40,7 +44,12 @@ import org.chromium.ui.text.SpanApplier;
   * Fragment to keep track of the all the privacy related preferences.
   */
  public class PrivacySettings
@@ -364,7 +364,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
      private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
      private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode";
-@@ -84,6 +93,25 @@ public class PrivacySettings
+@@ -83,6 +92,25 @@ public class PrivacySettings
                  (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
          canMakePaymentPref.setOnPreferenceChangeListener(this);
  
@@ -390,7 +390,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          ChromeSwitchPreference networkPredictionPref =
                  (ChromeSwitchPreference) findPreference(PREF_NETWORK_PREDICTIONS);
          networkPredictionPref.setChecked(
-@@ -115,6 +143,9 @@ public class PrivacySettings
+@@ -114,6 +142,9 @@ public class PrivacySettings
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
                      (boolean) newValue);
@@ -400,7 +400,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          } else if (PREF_HTTPS_FIRST_MODE.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue);
-@@ -192,4 +223,8 @@ public class PrivacySettings
+@@ -191,4 +222,8 @@ public class PrivacySettings
          }
          return false;
      }
@@ -518,7 +518,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer
  import java.io.BufferedInputStream;
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
-@@ -687,6 +690,13 @@ public class TabPersistentStore {
+@@ -654,6 +657,13 @@ public class TabPersistentStore {
                  }
              }
          }
@@ -580,7 +580,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI
 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
-@@ -447,7 +447,7 @@ const base::Feature kCCTIncognito{"CCTIncognito",
+@@ -445,7 +445,7 @@ const base::Feature kCCTIncognito{"CCTIncognito",
                                    base::FEATURE_ENABLED_BY_DEFAULT};
  
  const base::Feature kCCTIncognitoAvailableToThirdParty{
@@ -592,7 +592,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/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
-@@ -907,6 +907,19 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -922,6 +922,19 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_CLEAR_BROWSING_HISTORY_SUMMARY_SYNCED_NO_LINK" desc="A text for the basic tab explaining browsing history for users with history sync. This version is shown when the link to MyActivity is displayed separately.">
          Clears history from all synced devices.
        </message>

+ 26 - 26
build/patches/Add-bookmark-import-export-actions.patch

@@ -69,7 +69,7 @@ diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.
 diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h
 --- a/base/android/content_uri_utils.h
 +++ b/base/android/content_uri_utils.h
-@@ -17,6 +17,10 @@ namespace base {
+@@ -18,6 +18,10 @@ namespace base {
  // Returns -1 if the URI is invalid.
  BASE_EXPORT File OpenContentUriForRead(const FilePath& content_uri);
  
@@ -146,7 +146,7 @@ diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/
 @@ -21,6 +21,20 @@
              android:visible="false"
              app:showAsAction="ifRoom"
-             app:iconTint="@color/default_icon_color_tint_list" />
+             app:iconTint="@color/default_icon_color_secondary_tint_list" />
 +        <item
 +            android:id="@+id/import_menu_id"
 +            android:icon="@drawable/ic_folder_blue_24dp"
@@ -196,7 +196,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
-@@ -83,6 +83,12 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -84,6 +84,12 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
          } else if (menuItem.getItemId() == R.id.search_menu_id) {
              mDelegate.openSearchUI();
              return true;
@@ -209,7 +209,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          }
  
          SelectionDelegate<BookmarkId> selectionDelegate = mDelegate.getSelectionDelegate();
-@@ -134,6 +140,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -135,6 +141,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
      void showLoadingUi() {
          setTitle(null);
          setNavigationButton(NAVIGATION_BUTTON_NONE);
@@ -218,7 +218,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          getMenu().findItem(R.id.search_menu_id).setVisible(false);
          getMenu().findItem(R.id.edit_menu_id).setVisible(false);
      }
-@@ -143,6 +151,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -144,6 +152,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
          super.showNormalView();
  
          if (mDelegate == null) {
@@ -227,7 +227,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
              getMenu().findItem(R.id.search_menu_id).setVisible(false);
              getMenu().findItem(R.id.edit_menu_id).setVisible(false);
          }
-@@ -173,6 +183,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -174,6 +184,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
      public void onFolderStateSet(BookmarkId folder) {
          mCurrentFolder = mDelegate.getModel().getBookmarkById(folder);
  
@@ -287,7 +287,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
-+        mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data, mWindowAndroid);
++        mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data);
          if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) {
              BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString(data.getStringExtra(
                      INTENT_VISIT_BOOKMARK_ID));
@@ -417,7 +417,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +                    window.showIntent(fileSelector,
 +                        new WindowAndroid.IntentCallback() {
 +                            @Override
-+                            public void onIntentCompleted(WindowAndroid window, int resultCode, Intent data) {
++                            public void onIntentCompleted(int resultCode, Intent data) {
 +                                if (data == null) return;
 +                                Uri filePath = data.getData();
 +                                doExportBookmarksImpl(window, filePath);
@@ -446,8 +446,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +                        // get real actual file name on disk
 +                        if (actualFilePath==null) actualFilePath = lastSelectedUri.toString();
 +                        // set file name to last exported file name
-+                        fileSelector.putExtra(Intent.EXTRA_TITLE, 
-+                            ContentUriUtils.getDisplayName(lastSelectedUri, context, 
++                        fileSelector.putExtra(Intent.EXTRA_TITLE,
++                            ContentUriUtils.getDisplayName(lastSelectedUri, context,
 +                                DocumentsContract.Document.COLUMN_DISPLAY_NAME));
 +                    }
 +                    return null;
@@ -504,7 +504,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +        DownloadLocationDialogController controller = new DownloadLocationDialogController() {
 +            @Override
 +            public void onDownloadLocationDialogComplete(String returnedPath) {}
-+            
++
 +            @Override
 +            public void onDownloadLocationDialogCanceled() {}
 +        };
@@ -786,7 +786,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
-@@ -1817,6 +1817,13 @@ static_library("browser") {
+@@ -1832,6 +1832,13 @@ static_library("browser") {
      "window_placement/window_placement_permission_context.h",
    ]
  
@@ -800,7 +800,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
    configs += [
      "//build/config/compiler:wexit_time_destructors",
      "//build/config:precompiled_headers",
-@@ -2938,6 +2945,8 @@ static_library("browser") {
+@@ -2965,6 +2972,8 @@ static_library("browser") {
        "autofill/manual_filling_view_interface.h",
        "banners/android/chrome_app_banner_manager_android.cc",
        "banners/android/chrome_app_banner_manager_android.h",
@@ -809,7 +809,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "browser_process_platform_part_android.cc",
        "browser_process_platform_part_android.h",
        "chrome_browser_field_trials_mobile.cc",
-@@ -3483,8 +3492,6 @@ static_library("browser") {
+@@ -3541,8 +3550,6 @@ static_library("browser") {
        "badging/badge_manager_factory.h",
        "banners/app_banner_manager_desktop.cc",
        "banners/app_banner_manager_desktop.h",
@@ -821,9 +821,9 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -7567,6 +7567,12 @@ const FeatureEntry kFeatureEntries[] = {
-      FEATURE_VALUE_TYPE(
-          password_manager::features::kPasswordsAccountStorageRevisedOptInFlow)},
+@@ -7802,6 +7802,12 @@ const FeatureEntry kFeatureEntries[] = {
+      flag_descriptions::kCommerceDeveloperDescription, kOsAll,
+      FEATURE_VALUE_TYPE(commerce::kCommerceDeveloper)},
  
 +    {"export-bookmarks-use-saf",
 +     flag_descriptions::kBookmarksExportUseSafName,
@@ -1339,7 +1339,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -5306,6 +5306,11 @@ const char kWebKioskEnableLacrosDescription[] =
+@@ -5415,6 +5415,11 @@ const char kWebKioskEnableLacrosDescription[] =
      "Chrome OS. When disabled, the Ash-chrome will be used";
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
@@ -1354,7 +1354,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -3091,6 +3091,9 @@ extern const char kWebKioskEnableLacrosName[];
+@@ -3162,6 +3162,9 @@ extern const char kWebKioskEnableLacrosName[];
  extern const char kWebKioskEnableLacrosDescription[];
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
@@ -1367,7 +1367,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -164,6 +164,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+@@ -165,6 +165,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
      &kBackgroundThreadPool,
      &kBentoOffline,
      &kBookmarkBottomSheet,
@@ -1375,7 +1375,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
      &kCastDeviceFilter,
      &kCloseTabSuggestions,
      &kCriticalPersistedTabData,
-@@ -810,6 +811,10 @@ const base::Feature kWebApkInstallCompleteNotification{
+@@ -812,6 +813,10 @@ const base::Feature kWebApkInstallCompleteNotification{
  const base::Feature kWebApkTrampolineOnInitialIntent{
      "WebApkTrampolineOnInitialIntent", base::FEATURE_ENABLED_BY_DEFAULT};
  
@@ -1400,7 +1400,7 @@ 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
-@@ -560,6 +560,7 @@ public abstract class ChromeFeatureList {
+@@ -546,6 +546,7 @@ public abstract class ChromeFeatureList {
              "WebApkTrampolineOnInitialIntent";
      public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting";
      public static final String WEB_OTP_CROSS_DEVICE_SIMPLE_STRING = "WebOtpCrossDeviceSimpleString";
@@ -1478,7 +1478,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
  
      /**
       * Whether Chrome is set as the default browser.
-@@ -1042,6 +1044,7 @@ public final class ChromePreferenceKeys {
+@@ -1059,6 +1061,7 @@ public final class ChromePreferenceKeys {
                  AUTOFILL_ASSISTANT_PROACTIVE_HELP,
                  APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE,
                  APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO,
@@ -1517,7 +1517,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
-@@ -416,6 +416,9 @@ static_library("common") {
+@@ -412,6 +412,9 @@ static_library("common") {
      sources += [
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.h",
@@ -1539,7 +1539,7 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
        "importer/bookmarks_file_importer.cc",
        "importer/bookmarks_file_importer.h",
        "importer/external_process_importer_bridge.cc",
-@@ -184,6 +182,11 @@ static_library("utility") {
+@@ -185,6 +183,11 @@ static_library("utility") {
      }
    }
  
@@ -1717,7 +1717,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
          return mimeTypes;
      }
  
-@@ -812,6 +820,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -811,6 +819,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          return countAcceptTypesFor(superType) == mFileTypes.size();
      }
  

+ 5 - 5
build/patches/Add-custom-tab-intents-privacy-option.patch

@@ -20,7 +20,7 @@ See also: https://github.com/bromite/bromite/issues/1474
 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
-@@ -56,6 +56,16 @@
+@@ -60,6 +60,16 @@
          android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
          android:key="do_not_track"
          android:title="@string/do_not_track_title"/>
@@ -133,7 +133,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
          PrivacyPreferencesManagerImpl privacyPrefManager =
-@@ -191,6 +194,9 @@ public class PrivacySettings
+@@ -190,6 +193,9 @@ public class PrivacySettings
          updateSummaries();
      }
  
@@ -143,7 +143,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          String key = preference.getKey();
-@@ -222,6 +228,14 @@ public class PrivacySettings
+@@ -221,6 +227,14 @@ public class PrivacySettings
          } else if (PREF_INCOGNITO_TAB_HISTORY_ENABLED.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED, (boolean) newValue);
@@ -158,7 +158,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          }
  
          return true;
-@@ -257,6 +271,16 @@ public class PrivacySettings
+@@ -256,6 +270,16 @@ public class PrivacySettings
              canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
          }
  
@@ -194,7 +194,7 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAsso
 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
-@@ -4496,6 +4496,21 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -4555,6 +4555,21 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_NEAR_OOM_REDUCTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can be reloaded.">
           Show original
        </message>

+ 4 - 4
build/patches/Add-exit-menu-item.patch

@@ -37,7 +37,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
-@@ -206,6 +206,8 @@ import java.util.HashSet;
+@@ -208,6 +208,8 @@ import java.util.HashSet;
  import java.util.List;
  import java.util.Locale;
  
@@ -46,7 +46,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  /**
   * This is the main activity for ChromeMobile when not running in document mode.  All the tabs
   * are accessible via a chrome specific tab switching UI.
-@@ -2008,6 +2010,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -2028,6 +2030,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          } else if (id == R.id.close_tab) {
              getCurrentTabModel().closeTab(currentTab, true, false, true);
              RecordUserAction.record("MobileTabClosed");
@@ -66,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.ChromeActivitySessionTracker;
  import org.chromium.chrome.browser.ChromeApplicationImpl;
  import org.chromium.chrome.browser.ChromeKeyboardVisibilityDelegate;
-@@ -2303,6 +2304,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2309,6 +2310,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              return true;
          }
  
@@ -97,7 +97,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife
 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
-@@ -3144,6 +3144,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -3193,6 +3193,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_MENU_REQUEST_DESKTOP_SITE_OFF" desc="Accessibility description for when Request Desktop Site is disabled.">
          Turn on Request desktop site
        </message>

+ 3 - 3
build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch

@@ -15,7 +15,7 @@ and internal chrome:// pages will be used for the autocomplete results.
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -449,6 +449,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = {
+@@ -456,6 +456,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = {
       base::size(kReaderModeOfferInSettings), nullptr}};
  #endif  // OS_ANDROID
  
@@ -38,7 +38,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  #if defined(OS_ANDROID)
  const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNone[] = {
      {"mode", "always-none"}};
-@@ -4766,6 +4782,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4973,6 +4989,11 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)},
  #endif  // !defined(OS_ANDROID)
  
@@ -81,7 +81,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/
 diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc
 --- a/components/omnibox/browser/history_url_provider.cc
 +++ b/components/omnibox/browser/history_url_provider.cc
-@@ -553,6 +553,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
+@@ -551,6 +551,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
    if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY)
      matches_.push_back(what_you_typed_match);
  

+ 5 - 5
build/patches/Add-flag-for-save-data-header.patch

@@ -14,7 +14,7 @@ Subject: Add flag for save-data-header
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -4500,6 +4500,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4700,6 +4700,9 @@ const FeatureEntry kFeatureEntries[] = {
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
  #if defined(OS_ANDROID)
@@ -27,7 +27,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1035,6 +1035,10 @@ const char kDisableKeepaliveFetchDescription[] =
+@@ -1058,6 +1058,10 @@ const char kDisableKeepaliveFetchDescription[] =
      "Disable fetch with keepalive set "
      "(https://fetch.spec.whatwg.org/#request-keepalive-flag).";
  
@@ -41,7 +41,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -564,6 +564,9 @@ extern const char kDiagnosticsAppNavigationDescription[];
+@@ -583,6 +583,9 @@ extern const char kDiagnosticsAppNavigationDescription[];
  extern const char kDisableKeepaliveFetchName[];
  extern const char kDisableKeepaliveFetchDescription[];
  
@@ -70,7 +70,7 @@ diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/cont
 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
-@@ -156,6 +156,10 @@ const base::FeatureParam<std::string>
+@@ -140,6 +140,10 @@ const base::FeatureParam<std::string>
                                                 "DisabledProviders", ""};
  
  // Disable special treatment on requests with keepalive set (see
@@ -84,7 +84,7 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c
 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
-@@ -60,6 +60,8 @@ extern const base::FeatureParam<std::string>
+@@ -54,6 +54,8 @@ extern const base::FeatureParam<std::string>
  COMPONENT_EXPORT(NETWORK_CPP)
  extern const base::Feature kDisableKeepaliveFetch;
  

+ 4 - 4
build/patches/Add-flag-to-configure-maximum-connections-per-host.patch

@@ -19,7 +19,7 @@ with limited CPU/memory resources and it is disabled by default.
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -837,6 +837,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+@@ -868,6 +868,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
       net::kEffectiveConnectionType4G},
  };
  
@@ -31,7 +31,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  // Ensure that all effective connection types returned by Network Quality
  // Estimator (NQE) are also exposed via flags.
  static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 ==
-@@ -3792,6 +3797,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3974,6 +3979,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kAndroidPictureInPictureAPIName,
       flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)},
@@ -44,7 +44,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1524,6 +1524,10 @@ const char kMediaHistoryDescription[] =
+@@ -1572,6 +1572,10 @@ const char kMediaHistoryDescription[] =
      "Enables Media History which records data around media playbacks on "
      "websites.";
  
@@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -877,6 +877,9 @@ extern const char kLogJsConsoleMessagesDescription[];
+@@ -905,6 +905,9 @@ extern const char kLogJsConsoleMessagesDescription[];
  extern const char kMediaHistoryName[];
  extern const char kMediaHistoryDescription[];
  

+ 3 - 3
build/patches/Add-flag-to-control-video-playback-resume-feature.patch

@@ -13,7 +13,7 @@ Disable it by default on Android as it is everywhere else
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -2708,6 +2708,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2837,6 +2837,10 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kWebRtcRemoteEventLogName,
       flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop,
       FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)},
@@ -27,7 +27,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1120,6 +1120,11 @@ const char kEnablePenetratingImageSelectionDescription[] =
+@@ -1143,6 +1143,11 @@ const char kEnablePenetratingImageSelectionDescription[] =
      "Enables image options to be surfaced in the context menu for nodes "
      "covered by transparent overlays.";
  
@@ -42,7 +42,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -632,6 +632,9 @@ extern const char kEnablePortalsDescription[];
+@@ -648,6 +648,9 @@ extern const char kEnablePortalsDescription[];
  extern const char kEnablePortalsCrossOriginName[];
  extern const char kEnablePortalsCrossOriginDescription[];
  

+ 5 - 5
build/patches/Add-flag-to-disable-IPv6-probes.patch

@@ -16,7 +16,7 @@ Subject: Add flag to disable IPv6 probes
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -4742,6 +4742,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4949,6 +4949,11 @@ const FeatureEntry kFeatureEntries[] = {
  #endif  // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) ||
          // defined(OS_CHROMEOS)
  
@@ -31,7 +31,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3015,6 +3015,10 @@ const char kContextualSearchRankerQueryDescription[] =
+@@ -3070,6 +3070,10 @@ const char kContextualSearchRankerQueryDescription[] =
  
  const char kContextualSearchSecondTapName[] =
      "Contextual Search second tap triggering";
@@ -45,7 +45,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -689,6 +689,9 @@ extern const char kEnableWasmLazyCompilationName[];
+@@ -711,6 +711,9 @@ extern const char kEnableWasmLazyCompilationName[];
  extern const char kEnableWasmLazyCompilationDescription[];
  
  extern const char kEnableWasmTieringName[];
@@ -101,7 +101,7 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/net/dns/host_resolver_manager.cc
-@@ -86,6 +86,7 @@
+@@ -88,6 +88,7 @@
  #include "net/log/net_log_event_type.h"
  #include "net/log/net_log_source.h"
  #include "net/log/net_log_source_type.h"
@@ -109,7 +109,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
  #include "net/log/net_log_with_source.h"
  #include "net/socket/client_socket_factory.h"
  #include "net/socket/datagram_client_socket.h"
-@@ -3512,8 +3513,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
+@@ -3692,8 +3693,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
    if (last_ipv6_probe_time_.is_null() ||
        (tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
            kIPv6ProbePeriodMs) {

+ 3 - 3
build/patches/Add-flag-to-disable-WebGL.patch

@@ -11,7 +11,7 @@ Subject: Add flag to disable WebGL
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -2643,6 +2643,9 @@ const FeatureEntry::FeatureVariation kReadLaterVariations[] = {
+@@ -2772,6 +2772,9 @@ const FeatureEntry::Choice kDocumentTransitionSlowdownFactorChoices[] = {
  // When adding a new choice, add it to the end of the list.
  const FeatureEntry kFeatureEntries[] = {
  // Include generated flags for flag unexpiry; see //docs/flag_expiry.md and
@@ -24,7 +24,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -613,6 +613,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement";
+@@ -636,6 +636,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement";
  const char kEnableAudioFocusEnforcementDescription[] =
      "Enables enforcement of a single media session having audio focus at "
      "any one time. Requires #enable-media-session-service to be enabled too.";
@@ -38,7 +38,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -341,6 +341,9 @@ extern const char kForceColorProfileSRGB[];
+@@ -354,6 +354,9 @@ extern const char kForceColorProfileSRGB[];
  extern const char kForceColorProfileP3[];
  extern const char kForceColorProfileColorSpin[];
  extern const char kForceColorProfileSCRGBLinear[];

+ 3 - 3
build/patches/Add-flag-to-disable-external-intent-requests.patch

@@ -11,7 +11,7 @@ Subject: Add flag to disable external intent requests
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -2697,6 +2697,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2826,6 +2826,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kWebrtcCaptureMultiChannelApmName,
       flag_descriptions::kWebrtcCaptureMultiChannelApmDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kWebRtcEnableCaptureMultiChannelApm)},
@@ -24,7 +24,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3272,6 +3272,12 @@ const char kProcessSharingWithStrictSiteInstancesDescription[] =
+@@ -3344,6 +3344,12 @@ const char kProcessSharingWithStrictSiteInstancesDescription[] =
      "separated like strict site isolation, but process selection puts multiple "
      "site instances in a single process.";
  
@@ -40,7 +40,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -1883,6 +1883,9 @@ extern const char kQueryTilesNTPDescription[];
+@@ -1930,6 +1930,9 @@ extern const char kQueryTilesNTPDescription[];
  extern const char kQueryTilesOmniboxName[];
  extern const char kQueryTilesOmniboxDescription[];
  extern const char kQueryTilesSingleTierName[];

+ 0 - 58
build/patches/Add-flag-to-disable-pull-to-refresh-effect.patch

@@ -1,58 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Mon, 18 Oct 2021 20:50:48 +0200
-Subject: Add flag to disable pull to refresh effect
-
----
- chrome/browser/about_flags.cc       | 6 ++++++
- chrome/browser/flag_descriptions.cc | 6 ++++++
- chrome/browser/flag_descriptions.h  | 3 +++
- 3 files changed, 15 insertions(+)
-
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7477,6 +7477,12 @@ const FeatureEntry kFeatureEntries[] = {
-      flag_descriptions::kPrivacyReviewDescription, kOsDesktop | kOsAndroid,
-      FEATURE_VALUE_TYPE(features::kPrivacyReview)},
- 
-+#if defined(OS_ANDROID)
-+    {switches::kDisablePullToRefreshEffect, flag_descriptions::kDisablePullToRefreshEffectName,
-+     flag_descriptions::kDisablePullToRefreshEffectDescription, kOsAndroid,
-+     SINGLE_VALUE_TYPE(switches::kDisablePullToRefreshEffect)},
-+#endif
-+
- #if defined(OS_ANDROID)
-     {"google-mobile-services-passwords",
-      flag_descriptions::kUnifiedPasswordManagerAndroidName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -1451,6 +1451,12 @@ const char kIncognitoClearBrowsingDataDialogForDesktopDescription[] =
-     "When enabled, clear browsing data option would be enabled in Incognito "
-     "which upon clicking would show a dialog to close all Incognito windows.";
- 
-+const char kDisablePullToRefreshEffectName[] =
-+    "Disable the pull-to-refresh effect when vertically overscrolling content.";
-+const char kDisablePullToRefreshEffectDescription[] =
-+    "Disable the pull-to-refresh effect with the elastic overscroll feature "
-+    "used to indicate that the user is scrolling beyond the range of the scrollable area.";
-+
- const char kUpdateHistoryEntryPointsInIncognitoName[] =
-     "Update history entry points in Incognito.";
- const char kUpdateHistoryEntryPointsInIncognitoDescription[] =
-diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
---- a/chrome/browser/flag_descriptions.h
-+++ b/chrome/browser/flag_descriptions.h
-@@ -564,6 +564,9 @@ extern const char kDiagnosticsAppDescription[];
- extern const char kDiagnosticsAppNavigationName[];
- extern const char kDiagnosticsAppNavigationDescription[];
- 
-+extern const char kDisablePullToRefreshEffectName[];
-+extern const char kDisablePullToRefreshEffectDescription[];
-+
- extern const char kDisableKeepaliveFetchName[];
- extern const char kDisableKeepaliveFetchDescription[];
- 
--- 
-2.17.1
-

+ 8 - 8
build/patches/Add-flag-to-disable-vibration.patch

@@ -18,7 +18,7 @@ Subject: Add flag to disable vibration
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -6207,6 +6207,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -6412,6 +6412,10 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(features::kNewMacNotificationAPI)},
  #endif
  
@@ -32,7 +32,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -5127,6 +5127,9 @@ const char kDefaultMeetWebAppDescription[] =
+@@ -5242,6 +5242,9 @@ const char kDefaultMeetWebAppDescription[] =
      "Enables the Meet web app to be installed by default.";
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
  
@@ -45,7 +45,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -2968,6 +2968,9 @@ extern const char kDefaultMeetWebAppName[];
+@@ -3044,6 +3044,9 @@ extern const char kDefaultMeetWebAppName[];
  extern const char kDefaultMeetWebAppDescription[];
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
  
@@ -70,19 +70,19 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c
 --- a/content/public/common/content_features.cc
 +++ b/content/public/common/content_features.cc
 @@ -103,6 +103,9 @@ const base::Feature kBackForwardCacheSameSiteForBots{
+ 
  // BackForwardCacheMemoryControls is enabled only on Android to disable
  // BackForwardCache for lower memory devices due to memory limiations.
- #if defined(OS_ANDROID)
 +// Enables vibration; an user gesture will still be required if enabled.
 +const base::Feature kVibration{"Vibration",
 +                                    base::FEATURE_DISABLED_BY_DEFAULT};
  const base::Feature kBackForwardCacheMemoryControls{
-     "BackForwardCacheMemoryControls", base::FEATURE_ENABLED_BY_DEFAULT};
- #else
+   "BackForwardCacheMemoryControls",
+ 
 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
-@@ -266,6 +266,8 @@ CONTENT_EXPORT extern const base::Feature kWarmUpNetworkProcess;
+@@ -273,6 +273,8 @@ CONTENT_EXPORT extern const base::Feature kWarmUpNetworkProcess;
  CONTENT_EXPORT extern const base::Feature kWebNfc;
  #endif  // defined(OS_ANDROID)
  
@@ -139,7 +139,7 @@ diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.c
 diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
-@@ -1537,6 +1537,10 @@
+@@ -1575,6 +1575,10 @@
        name: "OrientationEvent",
        status: {"Android": "stable"},
      },

+ 22 - 20
build/patches/Add-history-support-in-incognito-mode.patch

@@ -68,7 +68,7 @@ diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/
 diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
 --- a/chrome/android/chrome_test_java_sources.gni
 +++ b/chrome/android/chrome_test_java_sources.gni
-@@ -645,3 +645,9 @@ chrome_test_java_sources = [
+@@ -649,3 +649,9 @@ chrome_test_java_sources = [
  if (enable_feed_v2) {
    chrome_test_java_sources += [ "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageColorWithFeedV2Test.java" ]
  }
@@ -81,7 +81,7 @@ diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome
 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
-@@ -42,6 +42,11 @@
+@@ -46,6 +46,11 @@
          android:title="@string/close_tabs_on_exit_title"
          android:summary="@string/close_tabs_on_exit_summary"
          android:defaultValue="false" />
@@ -176,7 +176,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
-@@ -66,6 +66,10 @@ import org.chromium.ui.widget.Toast;
+@@ -71,6 +71,10 @@ import org.chromium.ui.widget.Toast;
  
  import java.io.File;
  
@@ -187,7 +187,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
  /**
   * A class containing some utility static methods.
   */
-@@ -306,7 +310,17 @@ public class DownloadUtils {
+@@ -311,7 +315,17 @@ public class DownloadUtils {
          // Offline pages isn't supported in Incognito. This should be checked before calling
          // OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found
          // for incognito profile.
@@ -222,7 +222,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
  /**
   * Combines and manages the different UI components of browsing history.
   */
-@@ -217,7 +223,16 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve
+@@ -216,7 +222,16 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve
                                                  : mSelectableListLayout;
      }
  
@@ -305,7 +305,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
-@@ -137,6 +138,11 @@ public class PrivacySettings
+@@ -136,6 +137,11 @@ public class PrivacySettings
          Preference secureDnsPref = findPreference(PREF_SECURE_DNS);
          secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled());
  
@@ -317,7 +317,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          updateSummaries();
      }
  
-@@ -159,11 +165,16 @@ public class PrivacySettings
+@@ -158,11 +164,16 @@ public class PrivacySettings
          } else if (PREF_HTTPS_FIRST_MODE.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue);
@@ -334,7 +334,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onResume() {
          super.onResume();
-@@ -204,6 +215,13 @@ public class PrivacySettings
+@@ -203,6 +214,13 @@ public class PrivacySettings
                  (ChromeSwitchPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
          closeTabsOnExitPref.setOnPreferenceChangeListener(this);
          closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
@@ -1274,7 +1274,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo
  #else
  #include "chrome/browser/ui/browser.h"
  #include "chrome/browser/ui/browser_finder.h"
-@@ -299,6 +302,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) {
+@@ -345,6 +348,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) {
  history::HistoryService* HistoryTabHelper::GetHistoryService() {
    Profile* profile =
        Profile::FromBrowserContext(web_contents()->GetBrowserContext());
@@ -1288,7 +1288,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo
    if (profile->IsOffTheRecord())
      return NULL;
  
-@@ -306,6 +316,12 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() {
+@@ -352,6 +362,12 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() {
        profile, ServiceAccessType::IMPLICIT_ACCESS);
  }
  
@@ -1325,9 +1325,9 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor
   private:
    explicit HistoryTabHelper(content::WebContents* web_contents);
    friend class content::WebContentsUserData<HistoryTabHelper>;
-@@ -53,9 +60,6 @@ class HistoryTabHelper : public content::WebContentsObserver,
-   void TitleWasSet(content::NavigationEntry* entry) override;
-   void WebContentsDestroyed() override;
+@@ -65,9 +72,6 @@ class HistoryTabHelper : public content::WebContentsObserver,
+                            bool started_from_context_menu,
+                            bool renderer_initiated) override;
  
 -  // Helper function to return the history service.  May return null.
 -  history::HistoryService* GetHistoryService();
@@ -1348,8 +1348,8 @@ diff --git a/chrome/browser/history/history_tab_helper_unittest.cc b/chrome/brow
  namespace {
  
  #if defined(OS_ANDROID)
-@@ -271,4 +274,23 @@ TEST_F(HistoryTabHelperTest, FeedNavigationsDoNotContributeToMostVisited) {
- 
+@@ -48,6 +51,25 @@ class TestFeedApi : public feed::StubFeedApi {
+ };
  #endif
  
 +TEST_F(HistoryTabHelperTest, Bromite_CheckHistoryService_IncognitoTabHistoryEnabled) {
@@ -1372,6 +1372,8 @@ diff --git a/chrome/browser/history/history_tab_helper_unittest.cc b/chrome/brow
 +}
 +
  }  // namespace
+ 
+ class HistoryTabHelperTest : public ChromeRenderViewHostTestHarness {
 diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrome/browser/offline_pages/android/offline_page_bridge.cc
 --- a/chrome/browser/offline_pages/android/offline_page_bridge.cc
 +++ b/chrome/browser/offline_pages/android/offline_page_bridge.cc
@@ -1577,7 +1579,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
  #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
  #include "chrome/browser/android/explore_sites/history_statistics_reporter.h"
  #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h"
-@@ -1210,6 +1212,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
+@@ -1239,6 +1241,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
    variations::VariationsService::RegisterProfilePrefs(registry);
    video_tutorials::RegisterPrefs(registry);
    feed::prefs::RegisterFeedSharedProfilePrefs(registry);
@@ -1666,7 +1668,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/
 diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
 +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
-@@ -938,6 +938,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -953,6 +953,12 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_UI_RELAUNCH_NOTICE" desc="Summary for always incognito mode">
          Your changes will take effect the next time you relaunch Bromite.
        </message>
@@ -1682,7 +1684,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/chrome/common/pref_names.cc
-@@ -3225,6 +3225,11 @@ const char kLacrosAllowed[] = "lacros_allowed";
+@@ -3238,6 +3238,11 @@ const char kShowCaretBrowsingDialog[] =
  const char kLacrosLaunchSwitch[] = "lacros_launch_switch";
  #endif
  
@@ -1697,7 +1699,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 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
-@@ -1184,6 +1184,10 @@ extern const char kLastWhatsNewVersion[];
+@@ -1192,6 +1192,10 @@ extern const char kLastWhatsNewVersion[];
  extern const char kLensRegionSearchEnabled[];
  #endif
  
@@ -1711,7 +1713,7 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
 diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
 --- a/chrome/test/BUILD.gn
 +++ b/chrome/test/BUILD.gn
-@@ -4669,6 +4669,11 @@ test("unit_tests") {
+@@ -4837,6 +4837,11 @@ test("unit_tests") {
      ]
    }
  

+ 5 - 5
build/patches/Add-menu-item-to-bookmark-all-tabs.patch

@@ -62,7 +62,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
  import org.chromium.chrome.browser.browserservices.intents.WebappConstants;
  import org.chromium.chrome.browser.compositor.CompositorViewHolder;
-@@ -2020,6 +2022,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -2040,6 +2042,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              // Close both incognito and normal tabs
              getTabModelSelector().closeAllTabs();
              RecordUserAction.record("MobileMenuCloseAllTabs");
@@ -71,7 +71,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
          } else if (id == R.id.close_all_incognito_tabs_menu_id) {
              // Close only incognito tabs
              getTabModelSelector().getModel(true).closeAllTabs();
-@@ -2069,6 +2073,28 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -2089,6 +2093,28 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          mTabModalHandler.onOmniboxFocusChanged(hasFocus);
      }
  
@@ -236,7 +236,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/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
-@@ -516,6 +516,7 @@ public class BookmarkUtils {
+@@ -515,6 +515,7 @@ public class BookmarkUtils {
          List<BookmarkId> topLevelFolders = new ArrayList<>();
          BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId();
          BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId();
@@ -244,7 +244,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          BookmarkId othersNodeId = bookmarkModel.getOtherFolderId();
  
          List<BookmarkId> specialFoldersIds =
-@@ -541,6 +542,9 @@ public class BookmarkUtils {
+@@ -540,6 +541,9 @@ public class BookmarkUtils {
          if (bookmarkModel.isFolderVisible(mobileNodeId)) {
              topLevelFolders.add(mobileNodeId);
          }
@@ -377,7 +377,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
-@@ -3224,6 +3224,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -3273,6 +3273,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_MENU_TRACK_PRICES" desc="Menu item for tracking prices on tabs. [CHAR_LIMIT=27]">
          Track prices
        </message>

+ 2 - 2
build/patches/Add-menu-item-to-view-source.patch

@@ -41,7 +41,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
-@@ -2043,6 +2043,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -2063,6 +2063,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
                  NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
              }
              RecordUserAction.record("MobileMenuDownloadManager");
@@ -53,7 +53,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
-@@ -2429,6 +2429,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2436,6 +2436,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              return true;
          }
  

+ 5 - 5
build/patches/Add-option-to-force-tablet-UI.patch

@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
 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
-@@ -536,6 +536,7 @@ public final class ChromePreferenceKeys {
+@@ -543,6 +543,7 @@ public final class ChromePreferenceKeys {
      public static final String FONT_USER_SET_FORCE_ENABLE_ZOOM = "user_set_force_enable_zoom";
  
      public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info";
@@ -101,7 +101,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
 diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
 +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
-@@ -1200,6 +1200,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1223,6 +1223,12 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_SAFE_BROWSING_NO_PROTECTION_CONFIRMATION_DIALOG_CONFIRM" desc="Message for Safe Browsing no protection confirmation button.">
          Turn off
        </message>
@@ -129,7 +129,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
 diff --git a/components/BUILD.gn b/components/BUILD.gn
 --- a/components/BUILD.gn
 +++ b/components/BUILD.gn
-@@ -542,7 +542,7 @@ test("components_unittests") {
+@@ -549,7 +549,7 @@ test("components_unittests") {
  
    # On LaCrOS, tests use ash - chrome as a window manager, thus the dependency.
    # On other platforms, no components should depend on Chrome.
@@ -138,7 +138,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
      assert_no_deps = [ "//chrome/*" ]
    }
  
-@@ -789,7 +789,7 @@ if (!is_ios) {
+@@ -798,7 +798,7 @@ if (!is_ios) {
  
      # On LaCrOS, tests use ash - chrome as a window manager, thus the dependency.
      # On other platforms, no components should depend on Chrome.
@@ -150,7 +150,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
 diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
 --- a/ui/android/BUILD.gn
 +++ b/ui/android/BUILD.gn
-@@ -370,6 +370,8 @@ android_library("ui_no_recycler_view_java") {
+@@ -369,6 +369,8 @@ android_library("ui_no_recycler_view_java") {
      ":ui_java_resources",
      ":ui_utils_java",
      "//base:base_java",

+ 6 - 6
build/patches/Add-option-to-not-persist-tabs-across-sessions.patch

@@ -12,7 +12,7 @@ Subject: Add option to not persist tabs across sessions
 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
-@@ -33,6 +33,11 @@
+@@ -37,6 +37,11 @@
          android:title="@string/always_incognito_title"
          android:summary="@string/always_incognito_summary"
          android:defaultValue="false" />
@@ -27,7 +27,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
-@@ -1188,8 +1188,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1185,8 +1185,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -60,15 +60,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
 @@ -59,6 +62,8 @@ public class PrivacySettings
-     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
      private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+     private static final String PREF_PRIVACY_REVIEW = "privacy_review";
  
 +    private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
 +
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
      @Override
-@@ -137,7 +142,11 @@ public class PrivacySettings
+@@ -136,7 +141,11 @@ public class PrivacySettings
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          String key = preference.getKey();
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
-@@ -189,6 +198,11 @@ public class PrivacySettings
+@@ -188,6 +197,11 @@ public class PrivacySettings
              privacySandboxPreference.setSummary(
                      PrivacySandboxSettingsFragment.getStatusString(getContext()));
          }
@@ -96,7 +96,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
 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
-@@ -4032,6 +4032,12 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -4081,6 +4081,12 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_CONTEXTMENU_IMAGE_TITLE" desc="The title of a context menu tab when the item pressed contains more than one type. This indicates that all the actions are related to the image.">
          IMAGE
        </message>

+ 3 - 3
build/patches/Add-support-for-ISupportHelpAndFeedback.patch

@@ -38,9 +38,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin
 diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
 --- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
 +++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
-@@ -126,4 +126,8 @@ public class SettingsUtils {
-         ImageView imageButton = (ImageView) button;
-         return imageButton.getDrawable() == parentMenu.getOverflowIcon();
+@@ -97,4 +97,8 @@ public class SettingsUtils {
+         ToolbarUtils.setOverflowMenuVisibility(toolbar, visibility);
+         return true;
      }
 +
 +    public interface ISupportHelpAndFeedback {

+ 69 - 7
build/patches/Allow-building-without-enable_reporting.patch

@@ -4,17 +4,21 @@ Subject: Allow building without enable_reporting
 
 ---
  content/browser/BUILD.gn                                 | 8 ++++----
+ content/browser/devtools/protocol/network_handler.cc     | 2 ++
+ content/browser/devtools/protocol/network_handler.h      | 2 ++
  .../common/content_switch_dependent_feature_overrides.cc | 3 +++
+ services/network/network_context.cc                      | 2 +-
+ services/network/public/mojom/BUILD.gn                   | 3 +++
  third_party/blink/renderer/core/frame/local_frame.cc     | 3 +++
  third_party/blink/renderer/core/frame/local_frame.h      | 6 +++---
  .../blink/renderer/core/frame/reporting_context.cc       | 9 +++++++++
  .../blink/renderer/core/frame/reporting_context.h        | 7 +++++--
- 6 files changed, 27 insertions(+), 9 deletions(-)
+ 10 files changed, 35 insertions(+), 10 deletions(-)
 
 diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
 --- a/content/browser/BUILD.gn
 +++ b/content/browser/BUILD.gn
-@@ -1240,6 +1240,10 @@ source_set("browser") {
+@@ -1251,6 +1251,10 @@ source_set("browser") {
      "net/browser_online_state_observer.cc",
      "net/browser_online_state_observer.h",
      "net/cookie_store_factory.cc",
@@ -25,7 +29,7 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
      "net/network_errors_listing_ui.cc",
      "net/network_errors_listing_ui.h",
      "net/network_quality_observer_impl.cc",
-@@ -2989,10 +2993,6 @@ source_set("browser") {
+@@ -3009,10 +3013,6 @@ source_set("browser") {
  
    if (enable_reporting) {
      sources += [
@@ -36,6 +40,39 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
        "net/reporting_service_proxy.cc",
        "net/reporting_service_proxy.h",
      ]
+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
+@@ -451,6 +451,7 @@ std::vector<GURL> ComputeCookieURLs(RenderFrameHostImpl* frame_host,
+   return urls;
+ }
+ 
++#if BUILDFLAG(ENABLE_REPORTING)
+ std::vector<GURL> ComputeReportingURLs(RenderFrameHostImpl* frame_host) {
+   std::vector<GURL> urls;
+   base::queue<FrameTreeNode*> queue;
+@@ -468,6 +469,7 @@ std::vector<GURL> ComputeReportingURLs(RenderFrameHostImpl* frame_host) {
+   }
+   return urls;
+ }
++#endif  // BUILDFLAG(ENABLE_REPORTING)
+ 
+ String resourcePriority(net::RequestPriority priority) {
+   switch (priority) {
+diff --git a/content/browser/devtools/protocol/network_handler.h b/content/browser/devtools/protocol/network_handler.h
+--- a/content/browser/devtools/protocol/network_handler.h
++++ b/content/browser/devtools/protocol/network_handler.h
+@@ -304,8 +304,10 @@ class NetworkHandler : public DevToolsDomainHandler,
+       Response response,
+       mojo::ScopedDataPipeConsumerHandle pipe,
+       const std::string& mime_type);
++#if BUILDFLAG(ENABLE_REPORTING)
+   std::unique_ptr<protocol::Network::ReportingApiReport> BuildProtocolReport(
+       const net::ReportingReport& report);
++#endif  // BUILDFLAG(ENABLE_REPORTING)
+ 
+   // TODO(dgozman): Remove this.
+   const std::string host_id_;
 diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc
 --- a/content/public/common/content_switch_dependent_feature_overrides.cc
 +++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -47,7 +84,7 @@ diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc
  #include "services/network/public/cpp/features.h"
  #include "services/network/public/cpp/network_switches.h"
  #include "third_party/blink/public/common/features.h"
-@@ -46,9 +47,11 @@ GetSwitchDependentFeatureOverrides(const base::CommandLine& command_line) {
+@@ -40,9 +41,11 @@ GetSwitchDependentFeatureOverrides(const base::CommandLine& command_line) {
        {switches::kEnableExperimentalWebPlatformFeatures,
         std::cref(features::kDocumentPolicyNegotiation),
         base::FeatureList::OVERRIDE_ENABLE_FEATURE},
@@ -59,6 +96,31 @@ diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc
        {switches::kEnableExperimentalWebPlatformFeatures,
         std::cref(features::kExperimentalContentSecurityPolicyFeatures),
         base::FeatureList::OVERRIDE_ENABLE_FEATURE},
+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
+@@ -1118,7 +1118,7 @@ void NetworkContext::SetDocumentReportingEndpoints(
+ 
+ void NetworkContext::SendReportsAndRemoveSource(
+     const base::UnguessableToken& reporting_source) {
+-  NOTREACHED();
++  // NOTREACHED(); removed for build in debug
+ }
+ 
+ void NetworkContext::QueueReport(
+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
+@@ -888,6 +888,9 @@ mojom("mojom") {
+     export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
+     export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
+     export_header_blink = "third_party/blink/public/platform/web_common.h"
++  }
++
++  if (enable_reporting) {
+     enabled_features += [ "enable_reporting" ]
+   }
+ 
 diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
 --- a/third_party/blink/renderer/core/frame/local_frame.cc
 +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -85,8 +147,8 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/
 diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
 --- a/third_party/blink/renderer/core/frame/local_frame.h
 +++ b/third_party/blink/renderer/core/frame/local_frame.h
-@@ -33,9 +33,9 @@
- 
+@@ -34,9 +34,9 @@
+ #include "base/gtest_prod_util.h"
  #include "base/time/default_tick_clock.h"
  #include "base/unguessable_token.h"
 -#include "build/build_config.h"
@@ -96,7 +158,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b
  #include "services/device/public/mojom/device_posture_provider.mojom-blink-forward.h"
  #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h"
  #include "third_party/blink/public/common/frame/frame_ad_evidence.h"
-@@ -543,9 +543,9 @@ class CORE_EXPORT LocalFrame final : public Frame,
+@@ -544,9 +544,9 @@ class CORE_EXPORT LocalFrame final : public Frame,
    }
  
    SmoothScrollSequencer& GetSmoothScrollSequencer();

+ 2 - 2
build/patches/Allow-playing-audio-in-background.patch

@@ -23,7 +23,7 @@ diff --git a/third_party/blink/public/platform/media/web_media_player_impl.h b/t
 diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
 --- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
 +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
-@@ -1118,6 +1118,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
+@@ -1120,6 +1120,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
    return pipeline_metadata_.has_audio;
  }
  
@@ -36,7 +36,7 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
  void WebMediaPlayerImpl::EnabledAudioTracksChanged(
      const WebVector<WebMediaPlayer::TrackId>& enabledTrackIds) {
    DCHECK(main_task_runner_->BelongsToCurrentThread());
-@@ -3490,7 +3496,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
+@@ -3492,7 +3498,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
    // Audio only stream is allowed to play when in background.
    // TODO: We should check IsBackgroundOptimizationCandidate here. But we need
    // to move the logic of checking video frames out of that function.

+ 0 - 38
build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch

@@ -1,38 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Tue, 5 Jun 2018 13:46:40 +0200
-Subject: Always respect async dns flag (regardless of SDK version)
-
-Do not read experiment value for cronet async DNS configuration
----
- chrome/browser/net/system_network_context_manager.cc | 2 +-
- components/cronet/url_request_context_config.cc      | 3 ++-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
---- a/chrome/browser/net/system_network_context_manager.cc
-+++ b/chrome/browser/net/system_network_context_manager.cc
-@@ -157,7 +157,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams(
-       local_state->GetBoolean(prefs::kNtlmV2Enabled);
- #endif  // defined(OS_POSIX)
- 
--#if defined(OS_ANDROID)
-+#if 0
-   auth_dynamic_params->android_negotiate_account_type =
-       local_state->GetString(prefs::kAuthAndroidNegotiateAccountType);
- #endif  // defined(OS_ANDROID)
-diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
---- a/components/cronet/url_request_context_config.cc
-+++ b/components/cronet/url_request_context_config.cc
-@@ -592,7 +592,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
-         effective_experimental_options->RemoveKey(it.key());
-         continue;
-       }
--      async_dns_args->GetBoolean(kAsyncDnsEnable, &async_dns_enable);
-+      bool ignored;
-+      async_dns_args->GetBoolean(kAsyncDnsEnable, &ignored);
-     } else if (it.key() == kStaleDnsFieldTrialName) {
-       const base::DictionaryValue* stale_dns_args = nullptr;
-       if (!it.value().GetAsDictionary(&stale_dns_args)) {
--- 
-2.17.1
-

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 180 - 118
build/patches/Automated-domain-substitution.patch


+ 2 - 2
build/patches/Block-gateway-attacks-via-websockets.patch

@@ -17,7 +17,7 @@ Subject: Block gateway attacks via websockets
 diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third_party/blink/renderer/core/loader/base_fetch_context.h
 --- a/third_party/blink/renderer/core/loader/base_fetch_context.h
 +++ b/third_party/blink/renderer/core/loader/base_fetch_context.h
-@@ -82,6 +82,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext {
+@@ -83,6 +83,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext {
  
    virtual SubresourceFilter* GetSubresourceFilter() const = 0;
    virtual bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const = 0;
@@ -28,7 +28,7 @@ diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third
 diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
 --- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
 +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
-@@ -568,6 +568,24 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
+@@ -579,6 +579,24 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
    return should_block_request;
  }
  

+ 6 - 6
build/patches/Block-qjz9zk-or-trk-requests.patch

@@ -104,7 +104,7 @@ diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/ur
 diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
 --- a/content/browser/child_process_security_policy_impl.cc
 +++ b/content/browser/child_process_security_policy_impl.cc
-@@ -819,6 +819,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
+@@ -821,6 +821,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
  #endif  // BUILDFLAG(ENABLE_WEBSOCKETS)
    RegisterWebSafeScheme(url::kFtpScheme);
    RegisterWebSafeScheme(url::kDataScheme);
@@ -115,7 +115,7 @@ diff --git a/content/browser/child_process_security_policy_impl.cc b/content/bro
 diff --git a/net/BUILD.gn b/net/BUILD.gn
 --- a/net/BUILD.gn
 +++ b/net/BUILD.gn
-@@ -1042,6 +1042,8 @@ component("net") {
+@@ -1037,6 +1037,8 @@ component("net") {
      "url_request/url_request_http_job.cc",
      "url_request/url_request_http_job.h",
      "url_request/url_request_interceptor.cc",
@@ -201,7 +201,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
  #include "base/synchronization/lock.h"
  #include "base/threading/thread_task_runner_handle.h"
  #include "base/values.h"
-@@ -44,6 +45,7 @@
+@@ -46,6 +47,7 @@
  #include "net/url_request/url_request_redirect_job.h"
  #include "url/gurl.h"
  #include "url/origin.h"
@@ -209,7 +209,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
  
  using base::Time;
  using std::string;
-@@ -580,6 +582,12 @@ URLRequest::URLRequest(const GURL& url,
+@@ -584,6 +586,12 @@ URLRequest::URLRequest(const GURL& url,
    // Sanity check out environment.
    DCHECK(base::ThreadTaskRunnerHandle::IsSet());
  
@@ -233,7 +233,7 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur
  #include "net/url_request/url_request_context.h"
  #include "net/url_request/url_request_context_storage.h"
  #include "net/url_request/url_request_job_factory.h"
-@@ -552,6 +553,8 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
+@@ -544,6 +545,8 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
      job_factory->SetProtocolHandler(scheme_handler.first,
                                      std::move(scheme_handler.second));
    }
@@ -241,7 +241,7 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur
 +                                  std::make_unique<TrkProtocolHandler>());
    protocol_handlers_.clear();
  
- #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+   storage->set_job_factory(std::move(job_factory));
 diff --git a/url/url_constants.cc b/url/url_constants.cc
 --- a/url/url_constants.cc
 +++ b/url/url_constants.cc

+ 16 - 16
build/patches/Bromite-AdBlockUpdaterService.patch

@@ -60,7 +60,7 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
 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
-@@ -566,6 +566,7 @@ chrome_java_resources = [
+@@ -564,6 +564,7 @@ chrome_java_resources = [
    "java/res/layout/account_chooser_dialog_title.xml",
    "java/res/layout/account_divider_preference.xml",
    "java/res/layout/account_management_account_row.xml",
@@ -79,7 +79,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
-@@ -991,6 +991,8 @@ chrome_java_sources = [
+@@ -990,6 +990,8 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/payments/ui/ShoppingCart.java",
    "java/src/org/chromium/chrome/browser/permissions/PermissionSettingsBridge.java",
    "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java",
@@ -423,7 +423,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod
 diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
 --- a/chrome/app/generated_resources.grd
 +++ b/chrome/app/generated_resources.grd
-@@ -10805,6 +10805,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10853,6 +10853,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
        Never show this again.
      </message>
  
@@ -473,7 +473,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
  
  class BackgroundModeManager;
  class BrowserProcessPlatformPart;
-@@ -67,6 +68,10 @@ namespace component_updater {
+@@ -71,6 +72,10 @@ namespace component_updater {
  class ComponentUpdateService;
  }
  
@@ -484,7 +484,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
  namespace extensions {
  class EventRouterForwarder;
  }
-@@ -234,6 +239,7 @@ class BrowserProcess {
+@@ -238,6 +243,7 @@ class BrowserProcess {
  #endif
  
    virtual component_updater::ComponentUpdateService* component_updater() = 0;
@@ -495,7 +495,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
 diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
 --- a/chrome/browser/browser_process_impl.cc
 +++ b/chrome/browser/browser_process_impl.cc
-@@ -1053,6 +1053,26 @@ BrowserProcessImpl::component_updater() {
+@@ -1070,6 +1070,26 @@ BrowserProcessImpl::component_updater() {
    return component_updater_.get();
  }
  
@@ -525,7 +525,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro
 diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h
 --- a/chrome/browser/browser_process_impl.h
 +++ b/chrome/browser/browser_process_impl.h
-@@ -194,6 +194,7 @@ class BrowserProcessImpl : public BrowserProcess,
+@@ -200,6 +200,7 @@ class BrowserProcessImpl : public BrowserProcess,
  #endif
  
    component_updater::ComponentUpdateService* component_updater() override;
@@ -533,7 +533,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc
    MediaFileSystemRegistry* media_file_system_registry() override;
    WebRtcLogUploader* webrtc_log_uploader() override;
    network_time::NetworkTimeTracker* network_time_tracker() override;
-@@ -378,6 +379,7 @@ class BrowserProcessImpl : public BrowserProcess,
+@@ -386,6 +387,7 @@ class BrowserProcessImpl : public BrowserProcess,
    // to concerns over integrity of data shared between profiles,
    // but some users of component updater only install per-user.
    std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
@@ -544,7 +544,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc
 diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
 --- a/chrome/browser/chrome_browser_main.cc
 +++ b/chrome/browser/chrome_browser_main.cc
-@@ -1626,6 +1626,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
+@@ -1649,6 +1649,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
      speech::SodaInstaller::GetInstance()->Init(profile_->GetPrefs(),
                                                 browser_process_->local_state());
  #endif  // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
@@ -564,7 +564,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #include "chrome/browser/media/audio_service_util.h"
  #include "chrome/browser/media/router/media_router_feature.h"
  #include "chrome/browser/media/webrtc/audio_debug_recordings_handler.h"
-@@ -3907,16 +3906,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -3916,16 +3915,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
      content::NavigationHandle* handle) {
    std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
  
@@ -581,7 +581,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #if BUILDFLAG(IS_CHROMEOS_ASH)
    MaybeAddThrottle(
        ash::WebTimeLimitNavigationThrottle::MaybeCreateThrottleFor(handle),
-@@ -4022,10 +4011,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -4027,10 +4016,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
                     &throttles);
  #endif
  
@@ -620,7 +620,7 @@ diff --git a/chrome/browser/flags/android/cached_feature_flags.cc b/chrome/brows
 diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
-@@ -265,6 +265,14 @@ public class CachedFeatureFlags {
+@@ -264,6 +264,14 @@ public class CachedFeatureFlags {
                  ChromeFeatureList.isEnabled(ChromeFeatureList.BACKGROUND_THREAD_POOL));
      }
  
@@ -635,7 +635,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
      /**
       * Caches flags that must take effect on startup but are set via native code.
       */
-@@ -470,5 +478,7 @@ public class CachedFeatureFlags {
+@@ -469,5 +477,7 @@ public class CachedFeatureFlags {
      @NativeMethods
      interface Natives {
          boolean isNetworkServiceWarmUpEnabled();
@@ -646,7 +646,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
 diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
 --- a/chrome/browser/net/system_network_context_manager.cc
 +++ b/chrome/browser/net/system_network_context_manager.cc
-@@ -349,6 +349,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -348,6 +348,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
            SSLConfigServiceManager::CreateDefaultManager(local_state_)),
        proxy_config_monitor_(local_state_),
        stub_resolver_config_reader_(local_state_) {
@@ -655,7 +655,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
  #if !defined(OS_ANDROID)
    // QuicAllowed was not part of Android policy.
    const base::Value* value =
-@@ -419,6 +421,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
+@@ -418,6 +420,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
  void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) {
    StubResolverConfigReader::RegisterPrefs(registry);
  
@@ -705,7 +705,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/chrome/common/pref_names.cc
-@@ -2188,6 +2188,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
+@@ -2194,6 +2194,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
  // capture devices without prompt.
  const char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls";
  

+ 25 - 25
build/patches/Bromite-auto-updater.patch

@@ -54,7 +54,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
 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
-@@ -887,6 +887,7 @@ chrome_java_sources = [
+@@ -886,6 +886,7 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java",
    "java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateControllerFactory.java",
    "java/src/org/chromium/chrome/browser/omaha/inline/NoopInlineUpdateController.java",
@@ -298,7 +298,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateSta
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
-@@ -43,7 +43,8 @@ public class VersionNumberGetter {
+@@ -42,7 +42,8 @@ public class VersionNumberGetter {
      private static VersionNumberGetter sInstanceForTests;
  
      /** If false, OmahaClient will never report that a newer version is available. */
@@ -537,7 +537,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/In
 diff --git a/chrome/browser/endpoint_fetcher/BUILD.gn b/chrome/browser/endpoint_fetcher/BUILD.gn
 --- a/chrome/browser/endpoint_fetcher/BUILD.gn
 +++ b/chrome/browser/endpoint_fetcher/BUILD.gn
-@@ -14,6 +14,7 @@ android_library("java") {
+@@ -15,6 +15,7 @@ android_library("java") {
    sources = [
      "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java",
      "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointResponse.java",
@@ -545,7 +545,7 @@ diff --git a/chrome/browser/endpoint_fetcher/BUILD.gn b/chrome/browser/endpoint_
    ]
    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
  }
-@@ -22,5 +23,6 @@ generate_jni("jni_headers") {
+@@ -23,5 +24,6 @@ generate_jni("jni_headers") {
    sources = [
      "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java",
      "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointResponse.java",
@@ -571,7 +571,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc b/chrome/browse
  namespace {
  const char kContentTypeKey[] = "Content-Type";
  const char kDeveloperKey[] = "X-Developer-Key";
-@@ -151,6 +156,19 @@ EndpointFetcher::EndpointFetcher(
+@@ -155,6 +160,19 @@ EndpointFetcher::EndpointFetcher(
        identity_manager_(nullptr),
        sanitize_response_(true) {}
  
@@ -591,8 +591,8 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc b/chrome/browse
  EndpointFetcher::~EndpointFetcher() = default;
  
  void EndpointFetcher::Fetch(EndpointFetcherCallback endpoint_fetcher_callback) {
-@@ -280,6 +298,77 @@ void EndpointFetcher::OnSanitizationResult(
-   std::move(endpoint_fetcher_callback).Run(std::move(response));
+@@ -293,6 +311,77 @@ std::string EndpointFetcher::GetUrlForTesting() {
+   return url_.spec();
  }
  
 +void EndpointFetcher::PerformHeadRequest(
@@ -669,7 +669,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc b/chrome/browse
  #if defined(OS_ANDROID)
  namespace {
  static void OnEndpointFetcherComplete(
-@@ -296,6 +385,25 @@ static void OnEndpointFetcherComplete(
+@@ -309,6 +398,25 @@ static void OnEndpointFetcherComplete(
                         base::android::AttachCurrentThread(),
                         std::move(endpoint_response->response))));
  }
@@ -695,7 +695,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc b/chrome/browse
  }  // namespace
  
  // TODO(crbug.com/1077537) Create a KeyProvider so
-@@ -381,4 +489,25 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth(
+@@ -398,4 +506,25 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth(
        nullptr);
  }
  
@@ -755,9 +755,9 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser
    // Used for tests. Can be used if caller constructs their own
    // url_loader_factory and identity_manager.
    EndpointFetcher(
-@@ -113,6 +123,10 @@ class EndpointFetcher {
-   virtual void PerformRequest(EndpointFetcherCallback endpoint_fetcher_callback,
-                               const char* key);
+@@ -117,6 +127,10 @@ class EndpointFetcher {
+ 
+   std::string GetUrlForTesting();
  
 +  virtual void PerformHeadRequest(EndpointFetcherCallback endpoint_fetcher_callback,
 +                                  const char* key,
@@ -766,7 +766,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser
   protected:
    // Used for Mock only. see MockEndpointFetcher class.
    explicit EndpointFetcher(
-@@ -126,6 +140,10 @@ class EndpointFetcher {
+@@ -130,6 +144,10 @@ class EndpointFetcher {
                           std::unique_ptr<std::string> response_body);
    void OnSanitizationResult(EndpointFetcherCallback endpoint_fetcher_callback,
                              data_decoder::JsonSanitizer::Result result);
@@ -777,7 +777,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser
  
    enum AuthType { CHROME_API_KEY, OAUTH, NO_AUTH };
    AuthType auth_type_;
-@@ -133,7 +151,7 @@ class EndpointFetcher {
+@@ -137,7 +155,7 @@ class EndpointFetcher {
    // Members set in constructor to be passed to network::ResourceRequest or
    // network::SimpleURLLoader.
    const std::string oauth_consumer_name_;
@@ -786,7 +786,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser
    const std::string http_method_;
    const std::string content_type_;
    int64_t timeout_ms_;
-@@ -152,6 +170,9 @@ class EndpointFetcher {
+@@ -157,6 +175,9 @@ class EndpointFetcher {
        access_token_fetcher_;
    std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
  
@@ -799,8 +799,8 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser
 diff --git a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java
 --- a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java
 +++ b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java
-@@ -68,6 +68,14 @@ public final class EndpointFetcher {
-                 profile, url, httpsMethod, contentType, postData, timeout, headers, callback);
+@@ -70,6 +70,14 @@ public final class EndpointFetcher {
+                 postData, timeout, headers, annotation.getHashCode(), callback);
      }
  
 +    @MainThread
@@ -814,10 +814,10 @@ diff --git a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browse
      @NativeMethods
      public interface Natives {
          void nativeFetchOAuth(Profile profile, String oathConsumerName, String url,
-@@ -78,5 +86,8 @@ public final class EndpointFetcher {
+@@ -80,5 +88,8 @@ public final class EndpointFetcher {
+                 int annotationHashCode, Callback<EndpointResponse> callback);
+         void nativeFetchWithNoAuth(Profile profile, String url, int annotationHashCode,
                  Callback<EndpointResponse> callback);
-         void nativeFetchWithNoAuth(
-                 Profile profile, String url, Callback<EndpointResponse> callback);
 +        void nativeHeadWithNoAuth(
 +                Profile profile, String url, long timeout, boolean allow_redirect,
 +                Callback<EndpointHeaderResponse> callback);
@@ -862,7 +862,7 @@ new file mode 100644
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -2037,7 +2037,7 @@
+@@ -2121,7 +2121,7 @@
    {
      "name": "enable-inline-update-flow",
      "owners": [ "nyquist", "dtrainor" ],
@@ -874,7 +874,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3582,10 +3582,9 @@ const char kVoiceButtonInTopToolbarDescription[] =
+@@ -3657,10 +3657,9 @@ const char kVoiceButtonInTopToolbarDescription[] =
      "Enables showing the voice search button in the top toolbar. Enabling "
      "Adaptive Button overrides this.";
  
@@ -890,7 +890,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 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
-@@ -627,7 +627,7 @@ const base::Feature kIncognitoScreenshot{"IncognitoScreenshot",
+@@ -631,7 +631,7 @@ const base::Feature kIncognitoScreenshot{"IncognitoScreenshot",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kInlineUpdateFlow{"InlineUpdateFlow",
@@ -902,7 +902,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/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
-@@ -1663,6 +1663,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1703,6 +1703,12 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_DEPRECATION_WARNING" desc="Warning about Chrome updates no longer being supported">
          Chrome updates are no longer supported for this version of Android
        </message>
@@ -915,7 +915,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
  
        <!-- Account management UI strings. -->
        <message name="IDS_ACCOUNT_MANAGEMENT_TITLE" desc="Header title for the account management screen. [CHAR_LIMIT=32]">
-@@ -3150,7 +3156,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -3199,7 +3205,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
  
        <!-- Main menu items -->
        <message name="IDS_MENU_UPDATE" desc="Menu item for updating chrome. [CHAR_LIMIT=24]">

+ 2 - 2
build/patches/Disable-AGSA-by-default.patch

@@ -10,7 +10,7 @@ Subject: Disable AGSA by default
 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
-@@ -605,7 +605,7 @@ const base::Feature kEnhancedProtectionPromoCard{
+@@ -609,7 +609,7 @@ const base::Feature kEnhancedProtectionPromoCard{
      "EnhancedProtectionPromoCard", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kExperimentsForAgsa{"ExperimentsForAgsa",
@@ -22,7 +22,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/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
-@@ -86,7 +86,7 @@ public class CachedFeatureFlags {
+@@ -85,7 +85,7 @@ public class CachedFeatureFlags {
                      .put(ChromeFeatureList.CCT_REMOVE_REMOTE_VIEW_IDS, true)
                      .put(ChromeFeatureList.OFFLINE_MEASUREMENTS_BACKGROUND_TASK, false)
                      .put(ChromeFeatureList.CCT_INCOGNITO, true)

+ 1 - 1
build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch

@@ -9,7 +9,7 @@ Subject: Disable DRM media origin IDs preprovisioning
 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
-@@ -660,7 +660,7 @@ const base::Feature kMediaDrmPersistentLicense{
+@@ -645,7 +645,7 @@ const base::Feature kMediaDrmPersistentLicense{
  // MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs
  // which will trigger provisioning process after MediaDrmBridge is created.
  const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",

+ 2 - 2
build/patches/Disable-all-promo-dialogs.patch

@@ -9,7 +9,7 @@ Subject: Disable all promo dialogs
 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
-@@ -822,7 +822,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
+@@ -823,7 +823,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
       * displayed.
       */
      private boolean triggerPromo(boolean intentWithEffect) {
@@ -18,7 +18,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab
              if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_STARTUP_PROMOS)) {
                  return false;
              }
-@@ -857,8 +857,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
+@@ -858,8 +858,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
                  preferenceManager.writeBoolean(
                          ChromePreferenceKeys.PROMOS_SKIPPED_ON_FIRST_START, true);
              }

+ 1 - 1
build/patches/Disable-feeds-support-by-default.patch

@@ -29,7 +29,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
 diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
-@@ -77,7 +77,7 @@ public class CachedFeatureFlags {
+@@ -76,7 +76,7 @@ public class CachedFeatureFlags {
                      .put(ChromeFeatureList.TAB_TO_GTS_ANIMATION, true)
                      .put(ChromeFeatureList.TEST_DEFAULT_DISABLED, false)
                      .put(ChromeFeatureList.TEST_DEFAULT_ENABLED, true)

+ 2 - 2
build/patches/Disable-media-router-and-remoting-by-default.patch

@@ -56,7 +56,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse
 diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
 --- a/chrome/browser/profiles/profile.cc
 +++ b/chrome/browser/profiles/profile.cc
-@@ -356,7 +356,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -365,7 +365,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        media_router::prefs::kMediaRouterEnableCloudServices, false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -68,7 +68,7 @@ diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profil
 diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
 --- a/chrome/browser/profiles/profile_impl.cc
 +++ b/chrome/browser/profiles/profile_impl.cc
-@@ -434,7 +434,7 @@ void ProfileImpl::RegisterProfilePrefs(
+@@ -445,7 +445,7 @@ void ProfileImpl::RegisterProfilePrefs(
  #endif
  
    registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false);

+ 4 - 4
build/patches/Disable-metrics-collection-for-NTP-tiles.patch

@@ -26,7 +26,7 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
  
  namespace {
  
-@@ -233,7 +231,6 @@ void MostVisitedSitesBridge::RecordPageImpression(
+@@ -230,7 +228,6 @@ void MostVisitedSitesBridge::RecordPageImpression(
      JNIEnv* env,
      const JavaParamRef<jobject>& obj,
      jint jtiles_count) {
@@ -34,7 +34,7 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
  }
  
  void MostVisitedSitesBridge::RecordTileImpression(
-@@ -245,6 +242,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
+@@ -242,6 +239,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
      jint jtitle_source,
      jint jsource,
      const JavaParamRef<jobject>& jurl) {
@@ -42,7 +42,7 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
    std::unique_ptr<GURL> url = url::GURLAndroid::ToNativeGURL(env, jurl);
    TileTitleSource title_source = static_cast<TileTitleSource>(jtitle_source);
    TileSource source = static_cast<TileSource>(jsource);
-@@ -254,6 +252,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
+@@ -251,6 +249,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
  
    ntp_tiles::metrics::RecordTileImpression(ntp_tiles::NTPTileImpression(
        jindex, source, title_source, visual_type, icon_type, *url));
@@ -50,7 +50,7 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
  }
  
  void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
-@@ -263,11 +262,6 @@ void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
+@@ -260,11 +259,6 @@ void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
      jint tile_type,
      jint title_source,
      jint source) {

+ 1 - 1
build/patches/Disable-metrics-on-all-I-O-threads.patch

@@ -9,7 +9,7 @@ Subject: Disable metrics on all I/O threads
 diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
 --- a/chrome/browser/browser_process_impl.cc
 +++ b/chrome/browser/browser_process_impl.cc
-@@ -965,7 +965,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -982,7 +982,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
    registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled,

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 164 - 117
build/patches/Disable-safe-browsing.patch


+ 2 - 2
build/patches/Disable-seed-based-field-trials.patch

@@ -9,7 +9,7 @@ Subject: Disable seed-based field trials
 diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc
 --- a/components/variations/service/variations_field_trial_creator.cc
 +++ b/components/variations/service/variations_field_trial_creator.cc
-@@ -258,8 +258,8 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -263,8 +263,8 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
    // instance is set.
    feature_list->RegisterExtraFeatureOverrides(extra_overrides);
  
@@ -19,7 +19,7 @@ diff --git a/components/variations/service/variations_field_trial_creator.cc b/c
    if (!command_line->HasSwitch(switches::kDisableFieldTrialTestingConfig) &&
        !command_line->HasSwitch(::switches::kForceFieldTrials) &&
        !command_line->HasSwitch(switches::kVariationsServerURL)) {
-@@ -273,10 +273,12 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -278,10 +278,12 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
    }
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;

+ 5 - 5
build/patches/Disable-smart-selection-by-default.patch

@@ -43,7 +43,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearc
 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
-@@ -172,6 +172,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+@@ -173,6 +173,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
      &kCCTClientDataHeader,
      &kCCTExternalLinkHandling,
      &kCCTIncognito,
@@ -51,7 +51,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
      &kCCTIncognitoAvailableToThirdParty,
      &kCCTPostMessageAPI,
      &kCCTRedirectPreconnect,
-@@ -492,6 +493,9 @@ const base::Feature kChromeSharingHub{"ChromeSharingHub",
+@@ -487,6 +488,9 @@ const base::Feature kChromeSharingHub{"ChromeSharingHub",
  const base::Feature kChromeSurveyNextAndroid{"ChromeSurveyNextAndroid",
                                               base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -64,7 +64,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
-@@ -52,6 +52,7 @@ extern const base::Feature kChromeShareHighlightsAndroid;
+@@ -49,6 +49,7 @@ extern const base::Feature kDontAutoHideBrowserControls;
  extern const base::Feature kChromeShareLongScreenshot;
  extern const base::Feature kChromeShareScreenshot;
  extern const base::Feature kChromeSharingHub;
@@ -75,7 +75,7 @@ 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
-@@ -277,6 +277,7 @@ public abstract class ChromeFeatureList {
+@@ -255,6 +255,7 @@ public abstract class ChromeFeatureList {
      public static final String CCT_EXTERNAL_LINK_HANDLING = "CCTExternalLinkHandling";
      public static final String CCT_POST_MESSAGE_API = "CCTPostMessageAPI";
      public static final String CCT_REDIRECT_PRECONNECT = "CCTRedirectPreconnect";
@@ -98,7 +98,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/select
 diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
 --- a/testing/variations/fieldtrial_testing_config.json
 +++ b/testing/variations/fieldtrial_testing_config.json
-@@ -1951,6 +1951,21 @@
+@@ -2026,6 +2026,21 @@
              ]
          }
      ],

+ 2 - 2
build/patches/Disable-some-signed-exchange-features.patch

@@ -9,7 +9,7 @@ Subject: Disable some signed exchange features
 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
-@@ -704,7 +704,7 @@ const base::Feature kSignedExchangePrefetchCacheForNavigations{
+@@ -719,7 +719,7 @@ const base::Feature kSignedExchangePrefetchCacheForNavigations{
  // Signed Exchange Reporting for distributors
  // https://www.chromestatus.com/features/5687904902840320
  const base::Feature kSignedExchangeReportingForDistributors{
@@ -18,7 +18,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c
  
  // Subresource prefetching+loading via Signed HTTP Exchange
  // https://www.chromestatus.com/features/5126805474246656
-@@ -714,7 +714,7 @@ const base::Feature kSignedExchangeSubresourcePrefetch{
+@@ -729,7 +729,7 @@ const base::Feature kSignedExchangeSubresourcePrefetch{
  // Origin-Signed HTTP Exchanges (for WebPackage Loading)
  // https://www.chromestatus.com/features/5745285984681984
  const base::Feature kSignedHTTPExchange{"SignedHTTPExchange",

+ 5 - 5
build/patches/Disable-support-for-RAR-files-inspection.patch

@@ -11,7 +11,7 @@ Subject: Disable support for RAR files inspection
 diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
 +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
-@@ -90,7 +90,7 @@ void FileAnalyzer::Start(const base::FilePath& target_path,
+@@ -95,7 +95,7 @@ void FileAnalyzer::Start(const base::FilePath& target_path,
    if (inspection_type == DownloadFileType::ZIP) {
      StartExtractZipFeatures();
    } else if (inspection_type == DownloadFileType::RAR) {
@@ -23,7 +23,7 @@ diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc b
 diff --git a/chrome/common/safe_browsing/BUILD.gn b/chrome/common/safe_browsing/BUILD.gn
 --- a/chrome/common/safe_browsing/BUILD.gn
 +++ b/chrome/common/safe_browsing/BUILD.gn
-@@ -41,38 +41,6 @@ if (safe_browsing_mode == 1) {
+@@ -56,38 +56,6 @@ if (safe_browsing_mode == 1) {
      public_deps = [ "//components/safe_browsing/core/common/proto:csd_proto" ]
    }
  
@@ -59,10 +59,10 @@ diff --git a/chrome/common/safe_browsing/BUILD.gn b/chrome/common/safe_browsing/
 -    public_deps = [ "//components/safe_browsing/core/common/proto:csd_proto" ]
 -  }
 -
-   if (is_mac) {
-     source_set("disk_image_type_sniffer_mac") {
+   if (is_linux || is_win) {
+     source_set("document_analyzer") {
        sources = [
-@@ -142,7 +110,6 @@ source_set("safe_browsing") {
+@@ -182,7 +150,6 @@ source_set("safe_browsing") {
        ":archive_analyzer_results",
        ":binary_feature_extractor",
        ":download_type_util",

+ 6 - 6
build/patches/Disable-text-fragments-by-default.patch

@@ -17,7 +17,7 @@ Revert "[Text Fragment] Unflag fragment directive removal."
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -5377,6 +5377,7 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -5612,6 +5612,7 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kSharingHubDesktopOmniboxDescription, kOsDesktop,
       FEATURE_VALUE_TYPE(sharing_hub::kSharingHubDesktopOmnibox)},
  #endif  // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX)
@@ -28,7 +28,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -2941,7 +2941,7 @@
+@@ -3058,7 +3058,7 @@
    {
      "name": "ev-details-in-page-info",
      "owners": [ "cthomp" ],
@@ -63,7 +63,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.
 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
-@@ -370,7 +370,7 @@ const base::Feature kStorageAccessAPI{"StorageAccessAPI",
+@@ -379,7 +379,7 @@ const base::Feature kStorageAccessAPI{"StorageAccessAPI",
  
  // Enable text snippets in URL fragments. https://crbug.com/919204.
  const base::Feature kTextFragmentAnchor{"TextFragmentAnchor",
@@ -75,7 +75,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea
 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
-@@ -4070,6 +4070,10 @@ void Document::SetURL(const KURL& url) {
+@@ -4063,6 +4063,10 @@ void Document::SetURL(const KURL& url) {
      }
    }
  
@@ -86,7 +86,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
    // Strip the fragment directive from the URL fragment. E.g. "#id:~:text=a"
    // --> "#id". See https://github.com/WICG/scroll-to-text-fragment.
    String fragment = new_url.FragmentIdentifier();
-@@ -4083,6 +4087,7 @@ void Document::SetURL(const KURL& url) {
+@@ -4076,6 +4080,7 @@ void Document::SetURL(const KURL& url) {
      else
        new_url.SetFragmentIdentifier(fragment.Substring(0, start_pos));
    }
@@ -145,7 +145,7 @@ diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor
 diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
-@@ -2130,8 +2130,7 @@
+@@ -2173,8 +2173,7 @@
      },
      {
        name: "TextFragmentIdentifiers",

+ 1 - 1
build/patches/Disable-third-party-cookies-by-default.patch

@@ -10,7 +10,7 @@ author: Chad Miller <chad.miller@canonical.com>
 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
-@@ -698,7 +698,7 @@ void RegisterProfilePrefsForMigration(
+@@ -717,7 +717,7 @@ void RegisterProfilePrefsForMigration(
  
    chrome_browser_net::secure_dns::RegisterProbesSettingBackupPref(registry);
  

+ 25 - 0
build/patches/Disable-third-party-origin-trials.patch

@@ -0,0 +1,25 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Thu, 4 Nov 2021 09:19:24 +0100
+Subject: Disable third-party origin trials
+
+---
+ .../blink/renderer/platform/runtime_enabled_features.json5    | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
+--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
++++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
+@@ -2183,10 +2183,6 @@
+       name: "TextFragmentTapOpensContextMenu",
+       status: {"Android": "stable"},
+     },
+-    {
+-      name: "ThirdPartyOriginTrials",
+-      status: "stable",
+-    },
+     {
+       name: "ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes",
+       status: "experimental",
+-- 
+2.17.1
+

+ 1 - 1
build/patches/Disable-unified-autoplay-feature.patch

@@ -9,7 +9,7 @@ Subject: Disable unified autoplay feature
 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
-@@ -498,7 +498,7 @@ const base::Feature kUseR16Texture{"use-r16-texture",
+@@ -480,7 +480,7 @@ const base::Feature kUseR16Texture{"use-r16-texture",
  // Enables the Unified Autoplay policy by overriding the platform's default
  // autoplay policy.
  const base::Feature kUnifiedAutoplay{"UnifiedAutoplay",

+ 1 - 1
build/patches/Do-not-build-API-keys-infobar.patch

@@ -9,7 +9,7 @@ Subject: Do not build API keys infobar
 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
 --- a/chrome/browser/ui/BUILD.gn
 +++ b/chrome/browser/ui/BUILD.gn
-@@ -1195,8 +1195,6 @@ static_library("ui") {
+@@ -1194,8 +1194,6 @@ static_library("ui") {
        "singleton_tabs.h",
        "startup/automation_infobar_delegate.cc",
        "startup/automation_infobar_delegate.h",

+ 11 - 11
build/patches/Do-not-compile-QR-code-sharing.patch

@@ -11,7 +11,7 @@ Subject: Do not compile QR code sharing
 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
-@@ -78,7 +78,6 @@ import org.chromium.chrome.browser.share.ShareButtonController;
+@@ -79,7 +79,6 @@ import org.chromium.chrome.browser.share.ShareButtonController;
  import org.chromium.chrome.browser.share.ShareDelegate;
  import org.chromium.chrome.browser.share.ShareDelegate.ShareOrigin;
  import org.chromium.chrome.browser.share.ShareUtils;
@@ -19,7 +19,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi
  import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
  import org.chromium.chrome.browser.tab.AutofillSessionLifetimeController;
  import org.chromium.chrome.browser.tab.Tab;
-@@ -401,10 +400,6 @@ public class RootUiCoordinator
+@@ -402,10 +401,6 @@ public class RootUiCoordinator
      }
  
      public void onAttachFragment(Fragment fragment) {
@@ -33,25 +33,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi
 diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java
 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java
 +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java
-@@ -28,7 +28,6 @@ import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator;
+@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.profiles.Profile;
+ import org.chromium.chrome.browser.share.SaveBitmapDelegate;
  import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator.LinkGeneration;
- import org.chromium.chrome.browser.share.link_to_text.LinkToTextMetricsHelper;
  import org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsCoordinator;
 -import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator;
  import org.chromium.chrome.browser.share.screenshot.ScreenshotCoordinator;
  import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfCoordinator;
- import org.chromium.chrome.browser.share.share_sheet.ShareSheetPropertyModelBuilder.ContentType;
-@@ -257,9 +256,6 @@ public class ChromeProvidedSharingOptionsProvider {
-                         ChromeFeatureList.PREEMPTIVE_LINK_TO_TEXT_GENERATION)) {
-             mOrderedFirstPartyOptions.add(createHighlightsFirstPartyOption());
-         }
+ import org.chromium.chrome.browser.share.share_sheet.ShareSheetLinkToggleMetricsHelper.LinkToggleMetricsDetails;
+@@ -255,9 +254,6 @@ public class ChromeProvidedSharingOptionsProvider {
+         mOrderedFirstPartyOptions.add(createCopyFirstPartyOption());
+         mOrderedFirstPartyOptions.add(createCopyTextFirstPartyOption());
+         mOrderedFirstPartyOptions.add(createSendTabToSelfFirstPartyOption());
 -        if (!mTabProvider.get().getWebContents().isIncognito()) {
 -            mOrderedFirstPartyOptions.add(createQrCodeFirstPartyOption());
 -        }
          if (UserPrefs.get(Profile.getLastUsedRegularProfile()).getBoolean(Pref.PRINTING_ENABLED)) {
              mOrderedFirstPartyOptions.add(createPrintingFirstPartyOption());
          }
-@@ -408,19 +404,6 @@ public class ChromeProvidedSharingOptionsProvider {
+@@ -410,19 +406,6 @@ public class ChromeProvidedSharingOptionsProvider {
                  .build();
      }
  
@@ -74,7 +74,7 @@ diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/s
 diff --git a/chrome/browser/share/android/java_sources.gni b/chrome/browser/share/android/java_sources.gni
 --- a/chrome/browser/share/android/java_sources.gni
 +++ b/chrome/browser/share/android/java_sources.gni
-@@ -21,24 +21,6 @@ share_java_sources = [
+@@ -23,24 +23,6 @@ share_java_sources = [
    "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabService.java",
    "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabServiceFactory.java",
    "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/ScreenshotBoundsManager.java",

+ 2 - 2
build/patches/Enable-SPPI-for-devices-with-enough-memory.patch

@@ -10,7 +10,7 @@ Subject: Enable SPPI for devices with enough memory
 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
-@@ -896,11 +896,7 @@ const base::Feature kShow10_10ObsoleteInfobar{
+@@ -889,11 +889,7 @@ const base::Feature kShow10_10ObsoleteInfobar{
  // browser_features, as they are only used on the browser side.
  const base::Feature kSitePerProcess {
    "site-per-process",
@@ -25,7 +25,7 @@ diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
 diff --git a/components/site_isolation/features.cc b/components/site_isolation/features.cc
 --- a/components/site_isolation/features.cc
 +++ b/components/site_isolation/features.cc
-@@ -50,7 +50,7 @@ const base::Feature kSiteIsolationForOAuthSites{
+@@ -57,7 +57,7 @@ const base::Feature kSiteIsolationForOAuthSites{
  // base::SysInfo::AmountOfPhysicalMemoryMB().
  const base::Feature kSitePerProcessOnlyForHighMemoryClients{
      "site-per-process-only-for-high-memory-clients",

+ 0 - 483
build/patches/Enable-android-autofill.patch

@@ -1,483 +0,0 @@
-From: uazo <uazo@users.noreply.github.com>
-Date: Sun, 24 Oct 2021 16:54:04 +0000
-Subject: Enable android autofill
-
----
- chrome/android/BUILD.gn                       |  1 +
- .../settings/PasswordSettings.java            | 58 ++++++++++++++++++-
- .../chromium/chrome/browser/tab/TabImpl.java  | 43 ++++++++++++++
- .../browser/tab/TabViewAndroidDelegate.java   | 14 +++++
- chrome/browser/BUILD.gn                       |  8 +++
- chrome/browser/android/tab_android.cc         | 26 +++++++++
- chrome/browser/android/tab_android.h          |  2 +
- .../strings/android_chrome_strings.grd        |  3 +
- chrome/browser/ui/tab_helpers.cc              |  6 +-
- .../autofill/core/common/autofill_prefs.cc    |  5 ++
- .../autofill/core/common/autofill_prefs.h     |  1 +
- .../embedder_support/view/ContentView.java    | 48 +++++++++++++++
- .../chromium/ui/base/ViewAndroidDelegate.java |  8 +++
- 13 files changed, 221 insertions(+), 2 deletions(-)
-
-diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
---- a/chrome/android/BUILD.gn
-+++ b/chrome/android/BUILD.gn
-@@ -410,6 +410,7 @@ android_library("chrome_java") {
-     "//chrome/browser/xsurface:java",
-     "//components/autofill/android:autofill_java",
-     "//components/autofill_assistant/browser:proto_java",
-+    "//components/android_autofill/browser:java",
-     "//components/background_task_scheduler:background_task_scheduler_java",
-     "//components/background_task_scheduler:background_task_scheduler_task_ids_java",
-     "//components/bookmarks/common/android:bookmarks_java",
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
-@@ -52,12 +52,18 @@ import org.chromium.ui.text.SpanApplier;
- 
- import java.util.Locale;
- 
-+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
-+import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager;
-+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
-+import org.chromium.chrome.browser.ApplicationLifetime;
-+
- /**
-  * The "Passwords" screen in Settings, which allows the user to enable or disable password saving,
-  * to view saved passwords (just the username and URL), and to delete saved passwords.
-  */
- public class PasswordSettings extends PreferenceFragmentCompat
--        implements PasswordManagerHandler.PasswordListObserver, Preference.OnPreferenceClickListener {
-+        implements PasswordManagerHandler.PasswordListObserver, Preference.OnPreferenceClickListener,
-+                   INeedSnackbarManager {
-     // Keys for name/password dictionaries.
-     public static final String PASSWORD_LIST_URL = "url";
-     public static final String PASSWORD_LIST_NAME = "name";
-@@ -75,6 +81,10 @@ public class PasswordSettings extends PreferenceFragmentCompat
-     public static final String PREF_TRUSTED_VAULT_OPT_IN = "trusted_vault_opt_in";
-     public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link";
-     public static final String PREF_KEY_SECURITY_KEY_LINK = "security_key_link";
-+    public static final String PREF_ANDROID_AUTOFILL_SWITCH = "android_autofill_switch";
-+
-+    private SnackbarManager mSnackbarManager;
-+    private Snackbar mSnackbar;
- 
-     // A PasswordEntryViewer receives a boolean value with this key. If set true, the the entry was
- 
-@@ -110,6 +120,7 @@ public class PasswordSettings extends PreferenceFragmentCompat
-     private Preference mLinkPref;
-     private Preference mSecurityKey;
-     private ChromeSwitchPreference mSavePasswordsSwitch;
-+    private ChromeSwitchPreference mEnableAndroidAutofillSwitch;
-     private ChromeSwitchPreference mAutoSignInSwitch;
-     private ChromeBasePreference mCheckPasswords;
-     private ChromeBasePreference mTrustedVaultOptIn;
-@@ -274,6 +285,7 @@ public class PasswordSettings extends PreferenceFragmentCompat
-         getPreferenceScreen().removeAll();
-         if (mSearchQuery == null) {
-             createSavePasswordsSwitch();
-+            createEnableAndroidAutofillSwitch();
-             createAutoSignInCheckbox();
-             if (mPasswordCheck != null) {
-                 createCheckPasswords();
-@@ -517,6 +529,50 @@ public class PasswordSettings extends PreferenceFragmentCompat
-                 getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE));
-     }
- 
-+    private void createEnableAndroidAutofillSwitch() {
-+        if (mSnackbar == null) {
-+            mSnackbar = Snackbar.make(getActivity().getString(R.string.ui_relaunch_notice),
-+                    new SnackbarManager.SnackbarController() {
-+                            @Override
-+                            public void onDismissNoAction(Object actionData) { }
-+
-+                            @Override
-+                            public void onAction(Object actionData) {
-+                                ApplicationLifetime.terminate(true);
-+                            }
-+                    }, Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_UNKNOWN)
-+                    .setSingleLine(false)
-+                    .setAction(getActivity().getString(R.string.relaunch),
-+                            /*actionData*/null)
-+                    .setDuration(/*durationMs*/70000);
-+        }
-+
-+        mEnableAndroidAutofillSwitch = new ChromeSwitchPreference(getStyledContext(), null);
-+        mEnableAndroidAutofillSwitch.setKey(PREF_ANDROID_AUTOFILL_SWITCH);
-+        mEnableAndroidAutofillSwitch.setTitle(R.string.enable_android_autofill);
-+        mEnableAndroidAutofillSwitch.setOrder(ORDER_SWITCH);
-+        mEnableAndroidAutofillSwitch.setSummaryOn(R.string.text_on);
-+        mEnableAndroidAutofillSwitch.setSummaryOff(R.string.text_off);
-+
-+        try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-+            getPreferenceScreen().addPreference(mEnableAndroidAutofillSwitch);
-+        }
-+
-+        mEnableAndroidAutofillSwitch.setChecked(
-+                getPrefService().getBoolean(Pref.AUTOFILL_ANDROID_ENABLED));
-+
-+        mEnableAndroidAutofillSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
-+            getPrefService().setBoolean(Pref.AUTOFILL_ANDROID_ENABLED, (boolean) newValue);
-+            if (!mSnackbarManager.isShowing())
-+                mSnackbarManager.showSnackbar(mSnackbar);
-+            return true;
-+        });
-+    }
-+
-+    public void setSnackbarManager(SnackbarManager manager) {
-+        mSnackbarManager = manager;
-+    }
-+
-     private void createAutoSignInCheckbox() {
-         mAutoSignInSwitch = new ChromeSwitchPreference(getStyledContext(), null);
-         mAutoSignInSwitch.setKey(PREF_AUTOSIGNIN_SWITCH);
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
-@@ -72,6 +72,18 @@ import org.chromium.url.GURL;
- 
- import java.nio.ByteBuffer;
- 
-+import android.os.Build;
-+import android.util.SparseArray;
-+import org.chromium.base.annotations.VerifiesOnO;
-+import org.chromium.ui.base.EventOffsetHandler;
-+import android.view.ViewStructure;
-+import android.view.autofill.AutofillValue;
-+import org.chromium.components.autofill.AutofillProvider;
-+import org.chromium.components.autofill.AutofillActionModeCallback;
-+import org.chromium.content_public.browser.SelectionPopupController;
-+import org.chromium.chrome.browser.preferences.Pref;
-+import org.chromium.components.user_prefs.UserPrefs;
-+
- /**
-  * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}.
-  * This class is not intended to be extended.
-@@ -215,6 +227,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-     /** Whether or not the user manually changed the user agent. */
-     private boolean mUserForcedUserAgent;
- 
-+    AutofillProvider mAutofillProvider;
-+
-     /**
-      * Creates an instance of a {@link TabImpl}.
-      *
-@@ -765,6 +779,11 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-         for (TabObserver observer : mObservers) observer.onDestroyed(this);
-         mObservers.clear();
- 
-+        if (mAutofillProvider != null) {
-+            mAutofillProvider.destroy();
-+            mAutofillProvider = null;
-+        }
-+
-         mUserDataHost.destroy();
-         mTabViewManager.destroy();
-         hideNativePage(false, null);
-@@ -1356,6 +1375,16 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-         return tabsPtrArray;
-     }
- 
-+    public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {
-+        if (mAutofillProvider != null)
-+            mAutofillProvider.onProvideAutoFillVirtualStructure(structure, flags);
-+    }
-+
-+    public void autofill(final SparseArray<AutofillValue> values) {
-+        if (mAutofillProvider != null)
-+            mAutofillProvider.autofill(values);
-+    }
-+
-     /**
-      * Initializes the {@link WebContents}. Completes the browser content components initialization
-      * around a native WebContents pointer.
-@@ -1405,6 +1434,19 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-                             mDelegateFactory.createContextMenuPopulatorFactory(this), this));
- 
-             mWebContents.notifyRendererPreferenceUpdate();
-+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
-+                    UserPrefs.get(Profile.getLastUsedRegularProfile())
-+                             .getBoolean(Pref.AUTOFILL_ANDROID_ENABLED) == true) {
-+                SelectionPopupController selectionController =
-+                        SelectionPopupController.fromWebContents(mWebContents);
-+
-+                mAutofillProvider = new AutofillProvider(getContext(), cv, webContents, "bromite");
-+                TabImplJni.get().initializeAutofillIfNecessary(mNativeTabAndroid);
-+                mAutofillProvider.setWebContents(webContents);
-+                cv.setWebContents(webContents);
-+                selectionController.setNonSelectionActionModeCallback(
-+                        new AutofillActionModeCallback(mThemedApplicationContext, mAutofillProvider));
-+            }
-             TabHelpers.initWebContentsHelpers(this);
-             notifyContentChanged();
-         } finally {
-@@ -1765,5 +1807,6 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-         void setActiveNavigationEntryTitleForUrl(long nativeTabAndroid, String url, String title);
-         void loadOriginalImage(long nativeTabAndroid);
-         boolean handleNonNavigationAboutURL(GURL url);
-+        void initializeAutofillIfNecessary(long nativeTabAndroid);
-     }
- }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java
-@@ -14,6 +14,10 @@ import org.chromium.content_public.browser.RenderWidgetHostView;
- import org.chromium.ui.base.ViewAndroidDelegate;
- import org.chromium.ui.base.WindowAndroid;
- 
-+import android.util.SparseArray;
-+import android.view.autofill.AutofillValue;
-+import android.view.ViewStructure;
-+
- /**
-  * Implementation of the abstract class {@link ViewAndroidDelegate} for Chrome.
-  */
-@@ -101,4 +105,14 @@ public class TabViewAndroidDelegate extends ViewAndroidDelegate {
-     protected int getViewportInsetBottom() {
-         return mApplicationViewportInsetBottomPx;
-     }
-+
-+    @Override
-+    public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {
-+        mTab.onProvideAutofillVirtualStructure(structure, flags);
-+    }
-+
-+    @Override
-+    public void autofill(final SparseArray<AutofillValue> values) {
-+        mTab.autofill(values);
-+    }
- }
-diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
---- a/chrome/browser/BUILD.gn
-+++ b/chrome/browser/BUILD.gn
-@@ -2352,6 +2352,14 @@ static_library("browser") {
-     "//ui/webui/resources/cr_components/customize_themes:mojom",
-     "//ui/webui/resources/cr_components/most_visited:mojom",
-   ]
-+
-+  if (is_android) {
-+    deps += [
-+        "//components/android_autofill/browser",
-+        "//components/android_autofill/browser:android"
-+    ]
-+  }
-+
-   if (is_chromeos_ash) {
-     testonly = enable_weston_test
-     sources += [
-diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
---- a/chrome/browser/android/tab_android.cc
-+++ b/chrome/browser/android/tab_android.cc
-@@ -65,6 +65,13 @@
- #include "url/android/gurl_android.h"
- #include "url/gurl.h"
- 
-+#include "components/android_autofill/browser/android_autofill_manager.h"
-+#include "components/android_autofill/browser/autofill_provider.h"
-+#include "components/android_autofill/browser/autofill_provider_android.h"
-+#include "components/autofill/content/browser/content_autofill_driver_factory.h"
-+#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
-+#include "chrome/browser/browser_process.h"
-+
- using base::android::AttachCurrentThread;
- using base::android::ConvertUTF8ToJavaString;
- using base::android::JavaParamRef;
-@@ -437,3 +444,22 @@ static void JNI_TabImpl_Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
-   // This will automatically bind to the Java object and pass ownership there.
-   new TabAndroid(env, obj);
- }
-+
-+void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) {
-+  if (!autofill::ContentAutofillDriverFactory::FromWebContents(
-+          web_contents_.get())) {
-+     content::WebContents* web_contents = web_contents_.get();
-+    DCHECK(
-+        !autofill::ContentAutofillDriverFactory::FromWebContents(web_contents));
-+    DCHECK(autofill::AutofillProvider::FromWebContents(web_contents));
-+
-+    autofill::ChromeAutofillClient::CreateForWebContents(web_contents);
-+
-+    autofill::ContentAutofillDriverFactory::CreateForWebContentsAndDelegate(
-+        web_contents,
-+        autofill::ChromeAutofillClient::FromWebContents(web_contents),
-+        g_browser_process->GetApplicationLocale(),
-+        autofill::BrowserAutofillManager::DISABLE_AUTOFILL_DOWNLOAD_MANAGER,
-+        base::BindRepeating(&autofill::AndroidAutofillManager::Create));
-+  }
-+}
-diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h
---- a/chrome/browser/android/tab_android.h
-+++ b/chrome/browser/android/tab_android.h
-@@ -150,6 +150,8 @@ class TabAndroid : public base::SupportsUserData {
- 
-   void SetDevToolsAgentHost(scoped_refptr<content::DevToolsAgentHost> host);
- 
-+  void InitializeAutofillIfNecessary(JNIEnv* env);
-+
-  private:
-   JavaObjectWeakGlobalRef weak_java_tab_;
- 
-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
-@@ -558,6 +558,9 @@ CHAR_LIMIT guidelines:
-       <message name="IDS_PASSWORD_SETTINGS_SAVE_PASSWORDS" desc="Title for the checkbox toggling whether passwords are saved or not. [CHAR_LIMIT=32]">
-         Save passwords
-       </message>
-+      <message name="IDS_ENABLE_ANDROID_AUTOFILL" desc="Title for the checkbox toggling whether enable android autofill or not. [CHAR_LIMIT=32]">
-+        Enable native Android autofill
-+      </message>
-       <message name="IDS_PASSWORDS_AUTO_SIGNIN_TITLE" desc="Title for checkbox to enable automatically signing the user in to websites">
-         Auto Sign-in
-       </message>
-diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
---- a/chrome/browser/ui/tab_helpers.cc
-+++ b/chrome/browser/ui/tab_helpers.cc
-@@ -125,6 +125,9 @@
- #include "chrome/browser/ui/android/context_menu_helper.h"
- #include "chrome/browser/ui/javascript_dialogs/javascript_tab_modal_dialog_manager_delegate_android.h"
- #include "chrome/browser/video_tutorials/video_tutorial_tab_helper.h"
-+#include "components/android_autofill/browser/android_autofill_manager.h"
-+#include "components/android_autofill/browser/autofill_provider.h"
-+#include "components/android_autofill/browser/autofill_provider_android.h"
- #else
- #include "chrome/browser/accuracy_tips/accuracy_service_factory.h"
- #include "chrome/browser/banners/app_banner_manager_desktop.h"
-@@ -244,7 +247,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
-       web_contents,
-       autofill::ChromeAutofillClient::FromWebContents(web_contents),
-       g_browser_process->GetApplicationLocale(),
--      autofill::BrowserAutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER);
-+      autofill::BrowserAutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER,
-+      base::BindRepeating(&autofill::AndroidAutofillManager::Create));
-   chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents);
-   ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient(
-       web_contents,
-diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc
---- a/components/autofill/core/common/autofill_prefs.cc
-+++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -135,6 +135,9 @@ const char kAutofillWalletImportStorageCheckboxState[] =
- const char kAutocompleteLastVersionRetentionPolicy[] =
-     "autocomplete.retention_policy_last_version";
- 
-+// Boolean that is true to enable native Android Autofill
-+const char kAutofillAndroidEnabled[] = "autofill.android_autofill_enabled";
-+
- void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
-   // Synced prefs. Used for cross-device choices, e.g., credit card Autofill.
-   registry->RegisterBooleanPref(
-@@ -167,6 +170,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
-   registry->RegisterBooleanPref(
-       prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true);
- #endif
-+  registry->RegisterBooleanPref(
-+      prefs::kAutofillAndroidEnabled, true);
-   registry->RegisterIntegerPref(
-       prefs::kAutofillCreditCardSigninPromoImpressionCount, 0);
-   registry->RegisterBooleanPref(prefs::kAutofillWalletImportEnabled, true);
-diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h
---- a/components/autofill/core/common/autofill_prefs.h
-+++ b/components/autofill/core/common/autofill_prefs.h
-@@ -48,6 +48,7 @@ extern const char kAutofillUploadEventsLastResetTimestamp[];
- extern const char kAutofillWalletImportEnabled[];
- extern const char kAutofillWalletImportStorageCheckboxState[];
- extern const char kAutocompleteLastVersionRetentionPolicy[];
-+extern const char kAutofillAndroidEnabled[];
- 
- namespace sync_transport_opt_in {
- enum Flags {
-diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java
---- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java
-+++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/view/ContentView.java
-@@ -36,6 +36,12 @@ import org.chromium.content_public.browser.WebContentsAccessibility;
- import org.chromium.ui.base.EventForwarder;
- import org.chromium.ui.base.EventOffsetHandler;
- 
-+import org.chromium.base.Log;
-+import org.chromium.base.annotations.VerifiesOnO;
-+import android.util.SparseArray;
-+import android.view.autofill.AutofillValue;
-+import org.chromium.ui.base.ViewAndroidDelegate;
-+
- /**
-  * The containing view for {@link WebContents} that exists in the Android UI hierarchy and exposes
-  * the various {@link View} functionality to it.
-@@ -82,6 +88,8 @@ public class ContentView extends FrameLayout
-      */
-     public static ContentView createContentView(Context context,
-             @Nullable EventOffsetHandler eventOffsetHandler, @Nullable WebContents webContents) {
-+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
-+            return new ContentViewWithAutofill(context, eventOffsetHandler, webContents);
-         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-             return new ContentViewApi23(context, eventOffsetHandler, webContents);
-         }
-@@ -549,4 +557,44 @@ public class ContentView extends FrameLayout
-             if (wcax != null) wcax.onProvideVirtualStructure(structure, false);
-         }
-     }
-+
-+    /**
-+    * API level 26 implementation that includes autofill.
-+    */
-+    @VerifiesOnO
-+    public static class ContentViewWithAutofill extends ContentViewApi23 {
-+        private ViewAndroidDelegate viewAndroidDelegate;
-+
-+        private ContentViewWithAutofill(Context context, EventOffsetHandler eventOffsetHandler, WebContents webContents) {
-+            super(context, eventOffsetHandler, webContents);
-+
-+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-+                // The Autofill system-level infrastructure has heuristics for which Views it considers
-+                // important for autofill; only these Views will be queried for their autofill
-+                // structure on notifications that a new (virtual) View was entered. By default,
-+                // FrameLayout is not considered important for autofill. Thus, for ContentView to be
-+                // queried for its autofill structure, we must explicitly inform the autofill system
-+                // that this View is important for autofill.
-+                setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_YES);
-+            }
-+        }
-+
-+        @Override
-+        public void setWebContents(WebContents webContents) {
-+            viewAndroidDelegate = webContents.getViewAndroidDelegate();
-+            super.setWebContents(webContents);
-+        }
-+
-+        @Override
-+        public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {
-+            if (viewAndroidDelegate != null)
-+                viewAndroidDelegate.onProvideAutofillVirtualStructure(structure, flags);
-+        }
-+
-+        @Override
-+        public void autofill(final SparseArray<AutofillValue> values) {
-+            if (viewAndroidDelegate != null)
-+                viewAndroidDelegate.autofill(values);
-+        }
-+    }
- }
-diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
---- a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
-+++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
-@@ -26,6 +26,10 @@ import org.chromium.base.annotations.JNINamespace;
- import org.chromium.base.compat.ApiHelperForN;
- import org.chromium.ui.mojom.CursorType;
- 
-+import android.util.SparseArray;
-+import android.view.autofill.AutofillValue;
-+import android.view.ViewStructure;
-+
- /**
-  * Class to acquire, position, and remove anchor views from the implementing View.
-  */
-@@ -488,4 +492,8 @@ public class ViewAndroidDelegate {
-     protected int[] getDisplayFeature() {
-         return null;
-     }
-+
-+    public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {}
-+
-+    public void autofill(final SparseArray<AutofillValue> values) {}
- }
--- 
-2.17.1
-

+ 2 - 2
build/patches/Enable-darken-websites-checkbox-in-themes.patch

@@ -11,7 +11,7 @@ Unexpire #darken-websites-checkbox-in-themes-setting
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -903,7 +903,7 @@
+@@ -941,7 +941,7 @@
    {
      "name": "darken-websites-checkbox-in-themes-setting",
      "owners": [ "lazzzis@google.com", "twellington" ],
@@ -23,7 +23,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 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
-@@ -560,7 +560,7 @@ const base::Feature kContextualSearchTranslations{
+@@ -561,7 +561,7 @@ const base::Feature kContextualSearchTranslations{
      "ContextualSearchTranslations", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kDarkenWebsitesCheckboxInThemesSetting{

+ 1 - 1
build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch

@@ -42,7 +42,7 @@ Excerpt from https://github.com/bromite/bromite/issues/226
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 +++ b/build/config/compiler/BUILD.gn
-@@ -349,6 +349,10 @@ config("compiler") {
+@@ -350,6 +350,10 @@ config("compiler") {
        }
      }
  

+ 15 - 15
build/patches/Enable-native-Android-autofill.patch

@@ -28,7 +28,7 @@ See also: https://github.com/bromite/bromite/issues/547
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -410,6 +410,7 @@ android_library("chrome_java") {
+@@ -414,6 +414,7 @@ android_library("chrome_java") {
      "//chrome/browser/xsurface:java",
      "//components/autofill/android:autofill_java",
      "//components/autofill_assistant/browser:proto_java",
@@ -140,7 +140,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
-@@ -72,6 +72,18 @@ import org.chromium.url.GURL;
+@@ -74,6 +74,18 @@ import org.chromium.url.GURL;
  
  import java.nio.ByteBuffer;
  
@@ -159,7 +159,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
  /**
   * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}.
   * This class is not intended to be extended.
-@@ -215,6 +227,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -217,6 +229,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
      /** Whether or not the user manually changed the user agent. */
      private boolean mUserForcedUserAgent;
  
@@ -168,7 +168,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
      /**
       * Creates an instance of a {@link TabImpl}.
       *
-@@ -765,6 +779,11 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -767,6 +781,11 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
          for (TabObserver observer : mObservers) observer.onDestroyed(this);
          mObservers.clear();
  
@@ -180,7 +180,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
          mUserDataHost.destroy();
          mTabViewManager.destroy();
          hideNativePage(false, null);
-@@ -1356,6 +1375,16 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -1358,6 +1377,16 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
          return tabsPtrArray;
      }
  
@@ -197,7 +197,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
      /**
       * Initializes the {@link WebContents}. Completes the browser content components initialization
       * around a native WebContents pointer.
-@@ -1405,6 +1434,19 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -1407,6 +1436,19 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
                              mDelegateFactory.createContextMenuPopulatorFactory(this), this));
  
              mWebContents.notifyRendererPreferenceUpdate();
@@ -217,7 +217,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
              TabHelpers.initWebContentsHelpers(this);
              notifyContentChanged();
          } finally {
-@@ -1765,5 +1807,6 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -1769,5 +1811,6 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
          void setActiveNavigationEntryTitleForUrl(long nativeTabAndroid, String url, String title);
          void loadOriginalImage(long nativeTabAndroid);
          boolean handleNonNavigationAboutURL(GURL url);
@@ -256,9 +256,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndr
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -2352,6 +2352,14 @@ static_library("browser") {
-     "//ui/webui/resources/cr_components/customize_themes:mojom",
+@@ -2376,6 +2376,14 @@ static_library("browser") {
      "//ui/webui/resources/cr_components/most_visited:mojom",
+     "//ui/webui/resources/js/browser_command:mojo_bindings",
    ]
 +
 +  if (is_android) {
@@ -326,7 +326,7 @@ diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_a
 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
-@@ -558,6 +558,9 @@ CHAR_LIMIT guidelines:
+@@ -555,6 +555,9 @@ CHAR_LIMIT guidelines:
        <message name="IDS_PASSWORD_SETTINGS_SAVE_PASSWORDS" desc="Title for the checkbox toggling whether passwords are saved or not. [CHAR_LIMIT=32]">
          Save passwords
        </message>
@@ -339,7 +339,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
 --- a/chrome/browser/ui/tab_helpers.cc
 +++ b/chrome/browser/ui/tab_helpers.cc
-@@ -125,6 +125,9 @@
+@@ -126,6 +126,9 @@
  #include "chrome/browser/ui/android/context_menu_helper.h"
  #include "chrome/browser/ui/javascript_dialogs/javascript_tab_modal_dialog_manager_delegate_android.h"
  #include "chrome/browser/video_tutorials/video_tutorial_tab_helper.h"
@@ -349,7 +349,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
  #else
  #include "chrome/browser/accuracy_tips/accuracy_service_factory.h"
  #include "chrome/browser/banners/app_banner_manager_desktop.h"
-@@ -244,7 +247,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
+@@ -245,7 +248,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
        web_contents,
        autofill::ChromeAutofillClient::FromWebContents(web_contents),
        g_browser_process->GetApplicationLocale(),
@@ -362,7 +362,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
 diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc
 --- a/components/autofill/core/common/autofill_prefs.cc
 +++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -135,6 +135,9 @@ const char kAutofillWalletImportStorageCheckboxState[] =
+@@ -128,6 +128,9 @@ const char kAutofillWalletImportStorageCheckboxState[] =
  const char kAutocompleteLastVersionRetentionPolicy[] =
      "autocomplete.retention_policy_last_version";
  
@@ -372,7 +372,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    // Synced prefs. Used for cross-device choices, e.g., credit card Autofill.
    registry->RegisterBooleanPref(
-@@ -167,6 +170,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -160,6 +163,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true);
  #endif
@@ -384,7 +384,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto
 diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h
 --- a/components/autofill/core/common/autofill_prefs.h
 +++ b/components/autofill/core/common/autofill_prefs.h
-@@ -48,6 +48,7 @@ extern const char kAutofillUploadEventsLastResetTimestamp[];
+@@ -47,6 +47,7 @@ extern const char kAutofillUploadEventsLastResetTimestamp[];
  extern const char kAutofillWalletImportEnabled[];
  extern const char kAutofillWalletImportStorageCheckboxState[];
  extern const char kAutocompleteLastVersionRetentionPolicy[];

+ 2 - 2
build/patches/Enable-network-isolation-features.patch

@@ -13,8 +13,8 @@ PartitionNelAndReportingByNetworkIsolationKey
 diff --git a/net/base/features.cc b/net/base/features.cc
 --- a/net/base/features.cc
 +++ b/net/base/features.cc
-@@ -93,30 +93,30 @@ const base::Feature kNetworkQualityEstimator{"NetworkQualityEstimator",
-                                              base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -96,30 +96,30 @@ const base::Feature kSplitCacheByIncludeCredentials{
+     "SplitCacheByIncludeCredentials", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kSplitCacheByNetworkIsolationKey{
 -    "SplitCacheByNetworkIsolationKey", base::FEATURE_DISABLED_BY_DEFAULT};

+ 1 - 1
build/patches/Enable-prefetch-privacy-changes-by-default.patch

@@ -9,7 +9,7 @@ Subject: Enable prefetch-privacy-changes by default
 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
-@@ -399,7 +399,7 @@ const base::Feature kComputePressure{"ComputePressure",
+@@ -408,7 +408,7 @@ const base::Feature kComputePressure{"ComputePressure",
  // Prefetch request properties are updated to be privacy-preserving. See
  // crbug.com/988956.
  const base::Feature kPrefetchPrivacyChanges{"PrefetchPrivacyChanges",

+ 10 - 10
build/patches/Enable-share-intent.patch

@@ -38,7 +38,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
-@@ -1053,6 +1053,7 @@ chrome_java_sources = [
+@@ -1052,6 +1052,7 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardMessageHandler.java",
    "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardMetrics.java",
    "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardShareActivity.java",
@@ -171,9 +171,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni
  import org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardShareActivity;
 +import org.chromium.chrome.browser.sharing.shared_intent.SharedIntentShareActivity;
  import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData;
+ import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager;
  import org.chromium.chrome.browser.util.AfterStartupTaskUtils;
- import org.chromium.chrome.browser.webapps.WebApkVersionManager;
-@@ -405,6 +406,8 @@ public class ProcessInitializationHandler {
+@@ -397,6 +398,8 @@ public class ProcessInitializationHandler {
          deferredStartupHandler.addDeferredTask(
                  () -> IncognitoTabLauncher.updateComponentEnabledState());
  
@@ -304,7 +304,7 @@ new file mode 100644
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -5402,6 +5402,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -5637,6 +5637,10 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(sharing_hub::kDesktopScreenshots)},
  #endif
  
@@ -318,7 +318,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -2275,6 +2275,11 @@ const char kSharingDesktopScreenshotsDescription[] =
+@@ -2319,6 +2319,11 @@ const char kSharingDesktopScreenshotsDescription[] =
      "Enables taking"
      " screenshots from the desktop sharing hub.";
  
@@ -333,7 +333,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -1307,6 +1307,9 @@ extern const char kSharedClipboardUIDescription[];
+@@ -1336,6 +1336,9 @@ extern const char kSharedClipboardUIDescription[];
  extern const char kSharingDesktopScreenshotsName[];
  extern const char kSharingDesktopScreenshotsDescription[];
  
@@ -346,7 +346,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -256,6 +256,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+@@ -258,6 +258,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
      &kServiceManagerForDownload,
      &kShareButtonInTopToolbar,
      &kSharedClipboardUI,
@@ -354,7 +354,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
      &kSharingHubLinkToggle,
      &kSingleTouchSelect,
      &kSpannableInlineAutocomplete,
-@@ -640,6 +641,9 @@ const base::Feature kSearchEnginePromoExistingDevice{
+@@ -644,6 +645,9 @@ const base::Feature kSearchEnginePromoExistingDevice{
  const base::Feature kSearchEnginePromoNewDevice{
      "SearchEnginePromo.NewDevice", base::FEATURE_ENABLED_BY_DEFAULT};
  
@@ -378,7 +378,7 @@ 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
-@@ -495,6 +495,7 @@ public abstract class ChromeFeatureList {
+@@ -481,6 +481,7 @@ public abstract class ChromeFeatureList {
      public static final String SHARE_USAGE_RANKING = "ShareUsageRanking";
      public static final String SHARE_USAGE_RANKING_FIXED_MORE = "ShareUsageRankingFixedMore";
      public static final String SHARED_CLIPBOARD_UI = "SharedClipboardUI";
@@ -389,7 +389,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
 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
-@@ -4459,6 +4459,19 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -4518,6 +4518,19 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
          Send text to Your Devices
        </message>
  

+ 1 - 1
build/patches/Enable-user-agent-freeze-by-default.patch

@@ -9,7 +9,7 @@ Subject: Enable user-agent freeze by default
 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
-@@ -77,7 +77,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{
+@@ -81,7 +81,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{
  
  // Freezes the user-agent as part of https://github.com/WICG/ua-client-hints.
  const base::Feature kReduceUserAgent{"ReduceUserAgent",

+ 41 - 42
build/patches/Experimental-user-scripts-support.patch

@@ -236,7 +236,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
  }
  
  if (enable_vr) {
-@@ -513,6 +517,7 @@ android_library("chrome_java") {
+@@ -517,6 +521,7 @@ android_library("chrome_java") {
      "//components/ukm/android:java",
      "//components/url_formatter/android:url_formatter_java",
      "//components/user_prefs/android:java",
@@ -262,7 +262,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
-@@ -63,6 +63,7 @@ import org.chromium.content_public.browser.BrowserStartupController;
+@@ -68,6 +68,7 @@ import org.chromium.content_public.browser.BrowserStartupController;
  import org.chromium.content_public.browser.LoadUrlParams;
  import org.chromium.ui.base.DeviceFormFactor;
  import org.chromium.ui.widget.Toast;
@@ -270,7 +270,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
  
  import java.io.File;
  
-@@ -414,6 +415,11 @@ public class DownloadUtils {
+@@ -419,6 +420,11 @@ public class DownloadUtils {
      public static boolean openFile(String filePath, String mimeType, String downloadGuid,
              OTRProfileID otrProfileID, String originalUrl, String referrer,
              @DownloadOpenSource int source, Context context) {
@@ -285,7 +285,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
-@@ -113,6 +113,8 @@ import java.util.Date;
+@@ -111,6 +111,8 @@ import java.util.Date;
  import java.util.List;
  import java.util.Locale;
  
@@ -294,7 +294,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni
  /**
   * Handles the initialization dependences of the browser process.  This is meant to handle the
   * initialization that is not tied to any particular Activity, and the logic that should only be
-@@ -293,6 +295,7 @@ public class ProcessInitializationHandler {
+@@ -285,6 +287,7 @@ public class ProcessInitializationHandler {
  
                  DefaultBrowserInfo.initBrowserFetcher();
  
@@ -313,7 +313,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
  
  chrome_java_sources += public_autofill_assistant_java_sources
  
-@@ -59,3 +60,5 @@ if (enable_arcore) {
+@@ -60,3 +61,5 @@ if (enable_arcore) {
      "java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java",
    ]
  }
@@ -322,7 +322,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -3410,6 +3410,11 @@ static_library("browser") {
+@@ -3454,6 +3454,11 @@ static_library("browser") {
        ]
        deps += [ "//chrome/android/modules/dev_ui/provider:native" ]
      }
@@ -337,7 +337,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -141,6 +141,7 @@
+@@ -147,6 +147,7 @@
  #include "components/translate/core/browser/translate_ranker_impl.h"
  #include "components/translate/core/common/translate_util.h"
  #include "components/ui_devtools/switches.h"
@@ -345,7 +345,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  #include "components/version_info/version_info.h"
  #include "components/viz/common/features.h"
  #include "components/viz/common/switches.h"
-@@ -6386,6 +6387,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -6591,6 +6592,10 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(features::kUserDataSnapshot)},
  #endif
  
@@ -359,7 +359,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -4475,7 +4475,8 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles(
+@@ -4480,7 +4480,8 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles(
    chrome::mojom::DynamicParams dynamic_params = {
        profile->GetPrefs()->GetBoolean(prefs::kForceGoogleSafeSearch),
        profile->GetPrefs()->GetInteger(prefs::kForceYouTubeRestrict),
@@ -372,7 +372,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -5249,6 +5249,11 @@ const char kUserDataSnapshotDescription[] =
+@@ -5358,6 +5358,11 @@ const char kUserDataSnapshotDescription[] =
      "update and restoring them after a version rollback.";
  #endif  // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
  
@@ -387,7 +387,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -3052,6 +3052,9 @@ extern const char kUserDataSnapshotName[];
+@@ -3125,6 +3125,9 @@ extern const char kUserDataSnapshotName[];
  extern const char kUserDataSnapshotDescription[];
  #endif  // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
  
@@ -406,9 +406,9 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
  #include "components/query_tiles/tile_service_prefs.h"
 +#include "components/user_scripts/browser/user_script_prefs.h"
  #else  // defined(OS_ANDROID)
- #include "chrome/browser/accessibility/live_caption_controller.h"
  #include "chrome/browser/cart/cart_service.h"
-@@ -1148,6 +1149,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
+ #include "chrome/browser/device_api/device_service_impl.h"
+@@ -1177,6 +1178,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
    translate::TranslatePrefs::RegisterProfilePrefs(registry);
    omnibox::RegisterProfilePrefs(registry);
    ZeroSuggestProvider::RegisterProfilePrefs(registry);
@@ -430,7 +430,7 @@ diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn
 diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
 +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
-@@ -212,6 +212,8 @@
+@@ -214,6 +214,8 @@
  #include "chrome/browser/ui/cocoa/screentime/screentime_features.h"
  #endif
  
@@ -439,7 +439,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
  namespace chrome {
  
  void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) {
-@@ -503,6 +505,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+@@ -506,6 +508,7 @@ void ChromeBrowserMainExtraPartsProfiles::
  #endif
    WebDataServiceFactory::GetInstance();
    webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance();
@@ -450,7 +450,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
 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
-@@ -113,6 +113,8 @@
+@@ -114,6 +114,8 @@
  #include "extensions/common/manifest.h"
  #endif
  
@@ -459,7 +459,7 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile
  #if BUILDFLAG(ENABLE_SESSION_SERVICE)
  #include "chrome/browser/sessions/session_service_factory.h"
  #endif
-@@ -1512,6 +1514,13 @@ void ProfileManager::DoFinalInitForServices(Profile* profile,
+@@ -1522,6 +1524,13 @@ void ProfileManager::DoFinalInitForServices(Profile* profile,
    }
  
  #endif
@@ -504,7 +504,7 @@ diff --git a/chrome/browser/profiles/renderer_updater.cc b/chrome/browser/profil
  }
  
  RendererUpdater::~RendererUpdater() {
-@@ -223,5 +230,6 @@ void RendererUpdater::UpdateRenderer(
+@@ -237,5 +244,6 @@ void RendererUpdater::UpdateRenderer(
        ->SetConfiguration(chrome::mojom::DynamicParams::New(
            force_google_safesearch_.GetValue(),
            force_youtube_restrict_.GetValue(),
@@ -534,7 +534,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
  #include "content/public/browser/web_contents.h"
  #include "content/public/browser/web_ui.h"
  #include "content/public/common/content_client.h"
-@@ -650,6 +651,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -669,6 +670,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<UserActionsUI>;
    if (url.host_piece() == chrome::kChromeUIVersionHost)
      return &NewWebUI<VersionUI>;
@@ -542,7 +542,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
 +    return &NewWebUI<user_scripts::UserScriptsUI>;
  
  #if !defined(OS_ANDROID)
- #if !BUILDFLAG(IS_CHROMEOS_ASH)
+ #if !defined(OS_CHROMEOS)
 diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni
 --- a/chrome/chrome_paks.gni
 +++ b/chrome/chrome_paks.gni
@@ -597,7 +597,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer
  using autofill::AutofillAgent;
  using autofill::AutofillAssistantAgent;
  using autofill::PasswordAutofillAgent;
-@@ -405,6 +408,12 @@ void ChromeContentRendererClient::RenderThreadStarted() {
+@@ -416,6 +419,12 @@ void ChromeContentRendererClient::RenderThreadStarted() {
        WebString::FromASCII(extensions::kExtensionScheme));
  #endif
  
@@ -610,7 +610,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer
  #if BUILDFLAG(ENABLE_SPELLCHECK)
    if (!spellcheck_)
      InitSpellCheck();
-@@ -541,6 +550,13 @@ void ChromeContentRendererClient::RenderFrameCreated(
+@@ -552,6 +561,13 @@ void ChromeContentRendererClient::RenderFrameCreated(
        render_frame, registry);
  #endif
  
@@ -624,7 +624,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer
  #if BUILDFLAG(ENABLE_PLUGINS)
    new PepperHelper(render_frame);
  #endif
-@@ -1533,7 +1549,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart(
+@@ -1549,7 +1565,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart(
    ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentStart(
        render_frame);
    // |render_frame| might be dead by now.
@@ -639,7 +639,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer
  }
  
  void ChromeContentRendererClient::RunScriptsAtDocumentEnd(
-@@ -1542,7 +1565,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd(
+@@ -1558,7 +1581,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd(
    ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentEnd(
        render_frame);
    // |render_frame| might be dead by now.
@@ -654,7 +654,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer
  }
  
  void ChromeContentRendererClient::RunScriptsAtDocumentIdle(
-@@ -1551,7 +1581,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle(
+@@ -1567,7 +1597,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle(
    ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentIdle(
        render_frame);
    // |render_frame| might be dead by now.
@@ -692,7 +692,7 @@ diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/
 diff --git a/components/components_strings.grd b/components/components_strings.grd
 --- a/components/components_strings.grd
 +++ b/components/components_strings.grd
-@@ -334,6 +334,7 @@
+@@ -335,6 +335,7 @@
        <part file="undo_strings.grdp" />
        <part file="version_ui_strings.grdp" />
        <part file="webapps_strings.grdp" />
@@ -1919,7 +1919,7 @@ new file mode 100644
 +        window.showIntent(fileSelector,
 +            new WindowAndroid.IntentCallback() {
 +                @Override
-+                public void onIntentCompleted(WindowAndroid window, int resultCode, Intent data) {
++                public void onIntentCompleted(int resultCode, Intent data) {
 +                    if (data == null) return;
 +                    Uri filePath = data.getData();
 +                    TryToInstall(context, filePath.toString());
@@ -2118,7 +2118,7 @@ new file mode 100755
 +    @Override
 +    public void onActivityResult(int requestCode, int resultCode, Intent data) {
 +        // handle picker callback from SelectFileDialog
-+        mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data, mWindowAndroid);
++        mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data);
 +    }
 +
 +    public void onHelpAndFeebackPressed() {
@@ -2689,7 +2689,7 @@ new file mode 100644
 +  void RegisterMessages() override;
 +
 + private:
-+  void HandleRequestSource(const base::ListValue* args);
++  void HandleRequestSource(base::Value::ConstListView args);
 +  void OnScriptsLoaded(
 +      const std::string callback_id,
 +      const std::string script_key,
@@ -2716,13 +2716,13 @@ new file mode 100644
 +                          base::Unretained(this)));
 +}
 +
-+void UserScriptsUIHandler::HandleRequestSource(const base::ListValue* args) {
++void UserScriptsUIHandler::HandleRequestSource(base::Value::ConstListView args) {
 +  AllowJavascript();
-+  std::string callback_id;
-+  CHECK(args->GetString(0, &callback_id));
++  if (args.size() < 2) return;
 +
-+  std::string script_key;
-+  if (args->GetString(1, &script_key) == false) {
++  std::string callback_id = args[0].GetString();
++  std::string script_key = args[1].GetString();
++  if (script_key.empty()) {
 +    std::string json = "Missing key value.";
 +    ResolveJavascriptCallback(base::Value(callback_id), base::Value(json));
 +    return;
@@ -2785,7 +2785,6 @@ new file mode 100644
 +}
 +
 +}
-\ No newline at end of file
 diff --git a/components/user_scripts/browser/ui/user_scripts_ui.h b/components/user_scripts/browser/ui/user_scripts_ui.h
 new file mode 100644
 --- /dev/null
@@ -6246,7 +6245,7 @@ new file mode 100755
 +                             bool allow_file_access,
 +                             std::string* error) {
 +  std::vector<std::string> patterns;
-+  for (size_t i = 0; i < value.GetSize(); ++i) {
++  for (size_t i = 0; i < value.GetList().size(); ++i) {
 +    std::string item;
 +    if (!value.GetString(i, &item))
 +      return false;
@@ -8725,7 +8724,7 @@ new file mode 100755
 +  void DidCreateNewDocument() override;
 +  void DidCreateDocumentElement() override;
 +  void DidFailProvisionalLoad() override;
-+  void DidFinishDocumentLoad() override;
++  void DidDispatchDOMContentLoadedEvent() override;
 +  void WillDetach() override;
 +  void OnDestruct() override;
 +  void OnStop() override;
@@ -8817,9 +8816,9 @@ new file mode 100755
 +  }
 +}
 +
-+void ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad() {
++void ScriptInjectionManager::RFOHelper::DidDispatchDOMContentLoadedEvent() {
 +  if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
-+    LOG(INFO) << "UserScripts: DidFinishDocumentLoad -> DOCUMENT_END";
++    LOG(INFO) << "UserScripts: DidDispatchDOMContentLoadedEvent -> DOCUMENT_END";
 +
 +  DCHECK(content::RenderThread::Get());
 +  ExtensionFrameHelper::Get(render_frame())
@@ -8828,7 +8827,7 @@ new file mode 100755
 +                     weak_factory_.GetWeakPtr(), UserScript::DOCUMENT_END));
 +
 +  // We try to run idle in two places: a delayed task here and in response to
-+  // ContentRendererClient::RunScriptsAtDocumentIdle(). DidFinishDocumentLoad()
++  // ContentRendererClient::RunScriptsAtDocumentIdle(). DidDispatchDOMContentLoadedEvent()
 +  // corresponds to completing the document's load, whereas
 +  // RunScriptsAtDocumentIdle() corresponds to completing the document and all
 +  // subresources' load (but before the window.onload event). We don't want to
@@ -10623,7 +10622,7 @@ new file mode 100755
 diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
 --- a/tools/gritsettings/resource_ids.spec
 +++ b/tools/gritsettings/resource_ids.spec
-@@ -556,6 +556,12 @@
+@@ -567,6 +567,12 @@
    "components/autofill/core/browser/autofill_address_rewriter_resources.grd":{
      "includes": [2880]
    },

+ 6 - 6
build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch

@@ -33,7 +33,7 @@ diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/r
 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
-@@ -274,6 +274,7 @@
+@@ -275,6 +275,7 @@
  #include "third_party/blink/renderer/core/page/scrolling/root_scroller_controller.h"
  #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h"
  #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
@@ -50,7 +50,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  #ifndef NDEBUG
  using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
  static WeakDocumentSet& liveDocumentSet();
-@@ -6536,6 +6539,61 @@ void Document::setAllowDeclarativeShadowRoots(bool val) {
+@@ -6532,6 +6535,61 @@ void Document::setAllowDeclarativeShadowRoots(bool val) {
        val ? AllowState::kAllow : AllowState::kDeny;
  }
  
@@ -112,7 +112,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  void Document::FinishedParsing() {
    DCHECK(!GetScriptableDocumentParser() || !parser_->IsParsing());
    DCHECK(!GetScriptableDocumentParser() || ready_state_ != kLoading);
-@@ -6591,6 +6649,10 @@ void Document::FinishedParsing() {
+@@ -6587,6 +6645,10 @@ void Document::FinishedParsing() {
      if (frame->GetFrameScheduler())
        frame->GetFrameScheduler()->OnDomContentLoaded();
  
@@ -126,7 +126,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
 diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
 --- a/third_party/blink/renderer/core/dom/document.h
 +++ b/third_party/blink/renderer/core/dom/document.h
-@@ -1746,6 +1746,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1772,6 +1772,9 @@ class CORE_EXPORT Document : public ContainerNode,
    void AddAXContext(AXContext*);
    void RemoveAXContext(AXContext*);
  
@@ -161,7 +161,7 @@ new file mode 100644
 diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third_party/blink/renderer/core/html/html_script_element.cc
 --- a/third_party/blink/renderer/core/html/html_script_element.cc
 +++ b/third_party/blink/renderer/core/html/html_script_element.cc
-@@ -168,6 +168,11 @@ void HTMLScriptElement::setTextContent(const String& string) {
+@@ -169,6 +169,11 @@ void HTMLScriptElement::setTextContent(const String& string) {
    script_text_internal_slot_ = ParkableString(string.Impl());
  }
  
@@ -176,7 +176,7 @@ diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third
 diff --git a/third_party/blink/renderer/core/html/html_script_element.h b/third_party/blink/renderer/core/html/html_script_element.h
 --- a/third_party/blink/renderer/core/html/html_script_element.h
 +++ b/third_party/blink/renderer/core/html/html_script_element.h
-@@ -56,6 +56,7 @@ class CORE_EXPORT HTMLScriptElement final : public HTMLElement,
+@@ -59,6 +59,7 @@ class CORE_EXPORT HTMLScriptElement final : public HTMLElement,
    void setTextContentForBinding(const V8UnionStringOrTrustedScript* value,
                                  ExceptionState& exception_state) override;
    void setTextContent(const String&) override;

+ 11 - 11
build/patches/JIT-less-toggle.patch

@@ -13,7 +13,7 @@ Subject: JIT-less toggle
 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
-@@ -28,6 +28,11 @@
+@@ -32,6 +32,11 @@
          android:title="@string/preload_pages_title"
          android:summary="@string/preload_pages_summary"
          android:persistent="false"/>
@@ -36,15 +36,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import android.os.Build;
  import android.content.SharedPreferences;
  import android.os.Bundle;
-@@ -71,6 +72,7 @@ public class PrivacySettings
-     private static final String PREF_DO_NOT_TRACK = "do_not_track";
-     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
-     private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+@@ -79,6 +80,7 @@ public class PrivacySettings
+     private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
+     private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
+     public static final String PREF_AUTOFILL_ASSISTANT = "autofill_assistant";
 +    private static final String PREF_FORCE_NO_JIT = "force_no_jit";
- 
-     private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
- 
-@@ -201,6 +203,10 @@ public class PrivacySettings
+     private ChromeSwitchPreference mSearchSuggestions;
+     private @Nullable ChromeSwitchPreference mAutofillAssistant;
+     private @Nullable Preference mContextualSearch;
+@@ -200,6 +202,10 @@ public class PrivacySettings
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
          } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
              prefService.setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
@@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          } else if (PREF_AUTOFILL_ASSISTANT.equals(key)) {
              mSharedPreferencesManager.writeBoolean(
                  ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, (boolean) newValue);
-@@ -280,6 +286,12 @@ public class PrivacySettings
+@@ -279,6 +285,12 @@ public class PrivacySettings
              historyInIncognitoPref.setChecked(
                      prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED));
          }
@@ -71,7 +71,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
 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
-@@ -929,6 +929,13 @@ Privacy Sandbox trials are still in active development and are available in sele
+@@ -944,6 +944,13 @@ Privacy Sandbox trials are still in active development and are available in sele
          Please verify that this is a valid provider or try again later
        </message>
  

+ 1 - 1
build/patches/Keep-empty-tabs-between-sessions.patch

@@ -10,7 +10,7 @@ Subject: Keep empty tabs between sessions
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
-@@ -734,15 +734,6 @@ public class TabPersistentStore {
+@@ -701,15 +701,6 @@ public class TabPersistentStore {
                      .createFrozenTab(tabState, serializedCriticalPersistedTabData, tabToRestore.id,
                              isIncognito, restoredIndex);
          } else {

+ 21 - 19
build/patches/Logcat-crash-reports-UI.patch

@@ -8,7 +8,7 @@ Subject: Logcat crash reports UI
  .../crash_upload_list_android.h               |   1 +
  chrome/browser/net/chrome_network_delegate.cc |   7 +
  chrome/browser/ui/BUILD.gn                    |   1 +
- chrome/browser/ui/webui/crashes_ui.cc         | 165 ++++++++++++++++--
+ chrome/browser/ui/webui/crashes_ui.cc         | 166 ++++++++++++++++--
  .../crash/core/browser/crashes_ui_util.cc     |   4 +
  .../crash/core/browser/crashes_ui_util.h      |   2 +
  .../crash/core/browser/resources/crashes.css  |  67 ++++++-
@@ -21,7 +21,7 @@ Subject: Logcat crash reports UI
  .../upload_list/text_log_upload_list.cc       |   1 +
  components/upload_list/upload_list.cc         |  17 +-
  components/upload_list/upload_list.h          |   9 +
- 18 files changed, 374 insertions(+), 79 deletions(-)
+ 18 files changed, 374 insertions(+), 80 deletions(-)
 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java
@@ -138,7 +138,7 @@ diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.h b/chro
 diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
 --- a/chrome/browser/net/chrome_network_delegate.cc
 +++ b/chrome/browser/net/chrome_network_delegate.cc
-@@ -130,6 +130,13 @@ bool IsAccessAllowedAndroid(const base::FilePath& path) {
+@@ -131,6 +131,13 @@ bool IsAccessAllowedAndroid(const base::FilePath& path) {
    if (external_storage_path.IsParent(path))
      return true;
  
@@ -206,26 +206,26 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
    // WebUIMessageHandler implementation.
 @@ -96,6 +111,8 @@ class CrashesDOMHandler : public WebUIMessageHandler {
    // Asynchronously fetches the list of crashes. Called from JS.
-   void HandleRequestCrashes(const base::ListValue* args);
+   void HandleRequestCrashes(base::Value::ConstListView args);
  
 +  void RequestCrashesList();
 +
  #if BUILDFLAG(IS_CHROMEOS_ASH)
    // Asynchronously triggers crash uploading. Called from JS.
-   void HandleRequestUploads(const base::ListValue* args);
+   void HandleRequestUploads(base::Value::ConstListView args);
 @@ -107,15 +124,28 @@ class CrashesDOMHandler : public WebUIMessageHandler {
    // Asynchronously requests a user triggered upload. Called from JS.
-   void HandleRequestSingleCrashUpload(const base::ListValue* args);
+   void HandleRequestSingleCrashUpload(base::Value::ConstListView args);
  
 +  std::string RequestSingleUpload(const std::string& local_id) const;
 +  void RequestSingleUploadCallback(const std::string& local_id, const std::string& filename);
 +
 +  // Asynchronously requests a user log extraction. Called from JS.
-+  void HandleRequestNewExtraction(const base::ListValue* args);
++  void HandleRequestNewExtraction(base::Value::ConstListView args);
 +  void RequestNewExtraction();
 +
 +  // Requests remove all crash files. Called from JS.
-+  void HandleRequestClearAll(const base::ListValue* args);
++  void HandleRequestClearAll(base::Value::ConstListView args);
 +  void ClearAll();
 +
    scoped_refptr<UploadList> upload_list_;
@@ -260,7 +260,7 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
 +                          base::Unretained(this)));
  }
  
- void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) {
+ void CrashesDOMHandler::HandleRequestCrashes(base::Value::ConstListView args) {
    AllowJavascript();
 +  RequestCrashesList();
 +}
@@ -279,14 +279,15 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
  
    bool system_crash_reporter = false;
  #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
-@@ -241,12 +284,111 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload(
-   bool success = args->GetString(0, &local_id);
-   DCHECK(success);
+@@ -235,14 +278,112 @@ void CrashesDOMHandler::UpdateUI() {
  
+ void CrashesDOMHandler::HandleRequestSingleCrashUpload(
+     base::Value::ConstListView args) {
 -  // Only allow manual uploads if crash uploads aren’t disabled by policy.
 -  if (!ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled() &&
 -      IsMetricsReportingPolicyManaged()) {
 -    return;
++  std::string local_id = args[0].GetString();
 +  base::ThreadPool::PostTaskAndReplyWithResult(
 +      FROM_HERE, kLoadingTaskTraits,
 +      base::BindOnce(&CrashesDOMHandler::RequestSingleUpload, base::Unretained(this), local_id),
@@ -328,8 +329,10 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
 +    LOG(ERROR) << "Crash report: file " << crash_file_path
 +               << " no more available";
 +    return std::string();
-+  }
-+
+   }
+ 
+-  std::string local_id = args[0].GetString();
+-  upload_list_->RequestSingleUploadAsync(local_id);
 +  std::vector<base::FilePath> files_list;
 +  files_list.push_back(crash_file_path.BaseName());
 +
@@ -358,7 +361,7 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
 +}
 +
 +void CrashesDOMHandler::HandleRequestNewExtraction(
-+    const base::ListValue* args) {
++    base::Value::ConstListView args) {
 +  base::ThreadPool::PostTask(
 +      FROM_HERE, kLoadingTaskTraits,
 +      base::BindOnce(&CrashesDOMHandler::RequestNewExtraction, base::Unretained(this)));
@@ -371,7 +374,7 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
 +}
 +
 +void CrashesDOMHandler::HandleRequestClearAll(
-+    const base::ListValue* args) {
++    base::Value::ConstListView args) {
 +  base::ThreadPool::PostTaskAndReply(
 +      FROM_HERE, kLoadingTaskTraits,
 +      base::BindOnce(&CrashesDOMHandler::ClearAll, base::Unretained(this)),
@@ -391,12 +394,11 @@ diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/cra
 +  while (full_name = dir_enum.Next(), !full_name.empty()) {
 +    // remove all files, don't care for result
 +    base::DeleteFile(full_name);
-   }
--  upload_list_->RequestSingleUploadAsync(local_id);
++   }
  }
  
  }  // namespace
-@@ -258,7 +400,8 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload(
+@@ -254,7 +395,8 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload(
  ///////////////////////////////////////////////////////////////////////////////
  
  CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) {

+ 19 - 12
build/patches/Modify-default-preferences.patch

@@ -13,9 +13,10 @@ Subject: Modify default preferences
  chrome/service/cloud_print/connector_settings.cc            | 2 +-
  components/autofill/core/browser/browser_autofill_manager.h | 4 ++--
  components/autofill/core/common/autofill_prefs.cc           | 2 +-
- components/bookmarks/browser/bookmark_utils.cc              | 4 ++--
+ components/bookmarks/browser/bookmark_utils.cc              | 2 +-
+ components/bookmarks/browser/features.cc                    | 2 +-
  components/safe_browsing/core/common/safe_browsing_prefs.cc | 4 ++--
- 12 files changed, 17 insertions(+), 17 deletions(-)
+ 13 files changed, 17 insertions(+), 17 deletions(-)
 
 diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
 --- a/chrome/browser/background/background_mode_manager.cc
@@ -32,7 +33,7 @@ diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/brows
 diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -1186,7 +1186,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
+@@ -1203,7 +1203,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -122,7 +123,7 @@ diff --git a/chrome/service/cloud_print/connector_settings.cc b/chrome/service/c
 diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
 --- a/components/autofill/core/browser/browser_autofill_manager.h
 +++ b/components/autofill/core/browser/browser_autofill_manager.h
-@@ -681,9 +681,9 @@ class BrowserAutofillManager
+@@ -691,9 +691,9 @@ class BrowserAutofillManager : public AutofillManager,
    std::unique_ptr<CreditCardFormEventLogger> credit_card_form_event_logger_;
  
    // Have we logged whether Autofill is enabled for this page load?
@@ -137,7 +138,7 @@ diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/compo
 diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc
 --- a/components/autofill/core/common/autofill_prefs.cc
 +++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -154,7 +154,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -147,7 +147,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kAutofillLastVersionDisusedAddressesDeleted, 0,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -149,7 +150,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto
 diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmarks/browser/bookmark_utils.cc
 --- a/components/bookmarks/browser/bookmark_utils.cc
 +++ b/components/bookmarks/browser/bookmark_utils.cc
-@@ -440,12 +440,12 @@ bool DoesBookmarkContainWords(const std::u16string& title,
+@@ -437,7 +437,7 @@ bool DoesBookmarkContainWords(const std::u16string& title,
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kShowBookmarkBar,
@@ -158,12 +159,18 @@ diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmar
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(prefs::kEditBookmarksEnabled, true);
    registry->RegisterBooleanPref(
-       prefs::kShowAppsShortcutInBookmarkBar,
--      true,
-+      false,
-       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-   registry->RegisterBooleanPref(
-       prefs::kShowReadingListInBookmarkBar, true,
+diff --git a/components/bookmarks/browser/features.cc b/components/bookmarks/browser/features.cc
+--- a/components/bookmarks/browser/features.cc
++++ b/components/bookmarks/browser/features.cc
+@@ -10,7 +10,7 @@ namespace features {
+ // Changes the apps shortcut on the bookmarks bar to default to off.
+ // https://crbug.com/1236793
+ const base::Feature kAppsShortcutDefaultOff{"AppsShortcutDefaultOff",
+-                                            base::FEATURE_DISABLED_BY_DEFAULT};
++                                            base::FEATURE_ENABLED_BY_DEFAULT};
+ 
+ }  // namespace features
+ }  // namespace bookmarks
 diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.cc b/components/safe_browsing/core/common/safe_browsing_prefs.cc
 --- a/components/safe_browsing/core/common/safe_browsing_prefs.cc
 +++ b/components/safe_browsing/core/common/safe_browsing_prefs.cc

+ 7 - 7
build/patches/Move-some-account-settings-back-to-privacy-settings.patch

@@ -12,7 +12,7 @@ Search suggestions, autofill assistant and contextual search
 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,4 +55,24 @@
+@@ -59,4 +59,24 @@
          android:key="privacy_sandbox"
          android:title="@string/prefs_privacy_sandbox"
          android:fragment="org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsFragment"/>
@@ -48,7 +48,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
  import org.chromium.chrome.browser.preferences.Pref;
-@@ -45,6 +46,13 @@ import org.chromium.components.user_prefs.UserPrefs;
+@@ -44,6 +45,13 @@ import org.chromium.components.user_prefs.UserPrefs;
  import org.chromium.ui.text.NoUnderlineClickableSpan;
  import org.chromium.ui.text.SpanApplier;
  
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
      @Override
-@@ -96,6 +116,29 @@ public class PrivacySettings
+@@ -95,6 +115,29 @@ public class PrivacySettings
  
          mManagedPreferenceDelegate = createManagedPreferenceDelegate();
  
@@ -111,7 +111,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          ChromeSwitchPreference canMakePaymentPref =
                  (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
          canMakePaymentPref.setOnPreferenceChangeListener(this);
-@@ -156,6 +199,11 @@ public class PrivacySettings
+@@ -155,6 +198,11 @@ public class PrivacySettings
          } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
@@ -123,7 +123,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
                      (boolean) newValue);
-@@ -175,6 +223,16 @@ public class PrivacySettings
+@@ -174,6 +222,16 @@ public class PrivacySettings
  
      public static final String PREF_INCOGNITO_TAB_HISTORY_ENABLED = "incognito_history_enabled";
  
@@ -140,7 +140,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onResume() {
          super.onResume();
-@@ -185,7 +243,7 @@ public class PrivacySettings
+@@ -184,7 +242,7 @@ public class PrivacySettings
       * Updates the summaries for several preferences.
       */
      public void updateSummaries() {
@@ -152,7 +152,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
 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
-@@ -399,6 +399,10 @@ CHAR_LIMIT guidelines:
+@@ -396,6 +396,10 @@ CHAR_LIMIT guidelines:
          No statistics or crash reports are sent to Google
        </message>
  

+ 31 - 30
build/patches/Multiple-fingerprinting-mitigations.patch

@@ -27,7 +27,7 @@ Added flag --fingerprinting-canvas-image-data-noise to disable Canvas image data
  chrome/browser/BUILD.gn                       |   1 +
  chrome/browser/about_flags.cc                 |  15 ++
  content/browser/BUILD.gn                      |   1 +
- .../renderer_host/render_process_host_impl.cc |   4 +
+ .../renderer_host/render_process_host_impl.cc |   5 +
  content/child/BUILD.gn                        |   1 +
  content/child/runtime_features.cc             |   9 +
  .../public/platform/web_runtime_features.h    |   3 +
@@ -48,7 +48,7 @@ Added flag --fingerprinting-canvas-image-data-noise to disable Canvas image data
  third_party/ungoogled/BUILD.gn                |  10 ++
  third_party/ungoogled/ungoogled_switches.cc   |  18 ++
  third_party/ungoogled/ungoogled_switches.h    |  18 ++
- 24 files changed, 345 insertions(+), 3 deletions(-)
+ 24 files changed, 346 insertions(+), 3 deletions(-)
  create mode 100644 third_party/ungoogled/BUILD.gn
  create mode 100644 third_party/ungoogled/ungoogled_switches.cc
  create mode 100644 third_party/ungoogled/ungoogled_switches.h
@@ -56,7 +56,7 @@ Added flag --fingerprinting-canvas-image-data-noise to disable Canvas image data
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -2276,6 +2276,7 @@ static_library("browser") {
+@@ -2299,6 +2299,7 @@ static_library("browser") {
      "//services/device/public/cpp:device_features",
      "//services/device/public/cpp/serial:switches",
      "//services/device/public/cpp/usb",
@@ -67,7 +67,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -176,6 +176,7 @@
+@@ -182,6 +182,7 @@
  #include "services/media_session/public/cpp/features.h"
  #include "services/network/public/cpp/features.h"
  #include "services/network/public/cpp/network_switches.h"
@@ -75,7 +75,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  #include "storage/browser/quota/quota_features.h"
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/common/forcedark/forcedark_switches.h"
-@@ -2731,6 +2732,20 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2860,6 +2861,20 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kWebrtcUseMinMaxVEADimensionsName,
       flag_descriptions::kWebrtcUseMinMaxVEADimensionsDescription, kOsAll,
       FEATURE_VALUE_TYPE(blink::features::kWebRtcUseMinMaxVEADimensions)},
@@ -99,7 +99,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
 --- a/content/browser/BUILD.gn
 +++ b/content/browser/BUILD.gn
-@@ -222,6 +222,7 @@ source_set("browser") {
+@@ -221,6 +221,7 @@ source_set("browser") {
      "//third_party/libyuv",
      "//third_party/re2",
      "//third_party/sqlite",
@@ -110,15 +110,16 @@ diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -215,6 +215,7 @@
- #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
- #include "third_party/blink/public/mojom/disk_allocator.mojom.h"
- #include "third_party/blink/public/public_buildflags.h"
+@@ -213,6 +213,8 @@
+ #include "services/tracing/public/cpp/system_tracing_service.h"
+ #endif
+ 
 +#include "third_party/ungoogled/ungoogled_switches.h"
- #include "third_party/skia/include/core/SkBitmap.h"
- #include "ui/accessibility/accessibility_switches.h"
- #include "ui/base/ui_base_switches.h"
-@@ -3394,6 +3395,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -3427,6 +3429,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
      switches::kDisableBreakpad,
      switches::kDisableDatabases,
      switches::kDisableFileSystem,
@@ -189,9 +190,9 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  #include "base/time/time.h"
  #include "cc/input/overscroll_behavior.h"
  #include "cc/input/scroll_snap_data.h"
-@@ -2134,6 +2135,23 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() {
+@@ -2149,6 +2150,23 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() {
  #if DCHECK_IS_ON()
-   AssertLayoutTreeUpdated(*this);
+   AssertLayoutTreeUpdated(*this, true /* allow_dirty_container_subtrees */);
  #endif
 +
 +  if (RuntimeEnabledFeatures::FingerprintingClientRectsNoiseEnabled()) {
@@ -216,7 +217,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
 diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
 --- a/third_party/blink/renderer/core/dom/document.h
 +++ b/third_party/blink/renderer/core/dom/document.h
-@@ -453,6 +453,10 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -456,6 +456,10 @@ class CORE_EXPORT Document : public ContainerNode,
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -227,7 +228,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/
    AtomicString visibilityState() const;
    bool IsPageVisible() const;
    bool hidden() const;
-@@ -2052,6 +2056,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -2077,6 +2081,9 @@ class CORE_EXPORT Document : public ContainerNode,
  
    base::ElapsedTimer start_time_;
  
@@ -240,7 +241,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/
 diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
 --- a/third_party/blink/renderer/core/dom/element.cc
 +++ b/third_party/blink/renderer/core/dom/element.cc
-@@ -2107,6 +2107,11 @@ DOMRectList* Element::getClientRects() {
+@@ -2115,6 +2115,11 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -252,7 +253,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
    return MakeGarbageCollected<DOMRectList>(quads);
  }
  
-@@ -2124,6 +2129,9 @@ FloatRect Element::GetBoundingClientRectNoLifecycleUpdate() const {
+@@ -2132,6 +2137,9 @@ FloatRect Element::GetBoundingClientRectNoLifecycleUpdate() const {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
@@ -265,7 +266,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
 diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/renderer/core/dom/range.cc
 --- a/third_party/blink/renderer/core/dom/range.cc
 +++ b/third_party/blink/renderer/core/dom/range.cc
-@@ -1591,6 +1591,12 @@ DOMRectList* Range::getClientRects() const {
+@@ -1595,6 +1595,12 @@ DOMRectList* Range::getClientRects() const {
    Vector<FloatQuad> quads;
    GetBorderAndTextQuads(quads);
  
@@ -278,7 +279,7 @@ diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/re
    return MakeGarbageCollected<DOMRectList>(quads);
  }
  
-@@ -1718,7 +1724,11 @@ FloatRect Range::BoundingRect() const {
+@@ -1722,7 +1728,11 @@ FloatRect Range::BoundingRect() const {
  
    // If all rects are empty, return the first rect.
    if (result.IsEmpty() && !quads.IsEmpty())
@@ -342,7 +343,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c
  #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
  #include "third_party/blink/renderer/platform/graphics/stroke_data.h"
  #include "third_party/blink/renderer/platform/heap/heap.h"
-@@ -2304,6 +2305,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal(
+@@ -2273,6 +2274,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal(
            snapshot->PaintImageForCurrentFrame().GetSkImageInfo().bounds();
        DCHECK(!bounds.intersect(SkIRect::MakeXYWH(sx, sy, sw, sh)));
      }
@@ -352,11 +353,11 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c
 +    }
    }
  
-   if (!IsPaint2D()) {
+   return image_data;
 diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
-@@ -960,9 +960,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+@@ -963,9 +963,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
    TextDirection direction =
        ToTextDirection(GetState().GetDirection(), canvas());
  
@@ -376,7 +377,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering
 diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
 --- a/third_party/blink/renderer/platform/BUILD.gn
 +++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -1636,7 +1636,9 @@ component("platform") {
+@@ -1639,7 +1639,9 @@ component("platform") {
      "//third_party/blink/renderer:non_test_config",
    ]
  
@@ -387,7 +388,7 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re
  
    allow_circular_includes_from = [
      "//third_party/blink/renderer/platform/blob",
-@@ -1704,6 +1706,7 @@ component("platform") {
+@@ -1707,6 +1709,7 @@ component("platform") {
      "//third_party/blink/public/strings",
      "//third_party/blink/renderer/platform/wtf",
      "//third_party/ced",
@@ -461,8 +462,8 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
  namespace blink {
  
  scoped_refptr<StaticBitmapImage> StaticBitmapImage::Create(
-@@ -81,4 +86,154 @@ void StaticBitmapImage::DrawHelper(
-                         WebCoreClampingModeToSkiaRectConstraint(clamp_mode));
+@@ -80,4 +85,154 @@ void StaticBitmapImage::DrawHelper(cc::PaintCanvas* canvas,
+       WebCoreClampingModeToSkiaRectConstraint(draw_options.clamping_mode));
  }
  
 +// set the component to maximum-delta if it is >= maximum, or add to existing color component (color + delta)
@@ -631,7 +632,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
 diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
-@@ -1003,6 +1003,15 @@
+@@ -1029,6 +1029,15 @@
        origin_trial_allows_third_party: true,
        status: "experimental",
      },

+ 1 - 1
build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch

@@ -9,7 +9,7 @@ Subject: Offer builtin autocomplete for chrome://flags
 diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
-@@ -357,6 +357,8 @@ std::vector<std::u16string> ChromeAutocompleteProviderClient::GetBuiltinURLs() {
+@@ -359,6 +359,8 @@ std::vector<std::u16string> ChromeAutocompleteProviderClient::GetBuiltinURLs() {
  std::vector<std::u16string>
  ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
    std::vector<std::u16string> builtins_to_provide;

+ 1 - 1
build/patches/Open-YouTube-links-in-Bromite.patch

@@ -9,7 +9,7 @@ Subject: Open YouTube links in Bromite
 diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
 +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
-@@ -1216,6 +1216,12 @@ public class ExternalNavigationHandler {
+@@ -1280,6 +1280,12 @@ public class ExternalNavigationHandler {
                      OverrideUrlLoadingAsyncActionType.UI_GATING_BROWSER_NAVIGATION);
          }
  

+ 3 - 3
build/patches/Override-UA-client-hint-for-model.patch

@@ -29,15 +29,15 @@ diff --git a/content/common/user_agent.cc b/content/common/user_agent.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
-@@ -306,7 +306,7 @@ const base::Feature kExtraSafelistedRequestHeadersForOutOfBlinkCors{
+@@ -326,7 +326,7 @@ const base::Feature kExtraSafelistedRequestHeadersForOutOfBlinkCors{
  
  // Controls whether Client Hints are guarded by Permissions Policy.
  const base::Feature kFeaturePolicyForClientHints{
 -    "FeaturePolicyForClientHints", base::FEATURE_ENABLED_BY_DEFAULT};
 +    "FeaturePolicyForClientHints", base::FEATURE_DISABLED_BY_DEFAULT};
  
- // Enables the AccessHandle surface for File System Access API's Origin Private
- // File System. Tracking bug: https://crbug.com/1218431.
+ // Enables fixes for matching src: local() for web fonts correctly against full
+ // font name or postscript name. Rolling out behind a flag, as enabling this
 -- 
 2.17.1
 

+ 6 - 6
build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch

@@ -27,7 +27,7 @@ diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/net/dns/dns_transaction.cc
-@@ -413,7 +413,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
+@@ -434,7 +434,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
      // Disable secure DNS for any DoH server hostname lookups to avoid deadlock.
      request_->SetSecureDnsPolicy(SecureDnsPolicy::kDisable);
      request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE |
@@ -39,7 +39,7 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 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
-@@ -299,6 +299,7 @@ void URLRequestHttpJob::Start() {
+@@ -300,6 +300,7 @@ void URLRequestHttpJob::Start() {
    // plugin could set a referrer although sending the referrer is inhibited.
    request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
  
@@ -47,7 +47,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
    // Our consumer should have made sure that this is a safe referrer (e.g. via
    // URLRequestJob::ComputeReferrerForPolicy).
    if (referrer.is_valid()) {
-@@ -306,11 +307,14 @@ void URLRequestHttpJob::Start() {
+@@ -307,11 +308,14 @@ void URLRequestHttpJob::Start() {
      request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
                                            referer_value);
    }
@@ -62,7 +62,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
  
    AddExtraHeaders();
    AddCookieHeaderAndStart();
-@@ -525,6 +529,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -526,6 +530,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
        if (request_->Supports(SourceStream::SourceType::TYPE_DEFLATE)) {
          advertised_encoding_names.push_back("deflate");
        }
@@ -70,7 +70,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
        // Advertise "br" encoding only if transferred data is opaque to proxy.
        if (request()->context()->enable_brotli() &&
            request_->Supports(SourceStream::SourceType::TYPE_BROTLI)) {
-@@ -533,6 +538,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -534,6 +539,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
            advertised_encoding_names.push_back("br");
          }
        }
@@ -78,7 +78,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
        if (!advertised_encoding_names.empty()) {
          // Tell the server what compression formats are supported.
          request_info_.extra_headers.SetHeader(
-@@ -542,7 +548,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -543,7 +549,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
      }
    }
  

+ 60 - 11
build/patches/Remove-SMS-integration.patch

@@ -3,12 +3,61 @@ Date: Sun, 3 Nov 2019 08:22:29 +0100
 Subject: Remove SMS integration
 
 ---
+ .../browser/language/AppLocaleUtils.java      | 38 ---------------
  .../content/browser/sms/SmsProviderGms.java   | 27 ++---------
  .../browser/sms/SmsUserConsentReceiver.java   | 46 ++-----------------
  .../browser/sms/SmsVerificationReceiver.java  | 38 ++++-----------
  .../content/browser/sms/Wrappers.java         | 28 +----------
- 4 files changed, 18 insertions(+), 121 deletions(-)
+ 5 files changed, 18 insertions(+), 159 deletions(-)
 
+diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
+--- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
++++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
+@@ -69,44 +69,6 @@ public class AppLocaleUtils {
+                 ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, SYSTEM_LANGUAGE_VALUE);
+     }
+ 
+-    /**
+-     * Download the language split. If successful set the application language shared preference.
+-     * If set to null the system language will be used.
+-     * @param languageName String BCP-47 code of language to download.
+-     */
+-    public static void setAppLanguagePref(String languageName) {
+-        setAppLanguagePref(languageName, success -> {});
+-    }
+-
+-    /**
+-     * Download the language split using the provided listener for callbacks. If successful set the
+-     * application language shared preference. If called from an APK build where no bundle needs to
+-     * be downloaded the listener's on complete function is immediately called. If languageName is
+-     * null the system language will be used.
+-     * @param languageName String BCP-47 code of language to download.
+-     * @param listener LanguageSplitInstaller.InstallListener to use for callbacks.
+-     */
+-    public static void setAppLanguagePref(
+-            String languageName, LanguageSplitInstaller.InstallListener listener) {
+-        // Wrap the install listener so that on success the app override preference is set.
+-        LanguageSplitInstaller.InstallListener wrappedListener = (success) -> {
+-            if (success) {
+-                SharedPreferencesManager.getInstance().writeString(
+-                        ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, languageName);
+-            }
+-            listener.onComplete(success);
+-        };
+-
+-        // If this is not a bundle build or the default system language is being used the language
+-        // split should not be installed. Instead indicate that the listener completed successfully
+-        // since the language resources will already be present.
+-        if (!BundleUtils.isBundle() || isDefaultSystemLanguage(languageName)) {
+-            wrappedListener.onComplete(true);
+-        } else {
+-            LanguageSplitInstaller.getInstance().installLanguage(languageName, wrappedListener);
+-        }
+-    }
+-
+     /**
+      * Return true if the base language of |languageCode| has multiple UI language variants (e.g.
+      * pt-BR and pt-PT).
 diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java
 --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java
 +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java
@@ -183,8 +232,8 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
 -
  import org.chromium.base.Log;
  import org.chromium.base.metrics.RecordHistogram;
- import org.chromium.ui.base.WindowAndroid;
-@@ -61,27 +51,18 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+ import org.chromium.content.browser.sms.Wrappers.WebOTPServiceContext;
+@@ -62,27 +52,18 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
          // lightweight (e.g. it responds quickly without much computation). If this broadcast
          // receiver becomes more heavyweight, we should make this registration expire after the SMS
          // message is received.
@@ -215,7 +264,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
  
          if (mDestroyed) {
              return;
-@@ -114,7 +95,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -115,7 +96,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
                  if (DEBUG) Log.d(TAG, "Timeout");
                  mProvider.onTimeout();
                  break;
@@ -223,17 +272,17 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
 +        }*/
      }
  
-     public void onPermissionDone(WindowAndroid window, int resultCode, boolean isLocalRequest) {
-@@ -134,7 +115,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+     public void onPermissionDone(int resultCode, boolean isLocalRequest) {
+@@ -135,7 +116,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
       * task.
       */
-     public void onRetrieverTaskFailure(WindowAndroid window, boolean isLocalRequest, Exception e) {
+     public void onRetrieverTaskFailure(boolean isLocalRequest, Exception e) {
 -        if (DEBUG) Log.d(TAG, "Task failed. Attempting recovery.", e);
-+        /*if (DEBUG) Log.d(TAG, "Task failed. Attempting recovery.", e);
++        /* if (DEBUG) Log.d(TAG, "Task failed. Attempting recovery.", e);
          ApiException exception = (ApiException) e;
          if (exception.getStatusCode() == SmsRetrieverStatusCodes.API_NOT_CONNECTED) {
              reportBackendAvailability(BackendAvailability.API_NOT_CONNECTED);
-@@ -175,12 +156,12 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -177,12 +158,12 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
                  }
              }
          } else {
@@ -243,13 +292,13 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
 +        } */
      }
  
-     public void listen(WindowAndroid window, boolean isLocalRequest) {
+     public void listen(boolean isLocalRequest) {
 -        Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient();
 +        /* Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient();
          Task<Void> task = client.startSmsCodeBrowserRetriever();
  
          task.addOnSuccessListener(unused -> {
-@@ -192,7 +173,8 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -194,7 +175,8 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
              mProvider.verificationReceiverFailed(isLocalRequest);
          });
  

+ 40 - 95
build/patches/Remove-binary-blob-integrations.patch

@@ -41,7 +41,6 @@ Parts of this patch were developed by csagan5, uazo and others.
  chrome/browser/BUILD.gn                       |   2 -
  chrome/browser/language/android/BUILD.gn      |   2 -
  .../language/AppLanguagePromoDialog.java      |  13 -
- .../browser/language/AppLocaleUtils.java      |  38 --
  .../AppLanguagePreferenceDelegate.java        |   8 -
  .../language/settings/LanguageSettings.java   |   6 -
  .../prefetch/prefetch_service_factory.cc      |  16 -
@@ -94,11 +93,10 @@ Parts of this patch were developed by csagan5, uazo and others.
  services/BUILD.gn                             |   9 -
  services/device/geolocation/BUILD.gn          |   3 -
  services/shape_detection/BUILD.gn             |   4 -
- third_party/android_deps/BUILD.gn             | 533 +-----------------
+ third_party/android_deps/BUILD.gn             | 540 +-----------------
  .../preconditions/javatests/BUILD.gn          |   1 -
  .../gms/ChromiumPlayServicesAvailability.java |  10 +-
- third_party/google_android_play_core/BUILD.gn |   5 -
- 77 files changed, 67 insertions(+), 2635 deletions(-)
+ 75 files changed, 67 insertions(+), 2599 deletions(-)
  delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
  delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
 
@@ -127,7 +125,7 @@ diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -303,20 +303,10 @@ android_library("chrome_java") {
+@@ -304,20 +304,10 @@ android_library("chrome_java") {
      ":chrome_public_apk_template_resources",
      ":update_proto_java",
      ":usage_stats_proto_java",
@@ -148,7 +146,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//chrome/android/modules/image_editor/provider:java",
      "//chrome/android/modules/stack_unwinder/provider:java",
      "//chrome/android/webapk/libs/client:client_java",
-@@ -559,7 +549,6 @@ android_library("chrome_java") {
+@@ -564,7 +554,6 @@ android_library("chrome_java") {
      "//third_party/android_data_chart:android_data_chart_java",
      "//third_party/android_deps:android_support_v7_appcompat_java",
      "//third_party/android_deps:chromium_play_services_availability_java",
@@ -156,7 +154,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
      "//third_party/android_deps:com_google_guava_listenablefuture_java",
      "//third_party/android_deps:dagger_java",
-@@ -883,11 +872,6 @@ junit_binary("chrome_junit_tests") {
+@@ -890,11 +879,6 @@ junit_binary("chrome_junit_tests") {
      ":chrome_java",
      ":chrome_public_android_manifest",
      ":delegate_public_impl_java",
@@ -168,7 +166,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:base_junit_test_support",
-@@ -1194,14 +1178,6 @@ android_library("chrome_test_java") {
+@@ -1252,14 +1236,6 @@ android_library("chrome_test_java") {
      ":chrome_test_util_java",
      ":chrome_test_util_jni",
      ":delegate_public_impl_java",
@@ -183,7 +181,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:base_java_test_support",
      "//base/test:test_support_java",
-@@ -2238,7 +2214,6 @@ android_library("browser_java_test_support") {
+@@ -2299,7 +2275,6 @@ android_library("browser_java_test_support") {
    ]
    deps = [
      ":chrome_java",
@@ -191,7 +189,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:jni_java",
-@@ -2383,8 +2358,6 @@ android_library("base_monochrome_module_java") {
+@@ -2444,8 +2419,6 @@ android_library("base_monochrome_module_java") {
  android_library("base_module_java") {
    sources = [
      "../browser/attribution_reporting/android/java/src/org/chromium/chrome/browser/attribution_reporting/AttributionReportingProvider.java",
@@ -200,7 +198,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "java/src/org/chromium/chrome/browser/ChromeBackupAgent.java",
      "java/src/org/chromium/chrome/browser/DeferredStartupHandler.java",
      "java/src/org/chromium/chrome/browser/base/DexFixer.java",
-@@ -2395,8 +2368,6 @@ android_library("base_module_java") {
+@@ -2456,8 +2429,6 @@ android_library("base_module_java") {
      "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java",
      "java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java",
      "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java",
@@ -209,7 +207,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java",
      "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java",
      "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java",
-@@ -2423,16 +2394,10 @@ android_library("base_module_java") {
+@@ -2484,16 +2455,10 @@ android_library("base_module_java") {
      "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java",
      "java/src/org/chromium/chrome/browser/prerender/ChromePrerenderService.java",
      "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java",
@@ -226,7 +224,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//chrome/browser/download/android:file_provider_java",
      "//chrome/browser/flags:java",
-@@ -2445,7 +2410,6 @@ android_library("base_module_java") {
+@@ -2506,7 +2471,6 @@ android_library("base_module_java") {
      "//components/media_router/browser/android:cast_options_provider_java",
      "//components/minidump_uploader:minidump_uploader_java",
      "//components/module_installer/android:module_installer_java",
@@ -234,7 +232,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//third_party/androidx:androidx_annotation_annotation_java",
      "//third_party/androidx:androidx_collection_collection_java",
      "//third_party/androidx:androidx_fragment_fragment_java",
-@@ -2467,7 +2431,6 @@ android_library("base_module_java") {
+@@ -2528,7 +2492,6 @@ android_library("base_module_java") {
      # Deps to pull services into base module.
      # TODO(crbug.com/1126301): Consider moving these to the chrome module to
      # reduce base dex size.
@@ -253,8 +251,8 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java",
    "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java",
    "java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java",
-@@ -1030,10 +1029,6 @@ chrome_java_sources = [
-   "java/src/org/chromium/chrome/browser/searchwidget/SearchBoxDataProvider.java",
+@@ -1029,10 +1028,6 @@ chrome_java_sources = [
+   "java/src/org/chromium/chrome/browser/searchwidget/SearchType.java",
    "java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java",
    "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerServiceImpl.java",
@@ -322,7 +320,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <activity
              android:name="org.chromium.chrome.browser.vr.VrCancelAnimationActivity"
              android:exported="false"
-@@ -1018,26 +994,6 @@ by a child template that "extends" this file.
+@@ -1002,26 +978,6 @@ by a child template that "extends" this file.
              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
              android:hardwareAccelerated="false" />
  
@@ -349,7 +347,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <!-- Android Notification service listener -->
          <service android:name="org.chromium.chrome.browser.notifications.NotificationService"
              android:exported="false"/>
-@@ -1061,28 +1017,10 @@ by a child template that "extends" this file.
+@@ -1045,28 +1001,10 @@ by a child template that "extends" this file.
              android:exported="false"
              android:permission="android.permission.BIND_JOB_SERVICE"/>
  
@@ -378,7 +376,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <service android:name="org.chromium.chrome.browser.prerender.ChromePrerenderService"
              android:exported="true"
              tools:ignore="ExportedService" />
-@@ -1283,12 +1221,6 @@ by a child template that "extends" this file.
+@@ -1276,12 +1214,6 @@ by a child template that "extends" this file.
        <meta-data android:name="com.google.ar.core" android:value="optional" />
        {% endif %}
  
@@ -404,7 +402,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b
  import org.chromium.base.ContextUtils;
  import org.chromium.base.annotations.CalledByNative;
  import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
-@@ -272,16 +269,7 @@ public abstract class AppHooks {
+@@ -275,16 +272,7 @@ public abstract class AppHooks {
       * same as {@link GoogleApiAvailability#isGooglePlayServicesAvailable()}.
       */
      public int isGoogleApiAvailableWithMinApkVersion(int minApkVersion) {
@@ -1338,7 +1336,7 @@ diff --git a/chrome/android/modules/chrome_feature_modules.gni b/chrome/android/
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -6295,8 +6295,6 @@ static_library("browser") {
+@@ -6399,8 +6399,6 @@ static_library("browser") {
        "offline_pages/offliner_helper.h",
        "offline_pages/offliner_user_data.cc",
        "offline_pages/offliner_user_data.h",
@@ -1367,7 +1365,7 @@ diff --git a/chrome/browser/language/android/BUILD.gn b/chrome/browser/language/
 diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java
 --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java
 +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLanguagePromoDialog.java
-@@ -378,19 +378,6 @@ public class AppLanguagePromoDialog {
+@@ -458,19 +458,6 @@ public class AppLanguagePromoDialog {
          }
          AndroidLanguageMetricsBridge.reportAppLanguagePromptLanguage(
                  selectedLanguage.isSystemDefault() ? "" : selectedLanguage.getCode());
@@ -1387,54 +1385,6 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse
      }
  
      /**
-diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
---- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
-+++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
-@@ -59,44 +59,6 @@ public class AppLocaleUtils {
-                 ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, SYSTEM_LANGUAGE_VALUE);
-     }
- 
--    /**
--     * Download the language split. If successful set the application language shared preference.
--     * If set to null the system language will be used.
--     * @param languageName String BCP-47 code of language to download.
--     */
--    public static void setAppLanguagePref(String languageName) {
--        setAppLanguagePref(languageName, success -> {});
--    }
--
--    /**
--     * Download the language split using the provided listener for callbacks. If successful set the
--     * application language shared preference. If called from an APK build where no bundle needs to
--     * be downloaded the listener's on complete function is immediately called. If languageName is
--     * null the system language will be used.
--     * @param languageName String BCP-47 code of language to download.
--     * @param listener LanguageSplitInstaller.InstallListener to use for callbacks.
--     */
--    public static void setAppLanguagePref(
--            String languageName, LanguageSplitInstaller.InstallListener listener) {
--        // Wrap the install listener so that on success the app override preference is set.
--        LanguageSplitInstaller.InstallListener wrappedListener = (success) -> {
--            if (success) {
--                SharedPreferencesManager.getInstance().writeString(
--                        ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, languageName);
--            }
--            listener.onComplete(success);
--        };
--
--        // If this is not a bundle build or the default system language is being used the language
--        // split should not be installed. Instead indicate that the listener completed successfully
--        // since the language resources will already be present.
--        if (!BundleUtils.isBundle() || TextUtils.equals(languageName, SYSTEM_LANGUAGE_VALUE)) {
--            wrappedListener.onComplete(true);
--        } else {
--            LanguageSplitInstaller.getInstance().installLanguage(languageName, wrappedListener);
--        }
--    }
--
-     /**
-      * Return true if the locale is an exact match for an available UI language.
-      * Note: "en" and "en-AU" will return false since the available locales are "en-GB" and "en-US".
 diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
 --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
 +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
@@ -1558,7 +1508,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
  #include "chrome/browser/ui/webui/image_editor/image_editor_ui.h"
  #include "chrome/browser/ui/webui/internals/internals_ui.h"
  #include "chrome/browser/ui/webui/interstitials/interstitial_ui.h"
-@@ -604,8 +603,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -623,8 +622,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<FlagsUI>;
    if (url.host_piece() == chrome::kChromeUIFlocInternalsHost)
      return &NewWebUI<FlocInternalsUI>;
@@ -1570,7 +1520,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
 diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn
 --- a/chrome/test/android/BUILD.gn
 +++ b/chrome/test/android/BUILD.gn
-@@ -260,8 +260,6 @@ android_library("chrome_java_test_support") {
+@@ -267,8 +267,6 @@ android_library("chrome_java_test_support") {
    ]
  
    deps = [
@@ -3974,7 +3924,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut
 diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/browser/push_messaging/push_messaging_manager.cc
 --- a/content/browser/push_messaging/push_messaging_manager.cc
 +++ b/content/browser/push_messaging/push_messaging_manager.cc
-@@ -958,11 +958,7 @@ void PushMessagingManager::Core::GetSubscriptionInfoOnUI(
+@@ -956,11 +956,7 @@ void PushMessagingManager::Core::GetSubscriptionInfoOnUI(
  
  PushMessagingService* PushMessagingManager::Core::service() {
    DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -4004,19 +3954,19 @@ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
 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
-@@ -922,7 +922,7 @@ const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler",
+@@ -957,7 +957,7 @@ const base::Feature kWebAssemblyTrapHandler {
  // Controls whether the WebAuthentication API is enabled:
  // https://w3c.github.io/webauthn
  const base::Feature kWebAuth{"WebAuthentication",
 -                             base::FEATURE_ENABLED_BY_DEFAULT};
 +                             base::FEATURE_DISABLED_BY_DEFAULT};
  
- // Controls whether CTAP2 devices can communicate via the WebAuthentication API
- // using pairingless BLE protocol.
+ // Controls whether WebAuthn assertion transport is enabled.
+ const base::Feature kWebAuthAssertionTransport{
 diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 --- a/content/test/BUILD.gn
 +++ b/content/test/BUILD.gn
-@@ -2849,10 +2849,6 @@ if (is_android) {
+@@ -2865,10 +2865,6 @@ if (is_android) {
      testonly = true
      sources = content_java_sources_needing_jni
      deps = [
@@ -4030,7 +3980,7 @@ diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 diff --git a/device/BUILD.gn b/device/BUILD.gn
 --- a/device/BUILD.gn
 +++ b/device/BUILD.gn
-@@ -437,9 +437,6 @@ if (is_android) {
+@@ -446,9 +446,6 @@ if (is_android) {
        "gamepad/android/junit/src/org/chromium/device/gamepad/GamepadMappingsTest.java",
      ]
      deps = [
@@ -4082,7 +4032,7 @@ diff --git a/services/BUILD.gn b/services/BUILD.gn
 diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn
 --- a/services/device/geolocation/BUILD.gn
 +++ b/services/device/geolocation/BUILD.gn
-@@ -154,9 +154,6 @@ if (is_android) {
+@@ -163,9 +163,6 @@ if (is_android) {
  
      deps = [
        ":geolocation_jni_headers",
@@ -4337,10 +4287,17 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
    # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
    android_aar_prebuilt("com_google_android_material_material_java") {
      aar_path =
-@@ -1271,53 +1066,6 @@ if (!limit_android_deps) {
-         "libs/com_google_android_play_core/com_google_android_play_core.info"
+@@ -1264,60 +1059,6 @@ if (!limit_android_deps) {
+     ignore_proguard_configs = true
    }
  
+-  # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+-  android_aar_prebuilt("com_google_android_play_core_java") {
+-    aar_path = "libs/com_google_android_play_core/core-1.10.0.aar"
+-    info_path =
+-        "libs/com_google_android_play_core/com_google_android_play_core.info"
+-  }
+-
 -  # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 -  android_aar_prebuilt("google_firebase_firebase_iid_java") {
 -    aar_path = "libs/com_google_firebase_firebase_iid/firebase-iid-21.0.1.aar"
@@ -4391,7 +4348,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
    # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
    java_prebuilt("com_google_guava_guava_android_java") {
      jar_path = "libs/com_google_guava_guava_android/guava-30.1-android.jar"
-@@ -1454,19 +1202,6 @@ if (!limit_android_deps) {
+@@ -1454,19 +1195,6 @@ if (!limit_android_deps) {
      bypass_platform_checks = true
    }
  
@@ -4411,7 +4368,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
    # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
    java_prebuilt("org_robolectric_utils_java") {
      jar_path = "libs/org_robolectric_utils/utils-4.3.1.jar"
-@@ -1843,272 +1578,6 @@ if (!limit_android_deps) {
+@@ -1843,272 +1571,6 @@ if (!limit_android_deps) {
      deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
    }
  
@@ -4728,18 +4685,6 @@ diff --git a/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServices
 +        return 16; // API_UNAVAILABLE
      }
  }
-diff --git a/third_party/google_android_play_core/BUILD.gn b/third_party/google_android_play_core/BUILD.gn
---- a/third_party/google_android_play_core/BUILD.gn
-+++ b/third_party/google_android_play_core/BUILD.gn
-@@ -3,8 +3,3 @@
- # found in the LICENSE file.
- 
- import("//build/config/android/rules.gni")
--
--android_aar_prebuilt("com_google_android_play_core_java") {
--  aar_path = "core-1.6.4.aar"
--  info_path = "com_google_android_play_core.info"
--}
 -- 
 2.17.1
 

+ 6 - 6
build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch

@@ -9,16 +9,16 @@ Subject: Remove blocklisted URLs upon bookmark creation
 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
-@@ -138,6 +138,8 @@ import org.chromium.chrome.browser.metrics.LaunchMetrics;
- import org.chromium.chrome.browser.metrics.UmaSessionStats;
+@@ -139,6 +139,8 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats;
  import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
+ import org.chromium.chrome.browser.night_mode.SystemNightModeMonitor;
  import org.chromium.chrome.browser.ntp.NewTabPageUma;
 +import org.chromium.chrome.browser.suggestions.SuggestionsDependencyFactory;
 +import org.chromium.chrome.browser.suggestions.mostvisited.MostVisitedSites;
  import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
  import org.chromium.chrome.browser.offlinepages.indicator.OfflineIndicatorController;
  import org.chromium.chrome.browser.omaha.UpdateInfoBarController;
-@@ -238,6 +240,8 @@ import org.chromium.ui.widget.Toast;
+@@ -241,6 +243,8 @@ import org.chromium.ui.widget.Toast;
  import org.chromium.url.GURL;
  import org.chromium.webapk.lib.client.WebApkNavigationClient;
  
@@ -27,7 +27,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import java.util.ArrayList;
  import java.util.List;
  import java.util.function.Consumer;
-@@ -287,6 +291,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -290,6 +294,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
      private UmaSessionStats mUmaSessionStats;
      private ContextReporter mContextReporter;
@@ -35,7 +35,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  
      private boolean mPartnerBrowserRefreshNeeded;
  
-@@ -1439,6 +1444,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1451,6 +1456,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              mCompositorViewHolderSupplier.set(null);
          }
  
@@ -47,7 +47,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
          onDestroyInternal();
  
          if (mDidAddPolicyChangeListener) {
-@@ -1749,6 +1759,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1761,6 +1771,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          // Defense in depth against the UI being erroneously enabled.
          BookmarkBridge bridge = mBookmarkBridgeSupplier.get();

+ 1 - 1
build/patches/Remove-help-menu-item.patch

@@ -39,7 +39,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcu
 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
-@@ -2316,16 +2316,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2322,16 +2322,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  

+ 1 - 1
build/patches/Remove-offline-measurement-background-task.patch

@@ -17,7 +17,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni
  import org.chromium.chrome.browser.omnibox.voice.AssistantVoiceSearchService;
  import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactory;
  import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
-@@ -416,8 +415,6 @@ public class ProcessInitializationHandler {
+@@ -408,8 +407,6 @@ public class ProcessInitializationHandler {
                  () -> VideoTutorialShareHelper.saveUrlsToSharedPrefs());
          deferredStartupHandler.addDeferredTask(
                  () -> TosDialogBehaviorSharedPrefInvalidator.refreshSharedPreferenceIfTosSkipped());

+ 131 - 146
build/patches/Remove-signin-and-data-saver-integrations.patch

@@ -23,7 +23,7 @@ ld.lld: error: undefined symbol: notifier::NotifierOptions::NotifierOptions()
  chrome/android/chrome_java_sources.gni        |  38 -----
  .../PriceTrackingUtilities.java               |   5 +-
  .../browser/feed/FeedSurfaceCoordinator.java  |   5 +-
- .../browser/feed/FeedSurfaceMediator.java     |  88 +---------
+ .../browser/feed/FeedSurfaceMediator.java     |  99 +----------
  chrome/android/java/AndroidManifest.xml       |   8 -
  .../android/java/res/xml/main_preferences.xml |  27 +--
  .../java/res/xml/privacy_preferences.xml      |   4 -
@@ -37,7 +37,7 @@ ld.lld: error: undefined symbol: notifier::NotifierOptions::NotifierOptions()
  .../contextualsearch/ContextualSearchUma.java |   5 -
  .../browser/customtabs/CustomTabActivity.java |   3 -
  .../DataReductionPreferenceFragment.java      |  24 +--
- .../browser/firstrun/FirstRunActivity.java    |  30 ----
+ .../browser/firstrun/FirstRunActivity.java    |  40 -----
  .../firstrun/FirstRunFlowSequencer.java       |  31 +---
  .../firstrun/LightweightFirstRunActivity.java |   6 +-
  .../firstrun/ToSAndUMAFirstRunFragment.java   |  11 --
@@ -56,7 +56,6 @@ ld.lld: error: undefined symbol: notifier::NotifierOptions::NotifierOptions()
  .../browser/share/ShareDelegateImpl.java      |   3 +-
  .../share/ShareRegistrationCoordinator.java   |   3 +-
  .../SharedClipboardShareActivity.java         |   3 -
- .../browser/signin/SigninCheckerProvider.java |  38 -----
  .../tabbed_mode/TabbedRootUiCoordinator.java  |  22 +--
  .../tasks/ReturnToChromeExperimentsUtil.java  |   9 +-
  chrome/browser/BUILD.gn                       |  10 --
@@ -66,19 +65,18 @@ ld.lld: error: undefined symbol: notifier::NotifierOptions::NotifierOptions()
  .../ui/ConfirmSyncDataStateMachine.java       |  16 +-
  .../signin/ui/SignOutDialogFragment.java      |  13 --
  .../signin/ui/SigninPromoController.java      |  15 +-
- .../AccountPickerDelegateImpl.java            |  17 --
+ .../AccountPickerDelegateImpl.java            |  18 --
  chrome/browser/sync/sync_service_factory.cc   |  12 +-
  .../strings/android_chrome_strings.grd        |  12 --
  .../signin/SystemAccountManagerDelegate.java  |  35 +---
  .../net/HttpNegotiateAuthenticator.java       |  88 +---------
  .../chromoting/base/OAuthTokenFetcher.java    |   2 -
- 53 files changed, 48 insertions(+), 1195 deletions(-)
- delete mode 100644 chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
+ 52 files changed, 48 insertions(+), 1179 deletions(-)
 
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -3700,7 +3700,6 @@ generate_jni("chrome_jni_headers") {
+@@ -3794,7 +3794,6 @@ generate_jni("chrome_jni_headers") {
      "java/src/org/chromium/chrome/browser/infobar/SavePasswordInfoBar.java",
      "java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java",
      "java/src/org/chromium/chrome/browser/infobar/SurveyInfoBar.java",
@@ -89,7 +87,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/chrome/android/chrome_java_sources.gni
-@@ -604,15 +604,12 @@ chrome_java_sources = [
+@@ -606,15 +606,12 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/firstrun/FirstRunPage.java",
    "java/src/org/chromium/chrome/browser/firstrun/FirstRunPageDelegate.java",
    "java/src/org/chromium/chrome/browser/firstrun/FirstRunPagerAdapter.java",
@@ -105,7 +103,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/firstrun/TabbedModeFirstRunActivity.java",
    "java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java",
    "java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java",
-@@ -709,7 +706,6 @@ chrome_java_sources = [
+@@ -708,7 +705,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/infobar/SubPanelListener.java",
    "java/src/org/chromium/chrome/browser/infobar/SurveyInfoBar.java",
    "java/src/org/chromium/chrome/browser/infobar/SurveyInfoBarDelegate.java",
@@ -113,7 +111,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/infobar/TextViewEllipsizerSafe.java",
    "java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java",
    "java/src/org/chromium/chrome/browser/infobar/UpdatePasswordInfoBar.java",
-@@ -826,7 +822,6 @@ chrome_java_sources = [
+@@ -825,7 +821,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/ntp/ScrollableContainerDelegate.java",
    "java/src/org/chromium/chrome/browser/ntp/SnapScrollHelper.java",
    "java/src/org/chromium/chrome/browser/ntp/TitleUtil.java",
@@ -121,7 +119,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/ntp/cards/promo/enhanced_protection/EnhancedProtectionPromoController.java",
    "java/src/org/chromium/chrome/browser/ntp/cards/promo/enhanced_protection/EnhancedProtectionPromoUtils.java",
    "java/src/org/chromium/chrome/browser/ntp/search/SearchBoxChipDelegate.java",
-@@ -913,8 +908,6 @@ chrome_java_sources = [
+@@ -912,8 +907,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksShim.java",
    "java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java",
    "java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java",
@@ -130,7 +128,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/password_manager/Credential.java",
    "java/src/org/chromium/chrome/browser/password_manager/CredentialLeakDialogBridge.java",
    "java/src/org/chromium/chrome/browser/password_manager/GooglePasswordManagerUIProvider.java",
-@@ -1061,16 +1054,6 @@ chrome_java_sources = [
+@@ -1060,16 +1053,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardMetrics.java",
    "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardShareActivity.java",
    "java/src/org/chromium/chrome/browser/sharing/sms_fetcher/SmsFetcherMessageHandler.java",
@@ -147,7 +145,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java",
    "java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java",
    "java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java",
-@@ -1107,27 +1090,6 @@ chrome_java_sources = [
+@@ -1106,27 +1089,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java",
    "java/src/org/chromium/chrome/browser/survey/SurveyController.java",
    "java/src/org/chromium/chrome/browser/survey/SurveyHttpClientBridge.java",
@@ -200,7 +198,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
 diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
 +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
-@@ -898,10 +898,7 @@ public class FeedSurfaceCoordinator
+@@ -938,10 +938,7 @@ public class FeedSurfaceCoordinator implements FeedSurfaceProvider, FeedBubbleDe
  
      @Override
      public boolean isSignedIn() {
@@ -234,7 +232,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
  import org.chromium.chrome.browser.suggestions.SuggestionsMetrics;
  import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger;
  import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
-@@ -173,7 +168,6 @@ public class FeedSurfaceMediator
+@@ -179,7 +174,6 @@ public class FeedSurfaceMediator
      /**
       * The {@link SignInPromo} for the Feed.
       * TODO(huayinz): Update content and visibility through a ModelChangeProcessor.
@@ -242,7 +240,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
      private class FeedSignInPromo extends SignInPromo {
          FeedSignInPromo(SigninManager signinManager) {
              super(signinManager);
-@@ -194,7 +188,7 @@ public class FeedSurfaceMediator
+@@ -200,7 +194,7 @@ public class FeedSurfaceMediator
              maybeUpdateSignInPromo();
          }
  
@@ -251,16 +249,16 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
          private void maybeUpdateSignInPromo() {
              // Only call #setupPromoViewFromCache() if SignInPromo is visible to avoid potentially
              // blocking the UI thread for several seconds if the accounts cache is not populated
-@@ -206,7 +200,7 @@ public class FeedSurfaceMediator
-                         null);
-             }
+@@ -222,7 +216,7 @@ public class FeedSurfaceMediator
+             super.onDismissPromo();
+             mCoordinator.updateHeaderViews(false, null);
          }
 -    }
 +    } */
  
      @VisibleForTesting
      static void setPrefForTest(PrefChangeRegistrar prefChangeRegistrar, PrefService prefService) {
-@@ -221,7 +215,6 @@ public class FeedSurfaceMediator
+@@ -237,7 +231,6 @@ public class FeedSurfaceMediator
      private final Context mContext;
      private final @Nullable SnapScrollHelper mSnapScrollHelper;
      private final PrefChangeRegistrar mPrefChangeRegistrar;
@@ -268,7 +266,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
      private final PropertyModel mSectionHeaderModel;
  
      private final NativePageNavigationDelegate mPageNavigationDelegate;
-@@ -230,7 +223,6 @@ public class FeedSurfaceMediator
+@@ -246,7 +239,6 @@ public class FeedSurfaceMediator
      private final ObserverList<ScrollListener> mScrollListeners = new ObserverList<>();
      private ContentChangedListener mStreamContentChangedListener;
      private MemoryPressureCallback mMemoryPressureCallback;
@@ -276,7 +274,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
      private RecyclerViewAnimationFinishDetector mRecyclerViewAnimationFinishDetector =
              new RecyclerViewAnimationFinishDetector();
      private @Nullable View mEnhancedProtectionPromo;
-@@ -279,8 +271,6 @@ public class FeedSurfaceMediator
+@@ -295,8 +287,6 @@ public class FeedSurfaceMediator
          mCoordinator = coordinator;
          mContext = context;
          mSnapScrollHelper = snapScrollHelper;
@@ -285,15 +283,15 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
          mPageNavigationDelegate = pageNavigationDelegate;
  
          if (sTestPrefChangeRegistar != null) {
-@@ -435,7 +425,6 @@ public class FeedSurfaceMediator
+@@ -454,7 +444,6 @@ public class FeedSurfaceMediator
              mFeedMenuModel = buildMenuItems();
  
-             mCoordinator.initializeIph();
+             mCoordinator.initializeBubbleTriggering();
 -            mSigninManager.getIdentityManager().addObserver(this);
  
              mSectionHeaderModel.set(
                      SectionHeaderListProperties.MENU_MODEL_LIST_KEY, mFeedMenuModel);
-@@ -487,8 +476,6 @@ public class FeedSurfaceMediator
+@@ -506,8 +495,6 @@ public class FeedSurfaceMediator
          };
          mCoordinator.getRecyclerView().addOnScrollListener(mStreamScrollListener);
  
@@ -302,7 +300,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
          mMemoryPressureCallback =
                  pressure -> mCoordinator.getRecyclerView().getRecycledViewPool().clear();
          MemoryPressureListener.addCallback(mMemoryPressureCallback);
-@@ -644,46 +631,6 @@ public class FeedSurfaceMediator
+@@ -663,47 +650,6 @@ public class FeedSurfaceMediator
          }
      }
  
@@ -321,6 +319,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
 -     * @return Whether the SignPromo should be visible.
 -     */
 -    private boolean createSignInPromoIfNeeded() {
+-        SigninPromoController.resetNTPSyncPromoLimitsIfHiddenForTooLong();
 -        if (!SignInPromo.shouldCreatePromo()
 -                || !SigninPromoController.canShowSyncPromo(
 -                        SigninAccessPoint.NTP_CONTENT_SUGGESTIONS)) {
@@ -349,7 +348,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
      private void updatePromoCardPadding(View promoCard) {
          MarginLayoutParams layoutParams = promoCard.getLayoutParams() == null
                  ? new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
-@@ -706,11 +653,6 @@ public class FeedSurfaceMediator
+@@ -726,11 +672,6 @@ public class FeedSurfaceMediator
          MemoryPressureListener.removeCallback(mMemoryPressureCallback);
          mMemoryPressureCallback = null;
  
@@ -361,7 +360,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
          unbindStream();
          for (Stream s : mTabToStreamMap.values()) {
              s.removeOnContentChangedListener(mStreamContentChangedListener);
-@@ -721,7 +663,6 @@ public class FeedSurfaceMediator
+@@ -741,7 +682,6 @@ public class FeedSurfaceMediator
  
          mPrefChangeRegistrar.removeObserver(Pref.ARTICLES_LIST_VISIBLE);
          TemplateUrlServiceFactory.get().removeObserver(this);
@@ -369,7 +368,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
  
          PropertyListModel<PropertyModel, PropertyKey> headerList =
                  mSectionHeaderModel.get(SectionHeaderListProperties.SECTION_HEADERS_KEY);
-@@ -789,9 +730,6 @@ public class FeedSurfaceMediator
+@@ -820,9 +760,6 @@ public class FeedSurfaceMediator
          // Update toggleswitch item, which is last item in list.
          mSectionHeaderModel.set(SectionHeaderListProperties.MENU_MODEL_LIST_KEY, buildMenuItems());
  
@@ -379,7 +378,7 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
          if (mEnhancedProtectionPromo != null) {
              updatePromoCardPadding(mEnhancedProtectionPromo);
          }
-@@ -807,7 +745,7 @@ public class FeedSurfaceMediator
+@@ -838,7 +775,7 @@ public class FeedSurfaceMediator
      }
  
      private boolean isSignedIn() {
@@ -388,12 +387,13 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
      }
  
      /**
-@@ -856,21 +794,6 @@ public class FeedSurfaceMediator
+@@ -886,31 +823,6 @@ public class FeedSurfaceMediator
+ 
      private ModelList buildMenuItems() {
          ModelList itemList = new ModelList();
-         int iconId = 0;
+-        int iconId = 0;
 -        if (isSignedIn()) {
--            if (FeedFeatures.isWebFeedUIEnabled()) {
+-            if (ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_FEED)) {
 -                itemList.add(buildMenuListItem(
 -                        R.string.ntp_manage_feed, R.id.ntp_feed_header_menu_item_manage, iconId));
 -            } else {
@@ -407,10 +407,19 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/
 -                        R.id.ntp_feed_header_menu_item_reactions, iconId));
 -            }
 -        }
-         if (FeedServiceBridge.isAutoplayEnabled()) {
-             itemList.add(buildMenuListItem(
-                     R.string.ntp_manage_autoplay, R.id.ntp_feed_header_menu_item_autoplay, iconId));
-@@ -1081,11 +1004,6 @@ public class FeedSurfaceMediator
+-        if (FeedServiceBridge.isAutoplayEnabled()) {
+-            itemList.add(buildMenuListItem(
+-                    R.string.ntp_manage_autoplay, R.id.ntp_feed_header_menu_item_autoplay, iconId));
+-        }
+-        itemList.add(buildMenuListItem(
+-                R.string.learn_more, R.id.ntp_feed_header_menu_item_learn, iconId));
+-        itemList.add(getMenuToggleSwitch(
+-                mSectionHeaderModel.get(SectionHeaderListProperties.IS_SECTION_ENABLED_KEY),
+-                iconId));
+         return itemList;
+     }
+ 
+@@ -1112,11 +1024,6 @@ public class FeedSurfaceMediator
          updateSectionHeader();
      }
  
@@ -509,7 +518,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
 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
-@@ -36,8 +36,4 @@
+@@ -40,8 +40,4 @@
          android:key="privacy_sandbox"
          android:title="@string/prefs_privacy_sandbox"
          android:fragment="org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsFragment"/>
@@ -529,7 +538,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.usage_stats.DigitalWellbeingClient;
  import org.chromium.chrome.browser.webapps.GooglePlayWebApkInstallDelegate;
-@@ -285,13 +284,6 @@ public abstract class AppHooks {
+@@ -288,13 +287,6 @@ public abstract class AppHooks {
          return ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED;
      }
  
@@ -554,7 +563,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.flags.ActivityType;
  import org.chromium.chrome.browser.flags.CachedFeatureFlags;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
-@@ -102,7 +101,6 @@ import org.chromium.chrome.browser.incognito.IncognitoTabLauncher;
+@@ -103,7 +102,6 @@ import org.chromium.chrome.browser.incognito.IncognitoTabLauncher;
  import org.chromium.chrome.browser.incognito.IncognitoTabSnapshotController;
  import org.chromium.chrome.browser.incognito.IncognitoUtils;
  import org.chromium.chrome.browser.infobar.DataReductionPromoInfoBar;
@@ -562,7 +571,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.layouts.LayoutStateProvider;
  import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
  import org.chromium.chrome.browser.locale.LocaleManager;
-@@ -641,9 +639,6 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -643,9 +641,6 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
      }
  
      private void refreshSignIn() {
@@ -572,7 +581,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
      }
  
      private void setupCompositorContentPreNativeForPhone() {
-@@ -1796,7 +1791,6 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1806,7 +1801,6 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
                      DataReductionPromoInfoBar.maybeLaunchPromoInfoBar(ChromeTabbedActivity.this,
                              tab.getWebContents(), navigation.getUrl(), tab.isShowingErrorPage(),
                              navigation.isFragmentNavigation(), navigation.httpStatusCode());
@@ -591,7 +600,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.flags.ActivityType;
  import org.chromium.chrome.browser.flags.CachedFeatureFlags;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
-@@ -154,7 +153,6 @@ import org.chromium.chrome.browser.share.ShareDelegate;
+@@ -155,7 +154,6 @@ import org.chromium.chrome.browser.share.ShareDelegate;
  import org.chromium.chrome.browser.share.ShareDelegateImpl;
  import org.chromium.chrome.browser.share.ShareDelegateSupplier;
  import org.chromium.chrome.browser.share.ShareRegistrationCoordinator;
@@ -599,7 +608,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
  import org.chromium.chrome.browser.tab.RequestDesktopUtils;
  import org.chromium.chrome.browser.tab.Tab;
-@@ -211,8 +209,6 @@ import org.chromium.components.page_info.PageInfoController.OpenedFromSource;
+@@ -214,8 +212,6 @@ import org.chromium.components.page_info.PageInfoController.OpenedFromSource;
  import org.chromium.components.policy.CombinedPolicyProvider;
  import org.chromium.components.policy.CombinedPolicyProvider.PolicyChangeListener;
  import org.chromium.components.profile_metrics.BrowserProfileType;
@@ -608,7 +617,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.components.user_prefs.UserPrefs;
  import org.chromium.components.webapk.lib.client.WebApkValidator;
  import org.chromium.components.webapps.AddToHomescreenCoordinator;
-@@ -304,9 +300,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -307,9 +303,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
      private boolean mRemoveWindowBackgroundDone;
      protected AccessibilityVisibilityHandler mAccessibilityVisibilityHandler;
  
@@ -618,7 +627,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
      // The PictureInPictureController is initialized lazily https://crbug.com/729738.
      private PictureInPictureController mPictureInPictureController;
  
-@@ -1062,60 +1055,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1070,60 +1063,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          return StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR;
      }
  
@@ -679,7 +688,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
      @Override
      public void onResumeWithNative() {
          super.onResumeWithNative();
-@@ -1214,14 +1153,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1226,14 +1165,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          if (GSAState.getInstance(this).isGsaAvailable() && !SysUtils.isLowEndDevice()) {
              if (mGSAAccountChangeListener != null) mGSAAccountChangeListener.disconnect();
          }
@@ -694,7 +703,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  
          super.onStopWithNative();
      }
-@@ -1326,11 +1257,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1338,11 +1269,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              FontSizePrefs.getInstance().recordUserFontPrefOnStartup();
          });
  
@@ -706,7 +715,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
          // GSA connection is not needed on low-end devices because Icing is disabled.
          if (!SysUtils.isLowEndDevice()) {
              if (isActivityFinishingOrDestroyed()) return;
-@@ -1345,7 +1271,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1357,7 +1283,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
                              GSAAccountChangeListener.create(AppHooks.get().createGsaHelper());
                  }
                  mGSAAccountChangeListener.connect();
@@ -1157,7 +1166,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearc
  
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
-@@ -850,10 +849,6 @@ public class ContextualSearchUma {
+@@ -882,10 +881,6 @@ public class ContextualSearchUma {
      public static void logTapResultsSeen(boolean wasPanelSeen) {
          RecordHistogram.recordBooleanHistogram(
                  "Search.ContextualSearch.Tap.ResultsSeen", wasPanelSeen);
@@ -1232,7 +1241,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/datareduction/s
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
-@@ -27,12 +27,9 @@ import org.chromium.base.metrics.RecordHistogram;
+@@ -27,14 +27,10 @@ import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.supplier.Supplier;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.customtabs.CustomTabActivity;
@@ -1243,9 +1252,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
  import org.chromium.chrome.browser.metrics.UmaUtils;
 -import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
- import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
+-import org.chromium.chrome.browser.signin.SigninFirstRunFragment;
+ import org.chromium.chrome.browser.signin.services.FREMobileIdentityConsistencyFieldTrial;
  import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
-@@ -103,7 +100,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+ import org.chromium.ui.base.LocalizationUtils;
+@@ -104,7 +100,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
  
      private static final int FRE_PROGRESS_STARTED = 0;
      private static final int FRE_PROGRESS_WELCOME_SHOWN = 1;
@@ -1253,26 +1264,42 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
      private static final int FRE_PROGRESS_SIGNIN_SHOWN = 3;
      private static final int FRE_PROGRESS_COMPLETED_SIGNED_IN = 4;
      private static final int FRE_PROGRESS_COMPLETED_NOT_SIGNED_IN = 5;
-@@ -183,13 +179,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+@@ -155,7 +150,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+     private void createPageSequence() {
+         FREMobileIdentityConsistencyFieldTrial.createFirstRunTrial();
+         if (FREMobileIdentityConsistencyFieldTrial.isEnabled()) {
+-            mPages.add(SigninFirstRunFragment::new);
+         } else {
+             mPages.add(shouldCreateEnterpriseCctTosPage()
+                             ? new TosAndUmaFirstRunFragmentWithEnterpriseSupport.Page()
+@@ -189,20 +183,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
          mFirstRunFlowSequencer.onNativeAndPoliciesInitialized(mFreProperties);
  
          boolean notifyAdapter = false;
+-        // An optional sign-in page.
+-        if (FREMobileIdentityConsistencyFieldTrial.isEnabled()
+-                && mFreProperties.getBoolean(SHOW_SIGNIN_PAGE)) {
+-            mPages.add(SyncConsentFirstRunFragment::new);
+-            mFreProgressStates.add(FRE_PROGRESS_SIGNIN_SHOWN);
+-            notifyAdapter = true;
+-        }
+-
 -        // An optional Data Saver page.
 -        if (mFreProperties.getBoolean(SHOW_DATA_REDUCTION_PAGE)) {
 -            mPages.add(new DataReductionProxyFirstRunFragment.Page());
 -            mFreProgressStates.add(FRE_PROGRESS_DATA_SAVER_SHOWN);
 -            notifyAdapter = true;
 -        }
--
+ 
          // An optional page to select a default search engine.
          if (mFreProperties.getBoolean(SHOW_SEARCH_ENGINE_PAGE)) {
-             mPages.add(new DefaultSearchEngineFirstRunFragment.Page());
-@@ -197,13 +186,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+@@ -211,14 +191,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
              notifyAdapter = true;
          }
  
 -        // An optional sign-in page.
--        if (mFreProperties.getBoolean(SHOW_SIGNIN_PAGE)) {
+-        if (!FREMobileIdentityConsistencyFieldTrial.isEnabled()
+-                && mFreProperties.getBoolean(SHOW_SIGNIN_PAGE)) {
 -            mPages.add(SyncConsentFirstRunFragment::new);
 -            mFreProgressStates.add(FRE_PROGRESS_SIGNIN_SHOWN);
 -            notifyAdapter = true;
@@ -1281,7 +1308,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
          if (notifyAdapter && mPagerAdapter != null) {
              mPagerAdapter.notifyDataSetChanged();
          }
-@@ -474,18 +456,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+@@ -489,18 +461,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
          FirstRunFlowSequencer.markFlowAsCompleted(
                  mResultSignInAccountName, mResultShowSignInSettings);
  
@@ -1297,9 +1324,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
 -            }
 -        }
 -
-         // Update the search engine name cached by the widget.
-         SearchWidgetProvider.updateCachedEngineName();
          if (sObserver != null) sObserver.onUpdateCachedEngineName(this);
+ 
+         launchPendingIntentAndFinish();
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
@@ -1491,9 +1518,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni
  import org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardShareActivity;
 -import org.chromium.chrome.browser.signin.SigninCheckerProvider;
  import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData;
+ import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager;
  import org.chromium.chrome.browser.util.AfterStartupTaskUtils;
- import org.chromium.chrome.browser.webapps.WebApkVersionManager;
-@@ -209,7 +207,6 @@ public class ProcessInitializationHandler {
+@@ -207,7 +205,6 @@ public class ProcessInitializationHandler {
       * Performs the post native initialization.
       */
      protected void handlePostNativeInitialization() {
@@ -1501,7 +1528,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni
          ChromeActivitySessionTracker.getInstance().initializeWithNative();
          ProfileManagerUtils.removeSessionCookiesForAllProfiles();
          AppBannerManager.setAppDetailsDelegate(AppHooks.get().createAppDetailsDelegate());
-@@ -364,7 +361,6 @@ public class ProcessInitializationHandler {
+@@ -356,7 +353,6 @@ public class ProcessInitializationHandler {
          deferredStartupHandler.addDeferredTask(new Runnable() {
              @Override
              public void run() {
@@ -1830,7 +1857,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
-@@ -27,8 +27,6 @@ import org.chromium.chrome.browser.profiles.Profile;
+@@ -26,8 +26,6 @@ import org.chromium.chrome.browser.profiles.Profile;
  import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
  import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
  import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
@@ -1839,15 +1866,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
  import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
  import org.chromium.components.browser_ui.settings.SettingsLauncher;
-@@ -49,7 +47,6 @@ public class PrivacySettings
+@@ -48,7 +46,6 @@ public class PrivacySettings
      private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode";
      private static final String PREF_SECURE_DNS = "secure_dns";
      private static final String PREF_DO_NOT_TRACK = "do_not_track";
 -    private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
      private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
      private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
- 
-@@ -106,36 +103,9 @@ public class PrivacySettings
+     private static final String PREF_PRIVACY_REVIEW = "privacy_review";
+@@ -105,36 +102,9 @@ public class PrivacySettings
          Preference secureDnsPref = findPreference(PREF_SECURE_DNS);
          secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled());
  
@@ -2100,7 +2127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe
 -                mSyncPromoPreference.getState() == State.PERSONALIZED_SIGNIN_PROMO;
 -        findPreference(PREF_ACCOUNT_AND_GOOGLE_SERVICES_SECTION)
 -                .setVisible(!isShowingPersonalizedSigninPromo);
--        mSignInPreference.setVisible(!isShowingPersonalizedSigninPromo);
+-        mSignInPreference.setIsShowingPersonalizedSigninPromo(isShowingPersonalizedSigninPromo);
 -    }
 -
      // TemplateUrlService.LoadListener implementation.
@@ -2227,49 +2254,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_
  
          onInitialLayoutInflationComplete();
      }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
-deleted file mode 100644
---- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninCheckerProvider.java
-+++ /dev/null
-@@ -1,38 +0,0 @@
--// Copyright 2020 The Chromium Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style license that can be
--// found in the LICENSE file.
--
--package org.chromium.chrome.browser.signin;
--
--import androidx.annotation.MainThread;
--
--import org.chromium.chrome.browser.profiles.Profile;
--import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
--import org.chromium.chrome.browser.sync.SyncController;
--import org.chromium.chrome.browser.sync.SyncErrorNotifier;
--
--/**
-- * This class is used to get a singleton instance of {@link SigninChecker}.
-- */
--public final class SigninCheckerProvider {
--    private static SigninChecker sInstance;
--
--    /**
--     * @return A singleton instance of {@link SigninChecker}.
--     */
--    @MainThread
--    public static SigninChecker get() {
--        if (sInstance == null) {
--            // SyncController and SyncErrorNotifier must be explicitly initialized.
--            // TODO(crbug.com/1156620): Move the initializations elsewhere.
--            SyncErrorNotifier.get();
--            SyncController.get();
--            Profile profile = Profile.getLastUsedRegularProfile();
--            sInstance = new SigninChecker(IdentityServicesProvider.get().getSigninManager(profile),
--                    IdentityServicesProvider.get().getAccountTrackerService(profile));
--        }
--        return sInstance;
--    }
--
--    private SigninCheckerProvider() {}
--}
 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
@@ -2290,7 +2274,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab
  import org.chromium.chrome.browser.status_indicator.StatusIndicatorCoordinator;
  import org.chromium.chrome.browser.subscriptions.CommerceSubscriptionsService;
  import org.chromium.chrome.browser.subscriptions.CommerceSubscriptionsServiceFactory;
-@@ -862,23 +859,6 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
+@@ -863,23 +860,6 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
      }
  
      private boolean maybeShowPromo() {
@@ -2318,7 +2302,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/tasks/ReturnToChromeExperimentsUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
-@@ -35,7 +35,6 @@ import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
+@@ -36,7 +36,6 @@ import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
  import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
  import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
  import org.chromium.chrome.browser.profiles.Profile;
@@ -2326,15 +2310,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToC
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.tab.TabLaunchType;
  import org.chromium.chrome.browser.tabmodel.TabModel;
-@@ -46,7 +45,6 @@ import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
- import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
+@@ -48,7 +47,6 @@ import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
  import org.chromium.chrome.features.start_surface.StartSurfaceUserData;
+ import org.chromium.components.embedder_support.util.UrlConstants;
  import org.chromium.components.embedder_support.util.UrlUtilities;
 -import org.chromium.components.signin.identitymanager.ConsentLevel;
  import org.chromium.content_public.browser.LoadUrlParams;
  import org.chromium.content_public.common.ResourceRequestBody;
  import org.chromium.ui.base.DeviceFormFactor;
-@@ -512,13 +510,8 @@ public final class ReturnToChromeExperimentsUtil {
+@@ -527,13 +525,8 @@ public final class ReturnToChromeExperimentsUtil {
       * Caches the status of whether the primary account is synced.
       */
      public static void cachePrimaryAccountSyncStatus() {
@@ -2348,12 +2332,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToC
 +                ChromePreferenceKeys.PRIMARY_ACCOUNT_SYNC, false);
      }
  
-     @VisibleForTesting
+     /**
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -2853,8 +2853,6 @@ static_library("browser") {
-       "android/shortcut_helper.h",
+@@ -2880,8 +2880,6 @@ static_library("browser") {
+       "android/signin/fre_mobile_identity_consistency_field_trial.h",
        "android/signin/signin_bridge.cc",
        "android/signin/signin_bridge.h",
 -      "android/signin/signin_manager_android.cc",
@@ -2361,7 +2345,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "android/signin/signin_metrics_utils.cc",
        "android/signin/unified_consent_service_bridge.cc",
        "android/signin/web_signin_bridge.cc",
-@@ -3178,8 +3176,6 @@ static_library("browser") {
+@@ -3216,8 +3214,6 @@ static_library("browser") {
        "sharing/sms/sms_fetch_request_handler.h",
        "shell_integration_android.cc",
        "signin/identity_services_provider_android.cc",
@@ -2370,7 +2354,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "ssl/chrome_security_state_client.cc",
        "ssl/chrome_security_state_client.h",
        "ssl/chrome_security_state_model_delegate.cc",
-@@ -3194,8 +3190,6 @@ static_library("browser") {
+@@ -3232,8 +3228,6 @@ static_library("browser") {
        "sync/glue/synced_window_delegate_android.h",
        "sync/glue/synced_window_delegates_getter_android.cc",
        "sync/glue/synced_window_delegates_getter_android.h",
@@ -2379,7 +2363,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "sync/sync_service_android_bridge.cc",
        "sync/sync_service_android_bridge.h",
        "sync/trusted_vault_client_android.cc",
-@@ -5933,10 +5927,6 @@ static_library("browser") {
+@@ -6037,10 +6031,6 @@ static_library("browser") {
        "signin/logout_tab_helper.h",
        "signin/process_dice_header_delegate_impl.cc",
        "signin/process_dice_header_delegate_impl.h",
@@ -2537,7 +2521,7 @@ diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/brows
 diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoController.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoController.java
 --- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoController.java
 +++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoController.java
-@@ -81,20 +81,7 @@ public class SigninPromoController {
+@@ -82,20 +82,7 @@ public class SigninPromoController {
       * @param accessPoint The access point for which the impression limit is being checked.
       */
      public static boolean canShowSyncPromo(@AccessPoint int accessPoint) {
@@ -2558,7 +2542,7 @@ diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/brows
 +        return false;
      }
  
-     private static boolean canShowBookmarkPromo() {
+     /**
 diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
 --- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
 +++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
@@ -2579,7 +2563,7 @@ diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/brows
          mIdentityManager = IdentityServicesProvider.get().getIdentityManager(
                  Profile.getLastUsedRegularProfile());
      }
-@@ -87,25 +84,11 @@ public class AccountPickerDelegateImpl implements WebSigninBridge.Listener, Acco
+@@ -87,26 +84,11 @@ public class AccountPickerDelegateImpl implements WebSigninBridge.Listener, Acco
              // if user retries the sign-in from the error screen, we need to sign out the user
              // first before signing in again.
              destroyWebSigninBridge();
@@ -2590,34 +2574,35 @@ diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/brows
          AccountInfoServiceProvider.get().getAccountInfoByEmail(accountEmail).then(accountInfo -> {
              mWebSigninBridge = mWebSigninBridgeFactory.create(
                      Profile.getLastUsedRegularProfile(), accountInfo, this);
--            mSigninManager.signin(accountInfo, new SigninManager.SignInCallback() {
--                @Override
--                public void onSignInComplete() {
--                    // After the sign-in is finished in Chrome, we still need to wait for
--                    // WebSigninBridge to be called to redirect to the continue url.
--                }
+-            mSigninManager.signin(AccountUtils.createAccountFromName(accountEmail),
+-                    new SigninManager.SignInCallback() {
+-                        @Override
+-                        public void onSignInComplete() {
+-                            // After the sign-in is finished in Chrome, we still need to wait for
+-                            // WebSigninBridge to be called to redirect to the continue url.
+-                        }
 -
--                @Override
--                public void onSignInAborted() {
--                    AccountPickerDelegateImpl.this.destroyWebSigninBridge();
--                }
--            });
+-                        @Override
+-                        public void onSignInAborted() {
+-                            AccountPickerDelegateImpl.this.destroyWebSigninBridge();
+-                        }
+-                    });
          });
      }
  
 diff --git a/chrome/browser/sync/sync_service_factory.cc b/chrome/browser/sync/sync_service_factory.cc
 --- a/chrome/browser/sync/sync_service_factory.cc
 +++ b/chrome/browser/sync/sync_service_factory.cc
-@@ -82,7 +82,7 @@
- #include "chromeos/lacros/lacros_service.h"
- #endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
+@@ -77,7 +77,7 @@
+ #include "chrome/browser/sync/wifi_configuration_sync_service_factory.h"
+ #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
 -namespace {
 +/*namespace {
  
  std::unique_ptr<KeyedService> BuildSyncService(
      content::BrowserContext* context) {
-@@ -182,7 +182,7 @@ std::unique_ptr<KeyedService> BuildSyncService(
+@@ -174,7 +174,7 @@ std::unique_ptr<KeyedService> BuildSyncService(
    return sync_service;
  }
  
@@ -2626,7 +2611,7 @@ diff --git a/chrome/browser/sync/sync_service_factory.cc b/chrome/browser/sync/s
  
  // static
  SyncServiceFactory* SyncServiceFactory::GetInstance() {
-@@ -266,7 +266,7 @@ SyncServiceFactory::~SyncServiceFactory() = default;
+@@ -258,7 +258,7 @@ SyncServiceFactory::~SyncServiceFactory() = default;
  
  KeyedService* SyncServiceFactory::BuildServiceInstanceFor(
      content::BrowserContext* context) const {
@@ -2635,7 +2620,7 @@ diff --git a/chrome/browser/sync/sync_service_factory.cc b/chrome/browser/sync/s
  }
  
  bool SyncServiceFactory::ServiceIsNULLWhileTesting() const {
-@@ -308,9 +308,3 @@ SyncServiceFactory::GetAllSyncServices() {
+@@ -300,9 +300,3 @@ SyncServiceFactory::GetAllSyncServices() {
    }
    return sync_services;
  }
@@ -2655,10 +2640,10 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 -      <message name="IDS_PREFS_MANAGE_SYNC_SETTINGS_CONTENT_DESCRIPTION" is_accessibility_with_no_ui="true" desc="The accessibility text to read when the 'Manage Sync Settings' page is opened from the sign-in page. This text is attached to the 'Navigate Up' button shown at the top of the screen. The first two sentences describe the screen that is currently shown to the user, while 'Navigate up' is a description for the button this text is attached to. 'Navigate up' should match TC ID 6794660482873516081.">
 -        You are currently customizing your Sync settings. To finish turning on sync, tap the Confirm button near the bottom of the screen. Navigate up
 -      </message>
-       <message name="IDS_SIGNIN_PREF_DISALLOWED_TITLE" desc="Title for the signin entry in Settings when signin is disallowed.">
-         Not signed in
+       <message name="IDS_SIGNIN_PREF_SUMMARY" desc="Summary for the entry in Settings to sign in to Chrome, explaining benefits of signing in.">
+         Sync and personalize across devices
        </message>
-@@ -336,15 +333,6 @@ CHAR_LIMIT guidelines:
+@@ -333,15 +330,6 @@ CHAR_LIMIT guidelines:
        <message name="IDS_URL_KEYED_ANONYMIZED_DATA_SUMMARY" desc="Summary for a checkbox in Settings that controls non-personalized URL collection and informs the user about the data shared by this feature.">
          Sends URLs of pages you visit to Google
        </message>

+ 1 - 1
build/patches/Remove-weblayer-dependency-on-Play-Services.patch

@@ -10,7 +10,7 @@ Subject: Remove weblayer dependency on Play Services
 diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn
 --- a/weblayer/browser/java/BUILD.gn
 +++ b/weblayer/browser/java/BUILD.gn
-@@ -103,7 +103,6 @@ android_library("base_module_java") {
+@@ -104,7 +104,6 @@ android_library("base_module_java") {
    ]
    deps = [
      ":base_module_interfaces_java",

+ 1 - 1
build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch

@@ -23,7 +23,7 @@ diff --git a/chrome/browser/net/dns_probe_runner.cc b/chrome/browser/net/dns_pro
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/net/dns/dns_transaction.cc
-@@ -835,7 +835,7 @@ class DnsTCPAttempt : public DnsAttempt {
+@@ -871,7 +871,7 @@ class DnsTCPAttempt : public DnsAttempt {
  
  // ----------------------------------------------------------------------------
  

+ 11 - 11
build/patches/Restore-Search-Ready-Omnibox-flag.patch

@@ -20,7 +20,7 @@ Disable search-ready omnibox by default
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -3228,6 +3228,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3381,6 +3381,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kUseLookalikesForNavigationSuggestionsDescription,
       kOsAll,
       FEATURE_VALUE_TYPE(net::features::kUseLookalikesForNavigationSuggestions)},
@@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -2291,6 +2291,11 @@
+@@ -2390,6 +2390,11 @@
      //  with neural net palm detection.
      "expiry_milestone": 90
    },
@@ -48,9 +48,9 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3404,6 +3404,11 @@ const char kScrollCaptureName[] = "Scroll Capture";
- const char kScrollCaptureDescription[] =
-     "Enables scrolling screenshot capture for web contents.";
+@@ -3485,6 +3485,11 @@ const char kSecurePaymentConfirmationAndroidName[] =
+ const char kSecurePaymentConfirmationAndroidDescription[] =
+     "Enables Secure Payment Confirmation on Android.";
  
 +const char kSearchReadyOmniboxName[] = "Search Ready Omnibox";
 +const char kSearchReadyOmniboxDescription[] =
@@ -63,9 +63,9 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -1947,6 +1947,9 @@ extern const char kSafeBrowsingUseLocalBlacklistsV2Description[];
- extern const char kScrollCaptureName[];
- extern const char kScrollCaptureDescription[];
+@@ -1999,6 +1999,9 @@ extern const char kScrollCaptureDescription[];
+ extern const char kSecurePaymentConfirmationAndroidName[];
+ extern const char kSecurePaymentConfirmationAndroidDescription[];
  
 +extern const char kSearchReadyOmniboxName[];
 +extern const char kSearchReadyOmniboxDescription[];
@@ -76,7 +76,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -241,6 +241,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+@@ -243,6 +243,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
      &kReachedCodeProfiler,
      &kReaderModeInCCT,
      &kReengagementNotification,
@@ -84,7 +84,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
      &kRelatedSearches,
      &kRelatedSearchesAlternateUx,
      &kRelatedSearchesInBar,
-@@ -680,6 +681,9 @@ const base::Feature kRelatedSearchesSimplifiedUx{
+@@ -682,6 +683,9 @@ const base::Feature kRelatedSearchesSimplifiedUx{
  const base::Feature kRelatedSearchesUi{"RelatedSearchesUi",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -108,7 +108,7 @@ 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
-@@ -421,6 +421,7 @@ public abstract class ChromeFeatureList {
+@@ -402,6 +402,7 @@ public abstract class ChromeFeatureList {
      public static final String OMNIBOX_ADAPTIVE_SUGGESTIONS_COUNT =
              "OmniboxAdaptiveSuggestionsCount";
      public static final String OMNIBOX_ASSISTANT_VOICE_SEARCH = "OmniboxAssistantVoiceSearch";

+ 11 - 11
build/patches/Restore-Simplified-NTP-launch.patch

@@ -29,7 +29,7 @@ This reverts commit 4d0e4483c5f77c66a8b6193e8a3bec5d0624d6ad.
 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
-@@ -685,6 +685,7 @@ chrome_java_resources = [
+@@ -684,6 +684,7 @@ chrome_java_resources = [
    "java/res/layout/new_tab_page_multi_feed_header.xml",
    "java/res/layout/new_tab_page_section_tab.xml",
    "java/res/layout/new_tab_page_tile_grid_placeholder.xml",
@@ -40,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
-@@ -588,6 +588,7 @@ chrome_java_sources = [
+@@ -590,6 +590,7 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollector.java",
    "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java",
    "java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java",
@@ -325,7 +325,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/Sug
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -3875,6 +3875,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4061,6 +4061,9 @@ const FeatureEntry kFeatureEntries[] = {
       SINGLE_VALUE_TYPE_AND_VALUE(
           switches::kForceShowUpdateMenuItemCustomSummary,
           "Custom Summary")},
@@ -338,7 +338,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3452,6 +3452,9 @@ const char kSharingHubLinkToggleName[] = "Sharing Hub Link Toggle";
+@@ -3533,6 +3533,9 @@ const char kSharingHubLinkToggleName[] = "Sharing Hub Link Toggle";
  const char kSharingHubLinkToggleDescription[] =
      "Enable the link toggle in the Sharing Hub.";
  
@@ -351,7 +351,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -1968,6 +1968,9 @@ extern const char kSiteIsolationForPasswordSitesDescription[];
+@@ -2020,6 +2020,9 @@ extern const char kSiteIsolationForPasswordSitesDescription[];
  extern const char kSmartSuggestionForLargeDownloadsName[];
  extern const char kSmartSuggestionForLargeDownloadsDescription[];
  
@@ -364,7 +364,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -220,6 +220,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
+@@ -221,6 +221,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
      &kEnhancedProtectionPromoCard,
      &kExperimentsForAgsa,
      &kExploreSites,
@@ -372,7 +372,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
      &kFocusOmniboxInIncognitoTabIntents,
      &kGoogleLensSdkIntent,
      &kHandleMediaIntents,
-@@ -652,6 +653,9 @@ const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2",
+@@ -651,6 +652,9 @@ const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2",
  const base::Feature kOfflineMeasurementsBackgroundTask{
      "OfflineMeasurementsBackgroundTask", base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -385,18 +385,18 @@ 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
-@@ -109,6 +109,7 @@ extern const base::Feature kNewWindowAppMenu;
+@@ -108,6 +108,7 @@ extern const base::Feature kNewWindowAppMenu;
  extern const base::Feature kOfflineIndicatorV2;
  extern const base::Feature kOfflineMeasurementsBackgroundTask;
  extern const base::Feature kPageAnnotationsService;
 +extern const base::Feature kSimplifiedNTP;
+ extern const base::Feature kBookmarksRefresh;
  extern const base::Feature kProbabilisticCryptidRenderer;
  extern const base::Feature kQuickActionSearchWidgetAndroid;
- extern const base::Feature kReachedCodeProfiler;
 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
-@@ -396,6 +396,7 @@ public abstract class ChromeFeatureList {
+@@ -379,6 +379,7 @@ public abstract class ChromeFeatureList {
      public static final String MARK_HTTP_AS = "MarkHttpAs";
      public static final String MESSAGES_FOR_ANDROID_CHROME_SURVEY =
              "MessagesForAndroidChromeSurvey";
@@ -429,7 +429,7 @@ diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/featu
 diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
 --- a/testing/variations/fieldtrial_testing_config.json
 +++ b/testing/variations/fieldtrial_testing_config.json
-@@ -4059,6 +4059,24 @@
+@@ -4119,6 +4119,24 @@
              ]
          }
      ],

+ 12 - 12
build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch

@@ -13,13 +13,13 @@ This reverts commit 4e598f38a0e6dd3dbede009c6a99b2a520a94e1f.
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -3320,6 +3320,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3473,6 +3473,10 @@ const FeatureEntry kFeatureEntries[] = {
       SINGLE_DISABLE_VALUE_TYPE(switches::kDisableHostedAppShimCreation)},
  #endif  // OS_MAC
  #if defined(OS_ANDROID)
-+    {"disable-pull-to-refresh-effect",
-+     flag_descriptions::kPullToRefreshEffectName,
-+     flag_descriptions::kPullToRefreshEffectDescription, kOsAndroid,
++    {switches::kDisablePullToRefreshEffect,
++     flag_descriptions::kDisablePullToRefreshEffectName,
++     flag_descriptions::kDisablePullToRefreshEffectDescription, kOsAndroid,
 +     SINGLE_DISABLE_VALUE_TYPE(switches::kDisablePullToRefreshEffect)},
      {"translate-force-trigger-on-english",
       flag_descriptions::kTranslateForceTriggerOnEnglishName,
@@ -27,7 +27,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -1103,6 +1103,11 @@
+@@ -1141,6 +1141,11 @@
      // enable-javascript-harmony.
      "expiry_milestone": -1
    },
@@ -42,12 +42,12 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -3299,6 +3299,10 @@ const char kReadLaterDescription[] =
+@@ -3375,6 +3375,10 @@ const char kReadLaterDescription[] =
      "Allow users to save tabs for later. Enables a new button and menu for "
      "accessing tabs saved for later.";
  
-+const char kPullToRefreshEffectName[] = "The pull-to-refresh effect";
-+const char kPullToRefreshEffectDescription[] =
++const char kDisablePullToRefreshEffectName[] = "The pull-to-refresh effect";
++const char kDisablePullToRefreshEffectDescription[] =
 +    "Page reloads triggered by vertically overscrolling content.";
 +
  const char kReaderModeHeuristicsName[] = "Reader Mode triggering";
@@ -56,16 +56,16 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -1887,6 +1887,9 @@ extern const char kQueryTilesRankTilesDescription[];
+@@ -1936,6 +1936,9 @@ extern const char kQueryTilesSegmentationDescription[];
  extern const char kQueryTilesSwapTrendingName[];
  extern const char kQueryTilesSwapTrendingDescription[];
  
-+extern const char kPullToRefreshEffectName[];
-+extern const char kPullToRefreshEffectDescription[];
++extern const char kDisablePullToRefreshEffectName[];
++extern const char kDisablePullToRefreshEffectDescription[];
 +
  extern const char kReaderModeHeuristicsName[];
  extern const char kReaderModeHeuristicsDescription[];
  extern const char kReaderModeHeuristicsMarkup[];
 -- 
-2.17.1
+2.20.1
 

+ 5 - 5
build/patches/Revert-flags-remove-num-raster-threads.patch

@@ -13,7 +13,7 @@ This reverts commit 2a51528a1737e9038f7f96f29403032a6a845a25.
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -304,6 +304,15 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = {
+@@ -311,6 +311,15 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = {
       "single-fullscreen,single-on-top,underlay"},
  };
  
@@ -29,7 +29,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = {
      {flags_ui::kGenericExperimentChoiceDefault, "", ""},
      {flag_descriptions::kTouchSelectionStrategyCharacter,
-@@ -3536,6 +3545,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3694,6 +3703,9 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-use-zoom-for-dsf", flag_descriptions::kEnableUseZoomForDsfName,
       flag_descriptions::kEnableUseZoomForDsfDescription, kOsAll,
       MULTI_VALUE_TYPE(kEnableUseZoomForDSFChoices)},
@@ -42,7 +42,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -3828,6 +3828,11 @@
+@@ -3945,6 +3945,11 @@
      "owners": [ "carlosil" ],
      "expiry_milestone": 92
    },
@@ -57,7 +57,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1666,6 +1666,14 @@ const char kOmniboxActiveSearchEnginesDescription[] =
+@@ -1714,6 +1714,14 @@ const char kOmniboxActiveSearchEnginesDescription[] =
      "Enables a 'Your Search Engines' section on "
      "chrome://settings/searchEngines.";
  
@@ -75,7 +75,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -971,6 +971,13 @@ extern const char kNotificationsSystemFlagDescription[];
+@@ -999,6 +999,13 @@ extern const char kNotificationsSystemFlagDescription[];
  extern const char kOmniboxActiveSearchEnginesName[];
  extern const char kOmniboxActiveSearchEnginesDescription[];
  

+ 34 - 27
build/patches/Revert-the-removal-of-an-option-to-block-autoplay.patch

@@ -31,11 +31,11 @@ Subject: Revert the removal of an option to block autoplay
  .../android/page_info_controller_android.cc   |   1 +
  components/page_info/page_info.cc             |   6 +++++
  components/page_info/page_info_ui.cc          |   1 +
- components/page_info_strings.grdp             |   3 +++
+ components/site_settings_strings.grdp         |   5 +++-
  .../platform/web_content_settings_client.h    |   3 +++
  .../core/html/media/autoplay_policy.cc        |  12 ++++++++-
  .../core/html/media/autoplay_policy.h         |   4 +++
- 32 files changed, 144 insertions(+), 5 deletions(-)
+ 32 files changed, 145 insertions(+), 6 deletions(-)
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/settings_autoplay.png
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/settings_autoplay.png
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/settings_autoplay.png
@@ -45,9 +45,9 @@ Subject: Revert the removal of an option to block autoplay
 diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
 --- a/components/browser_ui/site_settings/android/BUILD.gn
 +++ b/components/browser_ui/site_settings/android/BUILD.gn
-@@ -150,6 +150,11 @@ android_resources("java_resources") {
+@@ -145,6 +145,11 @@ android_resources("java_resources") {
+     "java/res/drawable-xxxhdpi/permission_protected_media.png",
      "java/res/drawable-xxxhdpi/settings_sensors.png",
-     "java/res/drawable-xxxhdpi/settings_storage.png",
      "java/res/drawable-xxxhdpi/web_asset.png",
 +    "java/res/drawable-hdpi/settings_autoplay.png",
 +    "java/res/drawable-xhdpi/settings_autoplay.png",
@@ -440,7 +440,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc
 diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
 --- a/components/content_settings/core/common/content_settings.cc
 +++ b/components/content_settings/core/common/content_settings.cc
-@@ -183,6 +183,7 @@ bool RendererContentSettingRules::IsRendererContentSetting(
+@@ -185,6 +185,7 @@ bool RendererContentSettingRules::IsRendererContentSetting(
      ContentSettingsType content_type) {
    return content_type == ContentSettingsType::IMAGES ||
           content_type == ContentSettingsType::JAVASCRIPT ||
@@ -542,7 +542,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp
 diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
 --- a/components/page_info/page_info.cc
 +++ b/components/page_info/page_info.cc
-@@ -98,6 +98,7 @@ ContentSettingsType kPermissionType[] = {
+@@ -97,6 +97,7 @@ ContentSettingsType kPermissionType[] = {
      ContentSettingsType::ADS,
      ContentSettingsType::BACKGROUND_SYNC,
      ContentSettingsType::SOUND,
@@ -550,7 +550,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.
      ContentSettingsType::AUTOMATIC_DOWNLOADS,
  #if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_WIN)
      ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER,
-@@ -141,6 +142,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
+@@ -140,6 +141,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
      return is_subresource_filter_activated;
    }
  
@@ -565,27 +565,34 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.
 diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
 --- a/components/page_info/page_info_ui.cc
 +++ b/components/page_info/page_info_ui.cc
-@@ -154,6 +154,7 @@ base::span<const PermissionsUIInfo> GetContentSettingsUIInfo() {
-      IDS_PAGE_INFO_TYPE_PROTECTED_MEDIA_IDENTIFIER},
+@@ -161,6 +161,7 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
  #endif
-     {ContentSettingsType::ADS, IDS_PAGE_INFO_TYPE_ADS},
-+    {ContentSettingsType::AUTOPLAY, IDS_PAGE_INFO_TYPE_AUTOPLAY},
-     {ContentSettingsType::SOUND, IDS_PAGE_INFO_TYPE_SOUND},
-     {ContentSettingsType::CLIPBOARD_READ_WRITE, IDS_PAGE_INFO_TYPE_CLIPBOARD},
-     {ContentSettingsType::SENSORS,
-diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp
---- a/components/page_info_strings.grdp
-+++ b/components/page_info_strings.grdp
-@@ -345,6 +345,9 @@
-     <message name="IDS_PAGE_INFO_TYPE_SOUND" desc="The label used for the sound permission controls in the Page Info popup.">
-       Sound
-     </message>
-+    <message name="IDS_PAGE_INFO_TYPE_AUTOPLAY" desc="The label used for the autoplay permission controls in the Page Info popup.">
-+      Autoplay
-+    </message>
-     <message name="IDS_PAGE_INFO_TYPE_CLIPBOARD" desc="The label used for the clipboard permission controls in the Page Info popup.">
-       Clipboard
-     </message>
+     {ContentSettingsType::ADS, IDS_SITE_SETTINGS_TYPE_ADS,
+      IDS_SITE_SETTINGS_TYPE_ADS_MID_SENTENCE},
++    {ContentSettingsType::AUTOPLAY, IDS_SITE_SETTINGS_TYPE_AUTOPLAY},
+     {ContentSettingsType::SOUND, IDS_SITE_SETTINGS_TYPE_SOUND,
+      IDS_SITE_SETTINGS_TYPE_SOUND_MID_SENTENCE},
+     {ContentSettingsType::CLIPBOARD_READ_WRITE,
+diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp
+--- a/components/site_settings_strings.grdp
++++ b/components/site_settings_strings.grdp
+@@ -130,6 +130,9 @@
+   <message name="IDS_SITE_SETTINGS_TYPE_SOUND" desc="The label used for the sound site settings controls.">
+     Sound
+   </message>
++  <message name="IDS_SITE_SETTINGS_TYPE_AUTOPLAY" desc="The label used for the autoplay permission controls in the Page Info popup.">
++    Autoplay
++  </message>
+   <message name="IDS_SITE_SETTINGS_TYPE_SOUND_MID_SENTENCE" desc="The label used for the sound site settings controls when used mid-sentence.">
+     sound
+   </message>
+@@ -218,4 +221,4 @@
+     window placement
+   </message>
+   </if>
+-</grit-part>
+\ No newline at end of file
++</grit-part>
 diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
 --- a/third_party/blink/public/platform/web_content_settings_client.h
 +++ b/third_party/blink/public/platform/web_content_settings_client.h

+ 57 - 18
build/patches/Site-setting-for-images.patch

@@ -23,8 +23,9 @@ Subject: Site setting for images
  .../core/browser/content_settings_utils.cc    |   9 ++-----
  .../android/page_info_controller_android.cc   |   4 ++++
  components/page_info/page_info.cc             |   7 ++++--
- components/page_info/page_info_ui.cc          |   2 +-
- 21 files changed, 75 insertions(+), 13 deletions(-)
+ components/page_info/page_info_ui.cc          |   4 ++--
+ components/site_settings_strings.grdp         |  12 +++++-----
+ 22 files changed, 82 insertions(+), 20 deletions(-)
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_images.png
  create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_images.png
@@ -42,7 +43,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
      "java/res/drawable-hdpi/permission_javascript.png",
      "java/res/drawable-hdpi/permission_popups.png",
      "java/res/drawable-hdpi/permission_protected_media.png",
-@@ -120,6 +121,7 @@ android_resources("java_resources") {
+@@ -119,6 +120,7 @@ android_resources("java_resources") {
      "java/res/drawable-hdpi/web_asset.png",
      "java/res/drawable-mdpi/ic_volume_up_grey600_24dp.png",
      "java/res/drawable-mdpi/permission_background_sync.png",
@@ -50,7 +51,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
      "java/res/drawable-mdpi/permission_javascript.png",
      "java/res/drawable-mdpi/permission_popups.png",
      "java/res/drawable-mdpi/permission_protected_media.png",
-@@ -128,6 +130,7 @@ android_resources("java_resources") {
+@@ -126,6 +128,7 @@ android_resources("java_resources") {
      "java/res/drawable-mdpi/web_asset.png",
      "java/res/drawable-xhdpi/ic_volume_up_grey600_24dp.png",
      "java/res/drawable-xhdpi/permission_background_sync.png",
@@ -58,7 +59,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
      "java/res/drawable-xhdpi/permission_javascript.png",
      "java/res/drawable-xhdpi/permission_popups.png",
      "java/res/drawable-xhdpi/permission_protected_media.png",
-@@ -136,6 +139,7 @@ android_resources("java_resources") {
+@@ -133,6 +136,7 @@ android_resources("java_resources") {
      "java/res/drawable-xhdpi/web_asset.png",
      "java/res/drawable-xxhdpi/ic_volume_up_grey600_24dp.png",
      "java/res/drawable-xxhdpi/permission_background_sync.png",
@@ -66,7 +67,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
      "java/res/drawable-xxhdpi/permission_javascript.png",
      "java/res/drawable-xxhdpi/permission_popups.png",
      "java/res/drawable-xxhdpi/permission_protected_media.png",
-@@ -144,6 +148,7 @@ android_resources("java_resources") {
+@@ -140,6 +144,7 @@ android_resources("java_resources") {
      "java/res/drawable-xxhdpi/web_asset.png",
      "java/res/drawable-xxxhdpi/ic_volume_up_grey600_24dp.png",
      "java/res/drawable-xxxhdpi/permission_background_sync.png",
@@ -401,7 +402,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc
 diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc
 --- a/components/page_info/android/page_info_controller_android.cc
 +++ b/components/page_info/android/page_info_controller_android.cc
-@@ -210,6 +210,10 @@ absl::optional<ContentSetting> PageInfoControllerAndroid::GetSettingToDisplay(
+@@ -214,6 +214,10 @@ absl::optional<ContentSetting> PageInfoControllerAndroid::GetSettingToDisplay(
      // audio since last navigation.
      if (web_contents_->WasEverAudible())
        return permission.default_setting;
@@ -415,7 +416,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp
 diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
 --- a/components/page_info/page_info.cc
 +++ b/components/page_info/page_info.cc
-@@ -90,9 +90,7 @@ ContentSettingsType kPermissionType[] = {
+@@ -89,9 +89,7 @@ ContentSettingsType kPermissionType[] = {
      ContentSettingsType::SENSORS,
      ContentSettingsType::NOTIFICATIONS,
      ContentSettingsType::JAVASCRIPT,
@@ -425,7 +426,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.
      ContentSettingsType::POPUPS,
      ContentSettingsType::WINDOW_PLACEMENT,
      ContentSettingsType::ADS,
-@@ -147,6 +145,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
+@@ -146,6 +144,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
       return true;
    }
  
@@ -440,15 +441,53 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.
 diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
 --- a/components/page_info/page_info_ui.cc
 +++ b/components/page_info/page_info_ui.cc
-@@ -138,7 +138,7 @@ base::span<const PermissionsUIInfo> GetContentSettingsUIInfo() {
-   DCHECK(base::FeatureList::GetInstance() != nullptr);
-   static const PermissionsUIInfo kPermissionsUIInfo[] = {
-     {ContentSettingsType::COOKIES, 0},
--    {ContentSettingsType::IMAGES, IDS_PAGE_INFO_TYPE_IMAGES},
-+    {ContentSettingsType::IMAGES, IDS_PAGE_INFO_TYPE_IMAGES}, // needed
-     {ContentSettingsType::JAVASCRIPT, IDS_PAGE_INFO_TYPE_JAVASCRIPT},
-     {ContentSettingsType::POPUPS, IDS_PAGE_INFO_TYPE_POPUPS_REDIRECTS},
-     {ContentSettingsType::GEOLOCATION, IDS_PAGE_INFO_TYPE_LOCATION},
+@@ -195,6 +195,8 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
+      IDS_SITE_SETTINGS_TYPE_CAMERA_PAN_TILT_ZOOM_MID_SENTENCE},
+     {ContentSettingsType::IDLE_DETECTION, IDS_SITE_SETTINGS_TYPE_IDLE_DETECTION,
+      IDS_SITE_SETTINGS_TYPE_IDLE_DETECTION_MID_SENTENCE},
++    {ContentSettingsType::IMAGES, IDS_SITE_SETTINGS_TYPE_IMAGES,
++     IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE},
+ #if !defined(OS_ANDROID)
+     // Page Info Permissions that are not defined in Android.
+     {ContentSettingsType::FILE_HANDLING, IDS_SITE_SETTINGS_TYPE_FILE_HANDLING,
+@@ -206,8 +208,6 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
+      IDS_SITE_SETTINGS_TYPE_FONT_ACCESS_MID_SENTENCE},
+     {ContentSettingsType::HID_GUARD, IDS_SITE_SETTINGS_TYPE_HID_DEVICES,
+      IDS_SITE_SETTINGS_TYPE_HID_DEVICES_MID_SENTENCE},
+-    {ContentSettingsType::IMAGES, IDS_SITE_SETTINGS_TYPE_IMAGES,
+-     IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE},
+     {ContentSettingsType::SERIAL_GUARD, IDS_SITE_SETTINGS_TYPE_SERIAL_PORTS,
+      IDS_SITE_SETTINGS_TYPE_SERIAL_PORTS_MID_SENTENCE},
+     {ContentSettingsType::WINDOW_PLACEMENT,
+diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp
+--- a/components/site_settings_strings.grdp
++++ b/components/site_settings_strings.grdp
+@@ -148,6 +148,12 @@
+   <message name="IDS_SITE_SETTINGS_TYPE_VR_MID_SENTENCE" desc="The label used for the VR site settings controls when used mid-sentence.">
+     virtual reality
+   </message>
++  <message name="IDS_SITE_SETTINGS_TYPE_IMAGES" desc="The label used for images site settings controls.">
++    Images
++  </message>
++  <message name="IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE" desc="The label used for images site settings controls when used mid-sentence.">
++    images
++  </message>
+ 
+   <!-- Site Settings desktop-only -->
+   <if expr="not is_android">
+@@ -181,12 +187,6 @@
+   <message name="IDS_SITE_SETTINGS_TYPE_HID_DEVICES_MID_SENTENCE" desc="The label used for the HID site settings controls when used mid-sentence.">
+     HID devices
+   </message>
+-  <message name="IDS_SITE_SETTINGS_TYPE_IMAGES" desc="The label used for images site settings controls.">
+-    Images
+-  </message>
+-  <message name="IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE" desc="The label used for images site settings controls when used mid-sentence.">
+-    images
+-  </message>
+   <message name="IDS_SITE_SETTINGS_TYPE_INSECURE_CONTENT" desc="The label used for the insecure content site settings controls. This setting controls whether HTTP content will be displayed on HTTPS sites.">
+     Insecure content
+   </message>
 -- 
 2.17.1
 

+ 1 - 1
build/patches/Switch-to-fstack-protector-strong.patch

@@ -16,7 +16,7 @@ higher memory/cache usage but not by the full 2-3%.
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 +++ b/build/config/compiler/BUILD.gn
-@@ -333,16 +333,12 @@ config("compiler") {
+@@ -334,16 +334,12 @@ config("compiler") {
          cflags += [ "-fstack-protector" ]
        }
      } else if ((is_posix && !is_chromeos_ash && !is_nacl) || is_fuchsia) {

+ 6 - 6
build/patches/Timezone-customization.patch

@@ -60,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C
  /**
   * A SiteSettingsDelegate instance that contains Chrome-specific Site Settings logic.
   */
-@@ -248,4 +252,16 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate {
+@@ -243,4 +247,16 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate {
              mPrivacySandboxController.dismissSnackbar();
          }
      }
@@ -88,7 +88,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
    ]
    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
    resources_package = "org.chromium.components.browser_ui.site_settings"
-@@ -164,6 +165,8 @@ android_resources("java_resources") {
+@@ -159,6 +160,8 @@ android_resources("java_resources") {
      "java/res/xml/single_website_preferences.xml",
      "java/res/xml/site_settings_preferences.xml",
      "java/res/xml/website_preferences.xml",
@@ -1068,7 +1068,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc
 diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
 --- a/components/content_settings/core/browser/host_content_settings_map.cc
 +++ b/components/content_settings/core/browser/host_content_settings_map.cc
-@@ -587,6 +587,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) {
+@@ -588,6 +588,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) {
      provider->SetClockForTesting(clock);
  }
  
@@ -1086,7 +1086,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map.
 diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h
 --- a/components/content_settings/core/browser/host_content_settings_map.h
 +++ b/components/content_settings/core/browser/host_content_settings_map.h
-@@ -328,6 +328,9 @@ class HostContentSettingsMap : public content_settings::Observer,
+@@ -329,6 +329,9 @@ class HostContentSettingsMap : public content_settings::Observer,
      allow_invalid_secondary_pattern_for_testing_ = allow;
    }
  
@@ -1099,7 +1099,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map.
 diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
 --- a/components/content_settings/core/common/content_settings.cc
 +++ b/components/content_settings/core/common/content_settings.cc
-@@ -185,7 +185,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
+@@ -187,7 +187,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
           content_type == ContentSettingsType::JAVASCRIPT ||
           content_type == ContentSettingsType::CLIENT_HINTS ||
           content_type == ContentSettingsType::POPUPS ||
@@ -1246,7 +1246,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc
    return allow;
  }
  
-@@ -487,4 +499,81 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
+@@ -482,4 +494,81 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
    return false;
  }
  

+ 4 - 4
build/patches/Unexpire-tab-groups-flags.patch

@@ -12,7 +12,7 @@ Disable by default
 diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -2624,7 +2624,7 @@
+@@ -2738,7 +2738,7 @@
    {
      "name": "enable-tab-groups",
      "owners": [ "memex-team@google.com" ],
@@ -21,7 +21,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
    },
    {
      "name": "enable-tab-groups-continuation",
-@@ -2634,7 +2634,7 @@
+@@ -2748,7 +2748,7 @@
    {
      "name": "enable-tab-groups-ui-improvements",
      "owners": [ "memex-team@google.com" ],
@@ -33,7 +33,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 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
-@@ -731,13 +731,13 @@ const base::Feature kTabEngagementReportingAndroid{
+@@ -733,13 +733,13 @@ const base::Feature kTabEngagementReportingAndroid{
      "TabEngagementReportingAndroid", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kTabGroupsAndroid{"TabGroupsAndroid",
@@ -52,7 +52,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/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
 +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
-@@ -68,7 +68,7 @@ public class CachedFeatureFlags {
+@@ -67,7 +67,7 @@ public class CachedFeatureFlags {
                      .put(ChromeFeatureList.PREFETCH_NOTIFICATION_SCHEDULING_INTEGRATION, false)
                      .put(ChromeFeatureList.STORE_HOURS, false)
                      .put(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, true)

+ 5 - 5
build/patches/Update-i18n-zh_CN-support.patch

@@ -12,7 +12,7 @@ Subject: Update i18n zh_CN support
 diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
 --- a/chrome/app/resources/generated_resources_zh-CN.xtb
 +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
-@@ -7754,4 +7754,6 @@
+@@ -7755,4 +7755,6 @@
  <translation id="996250603853062861">正在建立安全连接...</translation>
  <translation id="99731366405731005">您需要开启 <ph name="LINK1_BEGIN" />Chrome 同步<ph name="LINK1_END" />才能使用 Wi-Fi 同步功能。<ph name="LINK2_BEGIN" />了解详情<ph name="LINK2_END" /></translation>
  <translation id="998747458861718449">检查(&amp;N)</translation>
@@ -24,7 +24,7 @@ diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/res
 diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
 +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
-@@ -1358,4 +1358,37 @@ Privacy Sandbox 试用版功能尚处于积极开发阶段,目前只能在部
+@@ -1386,4 +1386,37 @@ Privacy Sandbox 试用版功能尚处于积极开发阶段,目前只能在部
  <translation id="983192555821071799">关闭所有标签页</translation>
  <translation id="987264212798334818">常规</translation>
  <translation id="996149300115483134">动态卡片上的菜单已关闭</translation>
@@ -67,7 +67,7 @@ diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strin
 diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
 +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
-@@ -317,4 +317,17 @@
+@@ -319,4 +319,17 @@
  <translation id="9162462602695099906">这是一个危险网页</translation>
  <translation id="930525582205581608">移除此网站?</translation>
  <translation id="967624055006145463">已存储的数据</translation>
@@ -90,10 +90,10 @@ diff --git a/components/browser_ui/strings/android/translations/browser_ui_strin
 diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
 --- a/components/strings/components_strings_zh-CN.xtb
 +++ b/components/strings/components_strings_zh-CN.xtb
-@@ -2345,4 +2345,7 @@
-     &lt;/ul&gt;</translation>
+@@ -2441,4 +2441,7 @@
  <translation id="994346157028146140">JIS B1</translation>
  <translation id="997986563973421916">来自 Google Pay</translation>
+ <translation id="998677222109959694">管理 Chrome 设置</translation>
 -</translationbundle>
 \ No newline at end of file
 +<translation id="410351446219883937">自动播放</translation>

+ 1 - 1
build/patches/Use-4-tile-rows-never-show-logo.patch

@@ -54,7 +54,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mos
 diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc
 --- a/chrome/browser/engagement/important_sites_util.cc
 +++ b/chrome/browser/engagement/important_sites_util.cc
-@@ -66,7 +66,7 @@ static const int kTimesIgnoredForSuppression = 3;
+@@ -67,7 +67,7 @@ static const int kTimesIgnoredForSuppression = 3;
  // These are the maximum # of bookmarks we can use as signals. If the user has
  // <= kMaxBookmarks, then we just use those bookmarks. Otherwise we filter all
  // bookmarks on site engagement > 0, sort, and trim to kMaxBookmarks.

+ 16 - 16
build/patches/User-agent-customization.patch

@@ -80,7 +80,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
-@@ -981,6 +981,7 @@ chrome_java_sources = [
+@@ -980,6 +980,7 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/payments/ui/DimmingDialog.java",
    "java/src/org/chromium/chrome/browser/payments/ui/LineItem.java",
    "java/src/org/chromium/chrome/browser/payments/ui/PaymentAppComparator.java",
@@ -538,10 +538,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
 +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 +import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 +import org.chromium.components.embedder_support.util.UrlUtilities;
+ import org.chromium.base.supplier.Supplier;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ActivityUtils;
- import org.chromium.chrome.browser.WarmupManager;
-@@ -495,6 +499,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -497,6 +501,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
              // Request desktop sites for large screen tablets.
              params.setOverrideUserAgent(calculateUserAgentOverrideOption());
  
@@ -573,7 +573,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
              @TabLoadStatus
              int result = loadUrlInternal(params);
  
-@@ -1498,6 +1527,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -1500,6 +1529,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
              if (mWebContents != null) mWebContents.getNavigationController().loadIfNecessary();
              mIsBeingRestored = true;
              for (TabObserver observer : mObservers) observer.onRestoreStarted(this);
@@ -584,7 +584,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
          } finally {
              TraceEvent.end("Tab.restoreIfNeeded");
          }
-@@ -1677,6 +1710,43 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
+@@ -1681,6 +1714,43 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
                  /* forcedByUser */ false);
      }
  
@@ -866,7 +866,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
 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
-@@ -1023,6 +1023,9 @@ public final class ChromePreferenceKeys {
+@@ -1040,6 +1040,9 @@ public final class ChromePreferenceKeys {
      public static final KeyPrefix KEY_ZERO_SUGGEST_HEADER_GROUP_COLLAPSED_BY_DEFAULT_PREFIX =
              new KeyPrefix("zero_suggest_header_group_collapsed_by_default*");
  
@@ -876,9 +876,9 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
      /**
       * These values are currently used as SharedPreferences keys, along with the keys in
       * {@link LegacyChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys
-@@ -1130,6 +1133,8 @@ public final class ChromePreferenceKeys {
-                 SIGNIN_PROMO_IMPRESSIONS_COUNT_NTP,
-                 SIGNIN_PROMO_NTP_PROMO_EXPIRED,
+@@ -1156,6 +1159,8 @@ public final class ChromePreferenceKeys {
+                 TAP_FEED_CARDS_COUNT,
+                 TAP_MV_TILES_COUNT,
                  TWA_DISCLOSURE_SEEN_PACKAGES,
 +                USERAGENT_STICKY_DESKTOP_MODE,
 +                USERAGENT_ALWAYS_DESKTOP_MODE,
@@ -1001,7 +1001,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/chrome/common/pref_names.cc
-@@ -423,6 +423,19 @@ const char kAllowJavascriptAppleEvents[] =
+@@ -433,6 +433,19 @@ const char kAllowJavascriptAppleEvents[] =
  
  #endif
  
@@ -1024,7 +1024,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 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
-@@ -1188,6 +1188,14 @@ extern const char kLensRegionSearchEnabled[];
+@@ -1196,6 +1196,14 @@ extern const char kLensRegionSearchEnabled[];
  extern const char kIncognitoTabHistoryEnabled[];
  #endif
  
@@ -1063,7 +1063,7 @@ diff --git a/components/browser_ui/widget/android/java/src/org/chromium/componen
 diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc
 --- a/components/embedder_support/user_agent_utils.cc
 +++ b/components/embedder_support/user_agent_utils.cc
-@@ -141,6 +141,13 @@ std::string GetPlatformForUAMetadata() {
+@@ -231,6 +231,13 @@ std::string GetPlatformForUAMetadata() {
  blink::UserAgentMetadata GetUserAgentMetadata() {
    blink::UserAgentMetadata metadata;
  
@@ -1112,7 +1112,7 @@ diff --git a/content/browser/renderer_host/navigation_controller_android.h b/con
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -3582,6 +3582,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
+@@ -3616,6 +3616,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
      switches::kLacrosEnablePlatformHevc,
      switches::kLacrosUseChromeosProtectedMedia,
  #endif
@@ -1123,7 +1123,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
-@@ -36,6 +36,7 @@
+@@ -37,6 +37,7 @@
  #include "base/strings/string_util.h"
  #include "base/strings/stringprintf.h"
  #include "base/system/sys_info.h"
@@ -1131,7 +1131,7 @@ diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser
  #include "base/threading/thread_task_runner_handle.h"
  #include "base/time/time.h"
  #include "base/trace_event/optional_trace_event.h"
-@@ -2627,6 +2628,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() {
+@@ -2623,6 +2624,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() {
          !renderer_preferences_.user_agent_override.ua_metadata_override->mobile)
  #endif
        prefs.viewport_meta_enabled = false;
@@ -1164,7 +1164,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/frameh
 diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
 --- a/content/renderer/render_thread_impl.cc
 +++ b/content/renderer/render_thread_impl.cc
-@@ -1669,7 +1669,6 @@ void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
+@@ -1672,7 +1672,6 @@ void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
  }
  
  void RenderThreadImpl::SetUserAgent(const std::string& user_agent) {

+ 1 - 1
build/patches/autofill-disable-autofill-download-manager.patch

@@ -123,7 +123,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
 diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc
 --- a/components/autofill/core/common/autofill_prefs.cc
 +++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -141,7 +141,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -134,7 +134,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kAutofillEnabledDeprecated, true,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(

+ 3 - 3
build/patches/build-remove-calling-untrusted-hooks.patch

@@ -31,7 +31,7 @@ diff --git a/DEPS b/DEPS
  
    # By default bot checkouts the WPR archive files only when this
    # flag is set True.
-@@ -3790,49 +3790,6 @@ hooks = [
+@@ -3786,49 +3786,6 @@ hooks = [
          'sync', '--extract',
      ],
    },
@@ -81,7 +81,7 @@ diff --git a/DEPS b/DEPS
    {
      # Case-insensitivity for the Win SDK. Must run before win_toolchain below.
      'name': 'ciopfs_linux',
-@@ -3940,43 +3897,6 @@ hooks = [
+@@ -3936,43 +3893,6 @@ hooks = [
                 '-s', 'src/third_party/skia',
                 '--header', 'src/skia/ext/skia_commit_hash.h'],
    },
@@ -125,7 +125,7 @@ diff --git a/DEPS b/DEPS
    # Pull rc binaries using checked-in hashes.
    {
      'name': 'rc_win',
-@@ -4002,30 +3922,6 @@ hooks = [
+@@ -3998,30 +3918,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
      ],
    },

+ 46 - 15
build/patches/disable-AdsBlockedInfoBar.patch

@@ -3,40 +3,71 @@ Date: Mon, 26 Aug 2019 17:54:28 -0400
 Subject: disable AdsBlockedInfoBar
 
 ---
- .../content/browser/profile_interaction_manager.cc | 14 --------------
- 1 file changed, 14 deletions(-)
+ .../browser/profile_interaction_manager.cc    | 44 +------------------
+ 1 file changed, 1 insertion(+), 43 deletions(-)
 
 diff --git a/components/subresource_filter/content/browser/profile_interaction_manager.cc b/components/subresource_filter/content/browser/profile_interaction_manager.cc
 --- a/components/subresource_filter/content/browser/profile_interaction_manager.cc
 +++ b/components/subresource_filter/content/browser/profile_interaction_manager.cc
-@@ -17,11 +17,6 @@
+@@ -17,13 +17,6 @@
  #include "content/public/browser/render_frame_host.h"
  #include "content/public/browser/web_contents.h"
  
 -#if defined(OS_ANDROID)
 -#include "components/infobars/content/content_infobar_manager.h"  // nogncheck
+-#include "components/messages/android/messages_feature.h"
 -#include "components/subresource_filter/content/browser/ads_blocked_infobar_delegate.h"
+-#include "components/subresource_filter/content/browser/ads_blocked_message_delegate.h"
 -#endif
 -
  namespace subresource_filter {
  
  ProfileInteractionManager::ProfileInteractionManager(
-@@ -135,15 +130,6 @@ void ProfileInteractionManager::MaybeShowNotification() {
-   const GURL& top_level_url = page_->GetMainDocument().GetLastCommittedURL();
-   if (profile_context_->settings_manager()->ShouldShowUIForSite(
-           top_level_url)) {
+@@ -134,43 +127,8 @@ void ProfileInteractionManager::MaybeShowNotification() {
+   DCHECK(page_);
+   DCHECK(page_->IsPrimary());
+ 
+-  const GURL& top_level_url = page_->GetMainDocument().GetLastCommittedURL();
+-  if (profile_context_->settings_manager()->ShouldShowUIForSite(
+-          top_level_url)) {
 -#if defined(OS_ANDROID)
--    // NOTE: It is acceptable for the embedder to not have installed an infobar
--    // manager.
--    if (auto* infobar_manager =
--            infobars::ContentInfoBarManager::FromWebContents(
--                GetWebContents())) {
--      subresource_filter::AdsBlockedInfobarDelegate::Create(infobar_manager);
+-    if (messages::IsAdsBlockedMessagesUiEnabled()) {
+-      subresource_filter::AdsBlockedMessageDelegate::CreateForWebContents(
+-          GetWebContents());
+-      subresource_filter::AdsBlockedMessageDelegate::FromWebContents(
+-          GetWebContents())
+-          ->ShowMessage();
+-    } else {
+-      // NOTE: It is acceptable for the embedder to not have installed an
+-      // infobar manager.
+-      if (auto* infobar_manager =
+-              infobars::ContentInfoBarManager::FromWebContents(
+-                  GetWebContents())) {
+-        subresource_filter::AdsBlockedInfobarDelegate::Create(infobar_manager);
+-      }
 -    }
 -#endif
+-
+-    // TODO(https://crbug.com/1103176): Plumb the actual frame reference here
+-    // (it comes from
+-    // ContentSubresourceFilterThrottleManager::DidDisallowFirstSubresource,
+-    // which comes from a specific frame).
+-    content_settings::PageSpecificContentSettings* content_settings =
+-        content_settings::PageSpecificContentSettings::GetForFrame(
+-            &page_->GetMainDocument());
+-    content_settings->OnContentBlocked(ContentSettingsType::ADS);
+-
+-    ContentSubresourceFilterThrottleManager::LogAction(
+-        SubresourceFilterAction::kUIShown);
+-    profile_context_->settings_manager()->OnDidShowUI(top_level_url);
+-  } else {
+-    ContentSubresourceFilterThrottleManager::LogAction(
++  ContentSubresourceFilterThrottleManager::LogAction(
+         SubresourceFilterAction::kUISuppressed);
+-  }
+ }
  
-     // TODO(https://crbug.com/1103176): Plumb the actual frame reference here
-     // (it comes from
+ content::WebContents* ProfileInteractionManager::GetWebContents() {
 -- 
 2.17.1
 

+ 1 - 1
build/patches/disable-WebView-variations-support.patch

@@ -24,7 +24,7 @@ diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewC
 diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
 +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
-@@ -431,8 +431,6 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
+@@ -435,8 +435,6 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
                  }
              }
  

+ 1 - 1
build/patches/disable-autofill-server-communication-by-default.patch

@@ -9,7 +9,7 @@ Subject: disable autofill server communication by default
 diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
 --- a/components/autofill/core/common/autofill_features.cc
 +++ b/components/autofill/core/common/autofill_features.cc
-@@ -343,7 +343,7 @@ const base::Feature kAutofillSectionUponRedundantNameInfo{
+@@ -339,7 +339,7 @@ const base::Feature kAutofillSectionUponRedundantNameInfo{
  // "upload" resources.
  // i.e., https://other.autofill.server:port/tbproxy/af/
  const base::Feature kAutofillServerCommunication{

+ 1 - 1
build/patches/disable-browser-autologin-by-default.patch

@@ -17,7 +17,7 @@ diff --git a/components/signin/internal/identity_manager/primary_account_manager
 +  registry->RegisterBooleanPref(prefs::kAutologinEnabled, false);
    registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList);
    registry->RegisterBooleanPref(prefs::kSigninAllowed, false);
-   registry->RegisterBooleanPref(prefs::kSigninAllowedByPolicy, true);
+   registry->RegisterBooleanPref(prefs::kSignedInWithCredentialProvider, false);
 -- 
 2.17.1
 

+ 1 - 1
build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch

@@ -13,7 +13,7 @@ Increase probe period from 1s to 15s
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/net/dns/host_resolver_manager.cc
-@@ -134,12 +134,12 @@ const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
+@@ -136,12 +136,12 @@ const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
  
  // Time between IPv6 probes, i.e. for how long results of each IPv6 probe are
  // cached.

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác