csagan5 преди 4 години
родител
ревизия
feb98f1fb1
променени са 95 файла, в които са добавени 1433 реда и са изтрити 2938 реда
  1. 1 1
      build/RELEASE
  2. 2 4
      build/bromite_patches_list.txt
  3. 11 11
      build/patches/AImageReader-CFI-crash-mitigations.patch
  4. 27 27
      build/patches/AV1-codec-support.patch
  5. 6 6
      build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch
  6. 17 17
      build/patches/Add-a-proxy-configuration-page.patch
  7. 21 21
      build/patches/Add-an-always-incognito-mode.patch
  8. 24 41
      build/patches/Add-bookmark-import-export-actions.patch
  9. 5 5
      build/patches/Add-custom-tab-intents-privacy-option.patch
  10. 18 17
      build/patches/Add-exit-menu-item.patch
  11. 5 5
      build/patches/Add-flag-for-save-data-header.patch
  12. 4 4
      build/patches/Add-flag-to-configure-maximum-connections-per-host.patch
  13. 5 5
      build/patches/Add-flag-to-control-video-playback-resume-feature.patch
  14. 4 4
      build/patches/Add-flag-to-disable-IPv6-probes.patch
  15. 3 3
      build/patches/Add-flag-to-disable-WebGL.patch
  16. 14 14
      build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch
  17. 11 11
      build/patches/Add-history-support-in-incognito-mode.patch
  18. 11 11
      build/patches/Add-menu-item-to-bookmark-all-tabs.patch
  19. 19 16
      build/patches/Add-menu-item-to-view-source.patch
  20. 7 7
      build/patches/Add-option-to-force-tablet-UI.patch
  21. 8 8
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  22. 2 2
      build/patches/Allow-playing-audio-in-background.patch
  23. 1 1
      build/patches/Allow-website-sign-in-without-account-sign-in.patch
  24. 2 2
      build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch
  25. 97 246
      build/patches/Automated-domain-substitution.patch
  26. 10 10
      build/patches/Block-gateway-attacks-via-websockets.patch
  27. 27 23
      build/patches/Block-qjz9zk-or-trk-requests.patch
  28. 36 36
      build/patches/Bromite-AdBlockUpdaterService.patch
  29. 1 1
      build/patches/Change-default-webRTC-policy-to-not-use-any-address.patch
  30. 1 1
      build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch
  31. 1 1
      build/patches/Disable-Omaha-update-checks.patch
  32. 2 2
      build/patches/Disable-all-promo-dialogs.patch
  33. 6 6
      build/patches/Disable-fetching-of-all-field-trials.patch
  34. 8 8
      build/patches/Disable-media-router-and-remoting-by-default.patch
  35. 1 1
      build/patches/Disable-metrics-collection-for-NTP-tiles.patch
  36. 1 1
      build/patches/Disable-metrics-on-all-I-O-threads.patch
  37. 1 1
      build/patches/Disable-plugins-enumeration.patch
  38. 148 145
      build/patches/Disable-safe-browsing.patch
  39. 2 2
      build/patches/Disable-seed-based-field-trials.patch
  40. 1 1
      build/patches/Disable-smart-selection-by-default.patch
  41. 2 2
      build/patches/Disable-some-signed-exchange-features.patch
  42. 12 12
      build/patches/Disable-text-fragments-by-default.patch
  43. 1 1
      build/patches/Disable-third-party-cookies-by-default.patch
  44. 3 3
      build/patches/Disable-unified-autoplay-feature.patch
  45. 4 4
      build/patches/Disable-update-scheduler.patch
  46. 8 8
      build/patches/Do-not-compile-QR-code-sharing.patch
  47. 1 1
      build/patches/Do-not-hide-component-extensions.patch
  48. 1 1
      build/patches/Do-not-store-passwords-by-default.patch
  49. 1 1
      build/patches/Enable-SPPI-for-devices-with-enough-memory.patch
  50. 0 23
      build/patches/Enable-app-overflow-menu-icons-by-default.patch
  51. 2 2
      build/patches/Enable-darken-websites-checkbox-in-themes.patch
  52. 1 1
      build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
  53. 0 123
      build/patches/Enable-legacy-TLS-interstitital-warning.patch
  54. 1 1
      build/patches/Enable-prefetch-privacy-changes-by-default.patch
  55. 1 1
      build/patches/Enable-user-agent-freeze-by-default.patch
  56. 2 2
      build/patches/Hardening-against-incognito-mode-detection.patch
  57. 1 1
      build/patches/Increase-number-of-autocomplete-matches-from-5-to-10.patch
  58. 6 6
      build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch
  59. 8 8
      build/patches/Modify-default-preferences.patch
  60. 7 7
      build/patches/Move-some-account-settings-back-to-privacy-settings.patch
  61. 26 26
      build/patches/Multiple-fingerprinting-mitigations.patch
  62. 2 2
      build/patches/Open-YouTube-links-in-Bromite.patch
  63. 55 33
      build/patches/Remove-SMS-integration.patch
  64. 224 268
      build/patches/Remove-binary-blob-integrations.patch
  65. 12 12
      build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch
  66. 4 4
      build/patches/Remove-help-menu-item.patch
  67. 23 0
      build/patches/Remove-offline-measurement-background-task.patch
  68. 223 223
      build/patches/Remove-signin-and-data-saver-integrations.patch
  69. 21 21
      build/patches/Restore-Search-Ready-Omnibox-flag.patch
  70. 20 20
      build/patches/Restore-Simplified-NTP-launch.patch
  71. 4 4
      build/patches/Restore-enable-horizontal-tab-switcher-flag.patch
  72. 4 4
      build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch
  73. 5 5
      build/patches/Revert-flags-remove-num-raster-threads.patch
  74. 6 6
      build/patches/Revert-the-removal-of-an-option-to-block-autoplay.patch
  75. 4 4
      build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch
  76. 1 1
      build/patches/Switch-to-fstack-protector-strong.patch
  77. 34 34
      build/patches/Timezone-customization.patch
  78. 4 4
      build/patches/Update-i18n-zh_CN-support.patch
  79. 3 3
      build/patches/Use-4-tile-rows-never-show-logo.patch
  80. 0 1275
      build/patches/User-agent-customization.patch
  81. 15 12
      build/patches/autofill-disable-autofill-download-manager.patch
  82. 5 5
      build/patches/build-remove-calling-untrusted-hooks.patch
  83. 13 13
      build/patches/disable-AdsBlockedInfoBar.patch
  84. 1 1
      build/patches/disable-autofill-server-communication-by-default.patch
  85. 1 1
      build/patches/first_run-deactivate-autoupdate-globally.patch
  86. 3 3
      build/patches/kill-Auth.patch
  87. 1 1
      build/patches/kill-Location-fall-back-to-system.patch
  88. 1 1
      build/patches/kill-TOS-and-metrics-opt-out.patch
  89. 1 1
      build/patches/kill-Vision.patch
  90. 1 1
      build/patches/ungoogled-chromium-Disable-Google-host-detection.patch
  91. 41 1
      build/patches/ungoogled-chromium-Disable-domain-reliability.patch
  92. 3 3
      build/patches/ungoogled-chromium-Disable-profile-avatar.patch
  93. 2 2
      build/patches/ungoogled-chromium-Disable-translate-integration.patch
  94. 33 2
      build/patches/updater-disable-updater-pings.patch
  95. 4 6
      build/patches/webview-Hard-no-to-persistent-histograms.patch

+ 1 - 1
build/RELEASE

@@ -1 +1 @@
-89.0.4389.117
+90.0.4430.55

+ 2 - 4
build/bromite_patches_list.txt

@@ -117,7 +117,6 @@ AImageReader-CFI-crash-mitigations.patch
 Update-i18n-zh_CN-support.patch
 Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch
 Add-menu-item-to-view-source.patch
-Enable-legacy-TLS-interstitital-warning.patch
 Block-gateway-attacks-via-websockets.patch
 Enable-prefetch-privacy-changes-by-default.patch
 Disable-support-for-RAR-files-inspection.patch
@@ -125,12 +124,11 @@ Add-history-support-in-incognito-mode.patch
 Enable-darken-websites-checkbox-in-themes.patch
 Remove-blocklisted-URLs-upon-bookmark-creation.patch
 Disable-the-DIAL-repeating-discovery.patch
-Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-scheme.patch
+Block-qjz9zk-or-trk-requests.patch
 Hardening-against-incognito-mode-detection.patch
 Remove-weblayer-dependency-on-Play-Services.patch
 Timezone-customization.patch
 Move-some-account-settings-back-to-privacy-settings.patch
-User-agent-customization.patch
 Restore-Simplified-NTP-launch.patch
 Revert-the-removal-of-an-option-to-block-autoplay.patch
 Disable-text-fragments-by-default.patch
@@ -142,10 +140,10 @@ Disable-unified-autoplay-feature.patch
 Revert-flags-remove-num-raster-threads.patch
 webview-Hard-no-to-persistent-histograms.patch
 Ignore-enterprise-policies-for-secure-DNS.patch
-Enable-app-overflow-menu-icons-by-default.patch
 Add-menu-item-to-bookmark-all-tabs.patch
 Add-flag-for-save-data-header.patch
 Add-option-to-force-tablet-UI.patch
 Make-all-favicon-requests-on-demand.patch
 Add-Alt-D-hotkey-to-focus-address-bar.patch
+Remove-offline-measurement-background-task.patch
 Automated-domain-substitution.patch

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

@@ -83,7 +83,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
-@@ -1772,7 +1772,7 @@
+@@ -1899,7 +1899,7 @@
    {
      "name": "enable-image-reader",
      "owners": [ "vikassoni", "liberato" ],
@@ -95,7 +95,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js
 diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
 --- a/gpu/config/gpu_driver_bug_list.json
 +++ b/gpu/config/gpu_driver_bug_list.json
-@@ -3254,6 +3254,22 @@
+@@ -3236,6 +3236,22 @@
          "dont_delete_source_texture_for_egl_image"
        ]
      },
@@ -121,7 +121,7 @@ diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_lis
 diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
 --- a/gpu/config/gpu_finch_features.cc
 +++ b/gpu/config/gpu_finch_features.cc
-@@ -38,6 +38,11 @@ bool FieldIsInBlocklist(const char* current_value, std::string blocklist_str) {
+@@ -49,6 +49,11 @@ bool IsDeviceBlocked(const char* field, const std::string& block_list) {
  }  // namespace
  
  #if defined(OS_ANDROID)
@@ -143,11 +143,11 @@ diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h
 +GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer;
  GPU_EXPORT extern const base::Feature kUseGles2ForOopR;
  GPU_EXPORT extern const base::Feature kAndroidSurfaceControl;
- GPU_EXPORT extern const base::Feature kAImageReader;
+ GPU_EXPORT extern const base::Feature kWebViewSurfaceControl;
 diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
 --- a/gpu/config/gpu_util.cc
 +++ b/gpu/config/gpu_util.cc
-@@ -111,6 +111,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus(
+@@ -112,6 +112,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus(
  #if !defined(OS_ANDROID)
    return kGpuFeatureStatusDisabled;
  #else
@@ -157,7 +157,7 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
    if (!gpu_preferences.enable_android_surface_control)
      return kGpuFeatureStatusDisabled;
  
-@@ -316,6 +319,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
+@@ -317,6 +320,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
      gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] =
          kGpuFeatureStatusBlocklisted;
    }
@@ -178,12 +178,12 @@ diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list
  disable_accelerated_av1_decode
 +disable_aimagereader
  disable_accelerated_av1_decode_d3d11
+ disable_accelerated_h264_encode
  disable_accelerated_vp8_decode
- disable_accelerated_vp8_encode
 diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
 --- a/gpu/ipc/service/gpu_init.cc
 +++ b/gpu/ipc/service/gpu_init.cc
-@@ -477,6 +477,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
+@@ -488,6 +488,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
      }
    }
  
@@ -206,7 +206,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_
  #include "base/android/scoped_hardware_buffer_fence_sync.h"
  #include "base/bind.h"
  #include "base/feature_list.h"
-@@ -48,7 +49,15 @@ std::unique_ptr<ui::ScopedMakeCurrent> MakeCurrent(
+@@ -49,7 +50,15 @@ std::unique_ptr<ui::ScopedMakeCurrent> MakeCurrent(
  }
  
  TextureOwner::Mode GetTextureOwnerMode() {
@@ -226,7 +226,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
-@@ -604,6 +604,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
+@@ -620,6 +620,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
  const base::Feature kMediaDrmPreprovisioningAtStartup{
      "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT};
  
@@ -240,7 +240,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
-@@ -206,6 +206,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
+@@ -210,6 +210,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
  MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;
  MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning;
  MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup;

+ 27 - 27
build/patches/AV1-codec-support.patch

@@ -33,7 +33,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
        include_dirs = libaom_include_dirs
      }
  
-@@ -184,7 +184,7 @@ if (enable_libaom) {
+@@ -192,7 +192,7 @@ if (enable_libaom) {
        configs += [ "//build/config/compiler:no_chromium_code" ]
        if (current_cpu == "arm") {
          configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
@@ -42,7 +42,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
        }
        configs += [ ":libaom_config" ]
  
-@@ -233,6 +233,8 @@ if (enable_libaom) {
+@@ -242,6 +242,8 @@ if (enable_libaom) {
      if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
          cpu_arch_full == "arm-neon-cpu-detect") {
        deps += [ ":libaom_intrinsics_neon" ]
@@ -54,7 +54,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
 diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
 --- a/third_party/libaom/libaom_srcs.gni
 +++ b/third_party/libaom/libaom_srcs.gni
-@@ -616,6 +616,11 @@ aom_mem_sources = [
+@@ -629,6 +629,11 @@ aom_mem_sources = [
  
  aom_ports_asm_x86 = [ "//third_party/libaom/source/libaom/aom_ports/emms.asm" ]
  
@@ -69,7 +69,7 @@ diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs
 diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
-@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0
+@@ -46,7 +46,7 @@ CONFIG_NN_V2 equ 0
  CONFIG_NORMAL_TILE_MODE equ 1
  CONFIG_OPTICAL_FLOW_API equ 0
  CONFIG_OS_SUPPORT equ 1
@@ -77,11 +77,11 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/a
 +CONFIG_PIC equ 1
  CONFIG_RD_DEBUG equ 0
  CONFIG_REALTIME_ONLY equ 1
- CONFIG_RUNTIME_CPU_DETECT equ 1
+ CONFIG_RT_ML_PARTITIONING equ 0
 diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -89,11 +89,11 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/a
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 1
+ #define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
-@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0
+@@ -46,7 +46,7 @@ CONFIG_NN_V2 equ 0
  CONFIG_NORMAL_TILE_MODE equ 1
  CONFIG_OPTICAL_FLOW_API equ 0
  CONFIG_OS_SUPPORT equ 1
@@ -101,11 +101,11 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.a
 +CONFIG_PIC equ 1
  CONFIG_RD_DEBUG equ 0
  CONFIG_REALTIME_ONLY equ 1
- CONFIG_RUNTIME_CPU_DETECT equ 0
+ CONFIG_RT_ML_PARTITIONING equ 0
 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -113,11 +113,11 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 0
+ #define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/arm/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
-@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0
+@@ -46,7 +46,7 @@ CONFIG_NN_V2 equ 0
  CONFIG_NORMAL_TILE_MODE equ 1
  CONFIG_OPTICAL_FLOW_API equ 0
  CONFIG_OS_SUPPORT equ 1
@@ -125,11 +125,11 @@ diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/
 +CONFIG_PIC equ 1
  CONFIG_RD_DEBUG equ 0
  CONFIG_REALTIME_ONLY equ 1
- CONFIG_RUNTIME_CPU_DETECT equ 0
+ CONFIG_RT_ML_PARTITIONING equ 0
 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/third_party/libaom/source/config/linux/arm/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/arm/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/arm/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -137,11 +137,11 @@ diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/th
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 0
+ #define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
-@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0
+@@ -46,7 +46,7 @@ CONFIG_NN_V2 equ 0
  CONFIG_NORMAL_TILE_MODE equ 1
  CONFIG_OPTICAL_FLOW_API equ 0
  CONFIG_OS_SUPPORT equ 1
@@ -149,11 +149,11 @@ diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
 +CONFIG_PIC equ 1
  CONFIG_RD_DEBUG equ 0
  CONFIG_REALTIME_ONLY equ 1
- CONFIG_RUNTIME_CPU_DETECT equ 0
+ CONFIG_RT_ML_PARTITIONING equ 0
 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -161,11 +161,11 @@ diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 0
+ #define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.asm b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/generic/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
-@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0
+@@ -46,7 +46,7 @@ CONFIG_NN_V2 equ 0
  CONFIG_NORMAL_TILE_MODE equ 1
  CONFIG_OPTICAL_FLOW_API equ 0
  CONFIG_OS_SUPPORT equ 1
@@ -173,11 +173,11 @@ diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.as
 +CONFIG_PIC equ 1
  CONFIG_RD_DEBUG equ 0
  CONFIG_REALTIME_ONLY equ 1
- CONFIG_RUNTIME_CPU_DETECT equ 1
+ CONFIG_RT_ML_PARTITIONING equ 0
 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h b/third_party/libaom/source/config/linux/generic/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/generic/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/generic/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -185,11 +185,11 @@ diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 1
+ #define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
 --- a/third_party/libaom/source/config/linux/x64/config/aom_config.asm
 +++ b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
-@@ -35,7 +35,7 @@
+@@ -36,7 +36,7 @@
  %define CONFIG_NORMAL_TILE_MODE 1
  %define CONFIG_OPTICAL_FLOW_API 0
  %define CONFIG_OS_SUPPORT 1
@@ -197,11 +197,11 @@ diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/
 +%define CONFIG_PIC 1
  %define CONFIG_RD_DEBUG 0
  %define CONFIG_REALTIME_ONLY 1
- %define CONFIG_RUNTIME_CPU_DETECT 1
+ %define CONFIG_RT_ML_PARTITIONING 0
 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/third_party/libaom/source/config/linux/x64/config/aom_config.h
 --- a/third_party/libaom/source/config/linux/x64/config/aom_config.h
 +++ b/third_party/libaom/source/config/linux/x64/config/aom_config.h
-@@ -47,7 +47,7 @@
+@@ -48,7 +48,7 @@
  #define CONFIG_NORMAL_TILE_MODE 1
  #define CONFIG_OPTICAL_FLOW_API 0
  #define CONFIG_OS_SUPPORT 1
@@ -209,7 +209,7 @@ diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/th
 +#define CONFIG_PIC 1
  #define CONFIG_RD_DEBUG 0
  #define CONFIG_REALTIME_ONLY 1
- #define CONFIG_RUNTIME_CPU_DETECT 1
+ #define CONFIG_RT_ML_PARTITIONING 0
 -- 
 2.17.1
 

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

@@ -17,8 +17,8 @@ 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
-@@ -3040,6 +3040,12 @@ const FeatureEntry kFeatureEntries[] = {
-      FEATURE_VALUE_TYPE(ash::features::kSystemTrayMicGainSetting)},
+@@ -3100,6 +3100,12 @@ const FeatureEntry kFeatureEntries[] = {
+      FEATURE_VALUE_TYPE(media::kDeprecateLowUsageCodecs)},
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
 +#if 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
-@@ -533,6 +533,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] =
+@@ -589,6 +589,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
-@@ -329,6 +329,9 @@ extern const char kEnableAutofillAccountWalletStorageDescription[];
+@@ -362,6 +362,9 @@ extern const char kEnableAutofillAddressSavePromptDescription[];
  
  extern const char kEnableAutofillCreditCardAblationExperimentDisplayName[];
  extern const char kEnableAutofillCreditCardAblationExperimentDescription[];
@@ -75,7 +75,7 @@ diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmp
 diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
 --- a/chrome/common/chrome_switches.cc
 +++ b/chrome/common/chrome_switches.cc
-@@ -334,6 +334,9 @@ const char kHomePage[]                      = "homepage";
+@@ -326,6 +326,9 @@ const char kHomePage[]                      = "homepage";
  // Causes the browser to launch directly in incognito mode.
  const char kIncognito[]                     = "incognito";
  
@@ -88,7 +88,7 @@ diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
 diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
 --- a/chrome/common/chrome_switches.h
 +++ b/chrome/common/chrome_switches.h
-@@ -113,6 +113,7 @@ extern const char kForceFirstRun[];
+@@ -111,6 +111,7 @@ extern const char kForceFirstRun[];
  extern const char kForceStackedTabStripLayout[];
  extern const char kHomePage[];
  extern const char kIncognito[];

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

@@ -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
-@@ -51,12 +51,15 @@ public class PrivacySettings
+@@ -54,12 +54,15 @@ public class PrivacySettings
      private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
      public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
      private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
@@ -102,7 +102,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
-@@ -136,6 +136,12 @@
+@@ -162,6 +162,12 @@
          <include name="IDR_VIDEO_PLAYER_JS" file="resources\video_tutorials\video_player.js" type="BINDATA" />
        </if>
  
@@ -182,16 +182,16 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro
 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
-@@ -410,6 +410,8 @@
- #include "chrome/browser/media/feeds/media_feeds_service.h"
- #endif
+@@ -156,6 +156,8 @@
+ #include "printing/buildflags/buildflags.h"
+ #include "rlz/buildflags/buildflags.h"
  
 +#include "chrome/browser/net/proxy_service_factory.h"
 +
- namespace {
- 
- #if BUILDFLAG(IS_CHROMEOS_ASH)
-@@ -697,6 +699,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
+ #if BUILDFLAG(ENABLE_BACKGROUND_MODE)
+ #include "chrome/browser/background/background_mode_manager.h"
+ #endif
+@@ -746,6 +748,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
    PluginsResourceService::RegisterPrefs(registry);
  #endif
  
@@ -634,7 +634,7 @@ new file mode 100644
 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
-@@ -254,6 +254,8 @@ static_library("ui") {
+@@ -256,6 +256,8 @@ static_library("ui") {
      "webui/metrics_handler.h",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.h",
@@ -646,15 +646,15 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
 diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
-@@ -62,6 +62,7 @@
+@@ -53,6 +53,7 @@
  #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
  #include "chrome/browser/ui/webui/policy/policy_ui.h"
  #include "chrome/browser/ui/webui/predictors/predictors_ui.h"
 +#include "chrome/browser/ui/webui/proxy_config_ui.h"
  #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
- #include "chrome/browser/ui/webui/settings/settings_ui.h"
- #include "chrome/browser/ui/webui/settings/settings_utils.h"
-@@ -545,6 +546,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+ #include "chrome/browser/ui/webui/signin_internals_ui.h"
+ #include "chrome/browser/ui/webui/sync_internals/sync_internals_ui.h"
+@@ -558,6 +559,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
@@ -1135,7 +1135,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
  const char kChromeUIChromeURLsHost[] = "chrome-urls";
  const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/";
  const char kChromeUIComponentsHost[] = "components";
-@@ -325,6 +327,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
+@@ -327,6 +329,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
        kChromeUIMobileSetupHost,
        kChromeUIMultiDeviceSetupHost,
        kChromeUINetworkHost,
@@ -1143,7 +1143,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
        kChromeUIOobeHost,
        kChromeUIOSCreditsHost,
        kChromeUIOSSettingsHost,
-@@ -523,6 +526,7 @@ const char* const kChromeHostURLs[] = {
+@@ -539,6 +542,7 @@ const char* const kChromeHostURLs[] = {
  #if !defined(OS_ANDROID)
  #if !BUILDFLAG(IS_CHROMEOS_ASH)
      kChromeUIAppLauncherPageHost,
@@ -1154,7 +1154,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
-@@ -117,6 +117,8 @@ extern const char kChromeUIMemoryInternalsHost[];
+@@ -120,6 +120,8 @@ extern const char kChromeUIMemoryInternalsHost[];
  extern const char kChromeUINTPTilesInternalsHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINetExportHost[];

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

@@ -147,7 +147,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;
-@@ -1633,8 +1634,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1651,8 +1652,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          Bundle savedInstanceState = getSavedInstanceState();
  
          // We determine the model as soon as possible so every systems get initialized coherently.
@@ -162,7 +162,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
-@@ -88,6 +88,7 @@ import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial;
+@@ -91,6 +91,7 @@ import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial;
  import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
  import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.ContextualSearchTabPromotionDelegate;
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
@@ -170,20 +170,20 @@ 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;
-@@ -1590,6 +1591,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1720,6 +1721,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }
 +        if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
-+            return mIncognitoTabCreator;
++            incognito = true;
 +        }
-         return incognito ? mIncognitoTabCreator : mRegularTabCreator;
+         return mTabCreatorManagerSupplier.get().getTabCreator(incognito);
      }
  
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
-@@ -539,6 +539,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -557,6 +557,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
      }
  
      private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
@@ -199,7 +199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
-@@ -29,7 +29,9 @@ import androidx.annotation.VisibleForTesting;
+@@ -30,7 +30,9 @@ import org.chromium.base.Callback;
  import org.chromium.base.ContextUtils;
  import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.supplier.Supplier;
@@ -209,7 +209,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.ChromeContextMenuPopulator.ContextMenuUma.Action;
-@@ -372,7 +374,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -344,7 +346,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
              if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl())
                      && UrlUtilities.isAcceptedScheme(mParams.getUrl().getSpec())) {
                  if (mMode == ContextMenuMode.NORMAL) {
@@ -288,7 +288,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
-@@ -39,6 +39,7 @@ import org.chromium.ui.text.SpanApplier;
+@@ -42,6 +42,7 @@ import org.chromium.ui.text.SpanApplier;
   */
  public class PrivacySettings
          extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
@@ -296,7 +296,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_SECURE_DNS = "secure_dns";
-@@ -46,6 +47,7 @@ public class PrivacySettings
+@@ -49,6 +50,7 @@ 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[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
@@ -307,7 +307,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
-@@ -40,6 +40,10 @@ import org.chromium.ui.base.PageTransition;
+@@ -41,6 +41,10 @@ import org.chromium.ui.base.PageTransition;
  import org.chromium.ui.base.WindowAndroid;
  import org.chromium.url.GURL;
  
@@ -318,7 +318,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  /**
   * This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
   */
-@@ -61,6 +65,7 @@ public class ChromeTabCreator extends TabCreator {
+@@ -69,6 +73,7 @@ public class ChromeTabCreator extends TabCreator {
      private final ChromeActivity mActivity;
      private final StartupTabPreloader mStartupTabPreloader;
      private final boolean mIncognito;
@@ -326,7 +326,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  
      private WindowAndroid mNativeWindow;
      private TabModel mTabModel;
-@@ -79,6 +84,10 @@ public class ChromeTabCreator extends TabCreator {
+@@ -87,6 +92,10 @@ public class ChromeTabCreator extends TabCreator {
          mNativeWindow = nativeWindow;
          mTabDelegateFactorySupplier = tabDelegateFactory;
          mIncognito = incognito;
@@ -337,7 +337,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          mOverviewNTPCreator = overviewNTPCreator;
          mAsyncTabParamsManager = asyncTabParamsManager;
      }
-@@ -232,6 +241,8 @@ public class ChromeTabCreator extends TabCreator {
+@@ -247,6 +256,8 @@ public class ChromeTabCreator extends TabCreator {
              if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) {
                  creationState = TabCreationState.LIVE_IN_BACKGROUND;
              }
@@ -346,7 +346,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
              mTabModel.addTab(tab, position, type, creationState);
              return tab;
          } finally {
-@@ -266,6 +277,8 @@ public class ChromeTabCreator extends TabCreator {
+@@ -281,6 +292,8 @@ public class ChromeTabCreator extends TabCreator {
          @TabCreationState
          int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND
                                               : TabCreationState.LIVE_IN_BACKGROUND;
@@ -355,7 +355,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          mTabModel.addTab(tab, position, type, creationState);
          return true;
      }
-@@ -309,7 +322,6 @@ public class ChromeTabCreator extends TabCreator {
+@@ -324,7 +337,6 @@ public class ChromeTabCreator extends TabCreator {
      // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome.
      public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId,
              boolean forceNewTab, Intent intent, long intentTimestamp) {
@@ -363,7 +363,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
  
          if (forceNewTab && !isLaunchedFromChrome) {
-@@ -423,6 +435,8 @@ public class ChromeTabCreator extends TabCreator {
+@@ -438,6 +450,8 @@ public class ChromeTabCreator extends TabCreator {
                            .setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData)
                            .build();
          }
@@ -383,7 +383,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer
  import org.chromium.base.Log;
  import org.chromium.base.ObserverList;
  import org.chromium.base.StreamUtil;
-@@ -51,6 +52,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities;
+@@ -52,6 +53,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities;
  import org.chromium.content_public.browser.LoadUrlParams;
  import org.chromium.content_public.browser.UiThreadTaskTraits;
  
@@ -392,7 +392,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;
-@@ -615,6 +618,13 @@ public class TabPersistentStore extends TabPersister {
+@@ -646,6 +649,13 @@ public class TabPersistentStore {
                  }
              }
          }
@@ -454,7 +454,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
-@@ -395,7 +395,7 @@ const base::Feature kCCTIncognito{"CCTIncognito",
+@@ -400,7 +400,7 @@ const base::Feature kCCTIncognito{"CCTIncognito",
                                    base::FEATURE_ENABLED_BY_DEFAULT};
  
  const base::Feature kCCTIncognitoAvailableToThirdParty{
@@ -466,7 +466,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
-@@ -856,6 +856,13 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -893,6 +893,13 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_CLEAR_BROWSING_HISTORY_SUMMARY" desc="A text for the basic tab explaining browsing history.">
          Clears history and autocompletions in the address bar.
        </message>

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

@@ -18,7 +18,7 @@ Completely remove contacts picker permission from the file dialog
  .../browser/bookmarks/BookmarkManager.java    |  22 ++
  .../browser/bookmarks/BookmarkPage.java       |   9 +-
  .../native_page/NativePageFactory.java        |   3 +-
- chrome/browser/BUILD.gn                       |   6 +-
+ chrome/browser/BUILD.gn                       |   2 +
  chrome/browser/about_flags.cc                 |   6 +
  .../android/bookmarks/bookmark_bridge.cc      | 284 ++++++++++++++++++
  .../android/bookmarks/bookmark_bridge.h       |  28 +-
@@ -27,7 +27,7 @@ Completely remove contacts picker permission from the file dialog
  .../DownloadLocationDialogCoordinator.java    |  10 +-
  chrome/browser/flag_descriptions.cc           |   5 +
  chrome/browser/flag_descriptions.h            |   3 +
- .../flags/android/chrome_feature_list.cc      |   4 +
+ .../flags/android/chrome_feature_list.cc      |   5 +
  .../flags/android/chrome_feature_list.h       |   1 +
  .../browser/flags/ChromeFeatureList.java      |   1 +
  chrome/browser/importer/profile_writer.cc     |  12 +
@@ -43,7 +43,7 @@ Completely remove contacts picker permission from the file dialog
  ui/shell_dialogs/select_file_dialog.h         |   2 +
  .../select_file_dialog_android.cc             |   6 +
  ui/shell_dialogs/select_file_dialog_android.h |   2 +
- 37 files changed, 876 insertions(+), 23 deletions(-)
+ 37 files changed, 875 insertions(+), 21 deletions(-)
 
 diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc
 --- a/base/android/content_uri_utils.cc
@@ -349,7 +349,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +    public void exportBookmarks(WindowAndroid window, ModalDialogManager modalDialogManager) {
 +        assert mIsNativeBookmarkModelLoaded;
 +        if (ChromeFeatureList.isEnabled(ChromeFeatureList.BOOKMARKS_EXPORT_USESAF) ||
-+            Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) 
++            Build.VERSION.SDK_INT > Build.VERSION_CODES.Q)
 +            exportBookmarksImplUseSaf(window);
 +        else
 +            exportBookmarksImplUseFile(window, modalDialogManager);
@@ -540,7 +540,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      /**
       * Synchronously gets a list of bookmarks that match the specified search query.
       * @param query Keyword used for searching bookmarks.
-@@ -1016,6 +1257,39 @@ public class BookmarkBridge {
+@@ -1021,6 +1262,39 @@ public class BookmarkBridge {
          depthList.add(depth);
      }
  
@@ -580,7 +580,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) {
          List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
          for (int i = 0; i < left.length; i++) {
-@@ -1083,6 +1357,9 @@ public class BookmarkBridge {
+@@ -1088,6 +1362,9 @@ public class BookmarkBridge {
          int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type);
          void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type,
                  List<BookmarkId> bookmarksList);
@@ -696,7 +696,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/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
-@@ -95,7 +95,8 @@ public class NativePageFactory {
+@@ -96,7 +96,8 @@ public class NativePageFactory {
  
          protected NativePage buildBookmarksPage(Tab tab) {
              return new BookmarkPage(mActivity.getComponentName(), mActivity.getSnackbarManager(),
@@ -709,16 +709,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
-@@ -203,6 +203,8 @@ static_library("browser") {
-     "bitmap_fetcher/bitmap_fetcher_service.h",
-     "bitmap_fetcher/bitmap_fetcher_service_factory.cc",
-     "bitmap_fetcher/bitmap_fetcher_service_factory.h",
-+    "bookmarks/bookmark_html_writer.cc",
-+    "bookmarks/bookmark_html_writer.h",
-     "bluetooth/bluetooth_chooser_context.cc",
-     "bluetooth/bluetooth_chooser_context.h",
-     "bluetooth/bluetooth_chooser_context_factory.cc",
-@@ -1895,6 +1897,8 @@ static_library("browser") {
+@@ -1876,6 +1876,8 @@ static_library("browser") {
      "webapps/chrome_webapps_client.h",
      "window_placement/window_placement_permission_context.cc",
      "window_placement/window_placement_permission_context.h",
@@ -727,21 +718,12 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
    ]
  
    configs += [
-@@ -3439,8 +3443,6 @@ static_library("browser") {
-       "badging/badge_manager_factory.h",
-       "banners/app_banner_manager_desktop.cc",
-       "banners/app_banner_manager_desktop.h",
--      "bookmarks/bookmark_html_writer.cc",
--      "bookmarks/bookmark_html_writer.h",
-       "browsing_data/access_context_audit_database.cc",
-       "browsing_data/access_context_audit_database.h",
-       "browsing_data/access_context_audit_service.cc",
 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
-@@ -7115,6 +7115,12 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -7303,6 +7303,12 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(
-          password_manager::features::kSyncingCompromisedCredentials)},
+          optimization_guide::features::kOptimizationGuideModelDownloading)},
  
 +    {"export-bookmarks-use-saf",
 +     flag_descriptions::kBookmarksExportUseSafName,
@@ -1257,7 +1239,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
-@@ -4988,6 +4988,11 @@ const char kWebrtcPipeWireCapturerDescription[] =
+@@ -5179,6 +5179,11 @@ const char kWebrtcPipeWireCapturerDescription[] =
      "capturing the desktop content on the Wayland display server.";
  #endif  // #if defined(WEBRTC_USE_PIPEWIRE)
  
@@ -1272,7 +1254,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
-@@ -2928,6 +2928,9 @@ extern const char kWebrtcPipeWireCapturerName[];
+@@ -3051,6 +3051,9 @@ extern const char kWebrtcPipeWireCapturerName[];
  extern const char kWebrtcPipeWireCapturerDescription[];
  #endif  // #if defined(WEBRTC_USE_PIPEWIRE)
  
@@ -1285,20 +1267,21 @@ 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
-@@ -138,6 +138,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
-     &kAssistantIntentPageUrl,
+@@ -140,6 +140,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
      &kAssistantIntentTranslateInfo,
+     &kAppLaunchpad,
      &kBentoOffline,
 +    &kBookmarksExportUseSaf,
      &kCastDeviceFilter,
      &kCloseTabSuggestions,
      &kCriticalPersistedTabData,
-@@ -724,6 +725,9 @@ const base::Feature kVoiceButtonInTopToolbar{"VoiceButtonInTopToolbar",
+@@ -742,6 +743,10 @@ const base::Feature kVoiceButtonInTopToolbar{"VoiceButtonInTopToolbar",
  const base::Feature kVrBrowsingFeedback{"VrBrowsingFeedback",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
  
++// disabled by default because of an issue on Android 6.0
 +const base::Feature kBookmarksExportUseSaf{"BookmarksExportUseSaf",
-+                                        base::FEATURE_ENABLED_BY_DEFAULT};
++                                        base::FEATURE_DISABLED_BY_DEFAULT};
 +
  static jboolean JNI_ChromeFeatureList_IsEnabled(
      JNIEnv* env,
@@ -1306,7 +1289,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
-@@ -151,6 +151,7 @@ extern const base::Feature kVoiceSearchAudioCapturePolicy;
+@@ -154,6 +154,7 @@ extern const base::Feature kVoiceSearchAudioCapturePolicy;
  extern const base::Feature kVoiceButtonInTopToolbar;
  extern const base::Feature kVrBrowsingFeedback;
  extern const base::Feature kPrefetchNotificationSchedulingIntegration;
@@ -1317,7 +1300,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
-@@ -481,6 +481,7 @@ public abstract class ChromeFeatureList {
+@@ -503,6 +503,7 @@ public abstract class ChromeFeatureList {
      public static final String WEB_AUTH_PHONE_SUPPORT = "WebAuthenticationPhoneSupport";
      public static final String WEB_FEED = "WebFeed";
      public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting";
@@ -1386,7 +1369,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/
 diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
 --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
 +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
-@@ -90,6 +90,8 @@ public final class ChromePreferenceKeys {
+@@ -91,6 +91,8 @@ public final class ChromePreferenceKeys {
      public static final String BOOKMARKS_LAST_USED_URL = "enhanced_bookmark_last_used_url";
      public static final String BOOKMARKS_LAST_USED_PARENT =
              "enhanced_bookmark_last_used_parent_folder";
@@ -1395,7 +1378,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
  
      /**
       * Whether Chrome is set as the default browser.
-@@ -845,6 +847,7 @@ public final class ChromePreferenceKeys {
+@@ -896,6 +898,7 @@ public final class ChromePreferenceKeys {
                  AUTOFILL_ASSISTANT_NUMBER_OF_LITE_SCRIPTS_CANCELED,
                  AUTOFILL_ASSISTANT_PROACTIVE_HELP,
                  APPLICATION_OVERRIDE_LANGUAGE,
@@ -1442,12 +1425,12 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
 +      "importer/imported_bookmark_entry.cc",
 +      "importer/imported_bookmark_entry.h",
      ]
+     deps += [ "//components/embedder_support/android/common:url_constants" ]
    } else {
-     # Non-Android.
 diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
 --- a/chrome/utility/BUILD.gn
 +++ b/chrome/utility/BUILD.gn
-@@ -73,8 +73,6 @@ static_library("utility") {
+@@ -79,8 +79,6 @@ static_library("utility") {
  
    if (!is_android) {
      sources += [
@@ -1456,7 +1439,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",
-@@ -191,6 +189,11 @@ static_library("utility") {
+@@ -180,6 +178,11 @@ static_library("utility") {
      }
    }
  

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

@@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
  /**
   * Dispatches incoming intents to the appropriate activity based on the current configuration and
   * Intent fired.
-@@ -269,6 +271,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
+@@ -268,6 +270,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
       */
      public static boolean isCustomTabIntent(Intent intent) {
          if (intent == null) return false;
@@ -48,7 +48,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
 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
-@@ -46,10 +46,12 @@ public class PrivacySettings
+@@ -49,10 +49,12 @@ 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";
@@ -62,7 +62,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
-@@ -105,6 +107,10 @@ public class PrivacySettings
+@@ -120,6 +122,10 @@ public class PrivacySettings
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
                      (boolean) newValue);
@@ -73,7 +73,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          }
  
          return true;
-@@ -128,6 +134,11 @@ public class PrivacySettings
+@@ -143,6 +149,11 @@ public class PrivacySettings
              canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
          }
  
@@ -88,7 +88,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
-@@ -3986,6 +3986,13 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
+@@ -4015,6 +4015,13 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
        <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>

+ 18 - 17
build/patches/Add-exit-menu-item.patch

@@ -6,16 +6,16 @@ Corrected Exit functionality
 ---
  chrome/android/java/res/menu/main_menu.xml                  | 6 ++++++
  chrome/android/java/res/menu/main_menu_regroup.xml          | 3 +++
- .../org/chromium/chrome/browser/ChromeTabbedActivity.java   | 3 +++
+ .../org/chromium/chrome/browser/ChromeTabbedActivity.java   | 4 ++++
  .../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++
  .../chrome/browser/init/ChromeLifetimeController.java       | 6 +++++-
  .../browser/ui/android/strings/android_chrome_strings.grd   | 3 +++
- 6 files changed, 26 insertions(+), 1 deletion(-)
+ 6 files changed, 27 insertions(+), 1 deletion(-)
 
 diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
 --- a/chrome/android/java/res/menu/main_menu.xml
 +++ b/chrome/android/java/res/menu/main_menu.xml
-@@ -119,6 +119,9 @@
+@@ -122,6 +122,9 @@
              android:icon="@drawable/vr_headset" />
          <item android:id="@+id/managed_by_menu_id"
              android:title="@string/managed" />
@@ -25,7 +25,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
      </group>
  
      <!-- Items shown only in the tab switcher -->
-@@ -145,6 +148,9 @@
+@@ -148,6 +151,9 @@
          <item android:id="@id/preferences_id"
              android:title="@string/menu_settings"
              android:icon="@drawable/settings_cog" />
@@ -38,7 +38,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
 diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml
 --- a/chrome/android/java/res/menu/main_menu_regroup.xml
 +++ b/chrome/android/java/res/menu/main_menu_regroup.xml
-@@ -181,6 +181,9 @@
+@@ -184,6 +184,9 @@
              android:icon="@drawable/vr_headset" />
          <item android:id="@+id/managed_by_menu_id"
              android:title="@string/managed" />
@@ -51,15 +51,16 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
 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
-@@ -58,6 +58,7 @@ import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
- import org.chromium.chrome.browser.IntentHandler.TabOpenType;
- import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
- import org.chromium.chrome.browser.app.ChromeActivity;
+@@ -189,6 +189,8 @@ import java.lang.annotation.RetentionPolicy;
+ import java.util.List;
+ import java.util.Locale;
+ 
 +import org.chromium.chrome.browser.ApplicationLifetime;
- import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
- import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier;
- import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
-@@ -1821,6 +1822,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
++
+ /**
+  * 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.
+@@ -1852,6 +1854,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          } else if (id == R.id.close_tab) {
              getCurrentTabModel().closeTab(currentTab, true, false, true);
              RecordUserAction.record("MobileTabClosed");
@@ -71,7 +72,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
-@@ -56,6 +56,7 @@ import org.chromium.base.supplier.OneshotSupplierImpl;
+@@ -57,6 +57,7 @@ import org.chromium.base.supplier.UnownedUserDataSupplier;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ActivityTabProvider;
  import org.chromium.chrome.browser.AppHooks;
@@ -79,8 +80,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.ChromeActivitySessionTracker;
  import org.chromium.chrome.browser.ChromeApplication;
  import org.chromium.chrome.browser.ChromeWindow;
-@@ -1978,6 +1979,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
-             RecordUserAction.record("MobileMenuSettings");
+@@ -2129,6 +2130,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+             return true;
          }
  
 +        if (id == R.id.exit_id) {
@@ -110,7 +111,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
-@@ -2916,6 +2916,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
+@@ -2954,6 +2954,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
        <message name="IDS_MENU_SETTINGS" desc="Menu item for opening browser settings. [CHAR-LIMIT=27]">
          Settings
        </message>

+ 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
-@@ -4332,6 +4332,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4471,6 +4471,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
-@@ -913,6 +913,10 @@ const char kDisableKeepaliveFetchDescription[] =
+@@ -975,6 +975,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
-@@ -518,6 +518,9 @@ extern const char kDiagnosticsAppDescription[];
+@@ -557,6 +557,9 @@ extern const char kDiagnosticsAppDescription[];
  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
-@@ -150,6 +150,10 @@ const base::FeatureParam<std::string>
+@@ -149,6 +149,10 @@ const base::FeatureParam<std::string>
  const base::Feature kDisableKeepaliveFetch{"DisableKeepaliveFetch",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -91,8 +91,8 @@ diff --git a/services/network/public/cpp/features.h b/services/network/public/cp
 +extern const base::Feature kEnableSaveDataHeader;
 +COMPONENT_EXPORT(NETWORK_CPP)
  extern const base::Feature kRequestInitiatorSiteLockEnfocement;
+ 
  COMPONENT_EXPORT(NETWORK_CPP)
- extern const base::Feature kCertVerifierService;
 -- 
 2.17.1
 

+ 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
-@@ -816,6 +816,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+@@ -865,6 +865,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 ==
-@@ -3656,6 +3661,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3750,6 +3755,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
-@@ -1404,6 +1404,10 @@ const char kMediaHistoryDescription[] =
+@@ -1464,6 +1464,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
-@@ -832,6 +832,9 @@ extern const char kLogJsConsoleMessagesDescription[];
+@@ -868,6 +868,9 @@ extern const char kLogJsConsoleMessagesDescription[];
  extern const char kMediaHistoryName[];
  extern const char kMediaHistoryDescription[];
  

+ 5 - 5
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
-@@ -2635,6 +2635,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2666,6 +2666,10 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kWebRtcRemoteEventLogName,
       flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop,
       FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)},
@@ -27,9 +27,9 @@ 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
-@@ -972,6 +972,11 @@ const char kEnableLoginDetectionName[] = "Enable login detection";
- const char kEnableLoginDetectionDescription[] =
-     "Allow user sign-in to be detected based on heuristics.";
+@@ -1032,6 +1032,11 @@ const char kEnablePciguardUiDescription[] =
+     "Enable toggling Pciguard settings through the Settings App. By default, "
+     "this flag is enabled.";
  
 +const char kResumeBackgroundVideoName[] = "Resume background video.";
 +const char kResumeBackgroundVideoDescription[] =
@@ -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
-@@ -558,6 +558,9 @@ extern const char kEnablePortalsDescription[];
+@@ -594,6 +594,9 @@ extern const char kEnablePortalsDescription[];
  extern const char kEnablePortalsCrossOriginName[];
  extern const char kEnablePortalsCrossOriginDescription[];
  

+ 4 - 4
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
-@@ -4604,6 +4604,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -4751,6 +4751,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
-@@ -2805,6 +2805,10 @@ const char kContextualSearchRankerQueryDescription[] =
+@@ -2922,6 +2922,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
-@@ -625,6 +625,9 @@ extern const char kEnableWasmThreadsName[];
+@@ -664,6 +664,9 @@ extern const char kEnableWasmThreadsName[];
  extern const char kEnableWasmThreadsDescription[];
  
  extern const char kEnableWasmTieringName[];
@@ -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"
-@@ -3369,8 +3370,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
+@@ -3326,8 +3327,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
-@@ -2588,6 +2588,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2619,6 +2619,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kAccelerated2dCanvasName,
       flag_descriptions::kAccelerated2dCanvasDescription, kOsAll,
       SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)},
@@ -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
-@@ -511,6 +511,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement";
+@@ -562,6 +562,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
-@@ -317,6 +317,9 @@ extern const char kDisallowDocWrittenScriptsUiDescription[];
+@@ -347,6 +347,9 @@ extern const char kDisallowDocWrittenScriptsUiDescription[];
  
  extern const char kEnableAccessibilityObjectModelName[];
  extern const char kEnableAccessibilityObjectModelDescription[];

+ 14 - 14
build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch

@@ -20,7 +20,7 @@ legacy acceleration events.
 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
-@@ -2799,6 +2799,12 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2856,6 +2856,12 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName,
       flag_descriptions::kGpuRasterizationDescription, kOsAll,
       MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)},
@@ -36,7 +36,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
-@@ -755,6 +755,14 @@ const char kWinrtSensorsImplementationDescription[] =
+@@ -821,6 +821,14 @@ const char kWinrtSensorsImplementationDescription[] =
      "Enables usage of the Windows.Devices.Sensors WinRT APIs on Windows for "
      "sensors";
  
@@ -54,7 +54,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
-@@ -455,6 +455,12 @@ extern const char kWinrtGeolocationImplementationDescription[];
+@@ -494,6 +494,12 @@ extern const char kWinrtGeolocationImplementationDescription[];
  extern const char kWinrtSensorsImplementationName[];
  extern const char kWinrtSensorsImplementationDescription[];
  
@@ -83,7 +83,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_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
-@@ -837,6 +837,16 @@ const base::Feature kWebOtpBackendAuto{"WebOtpBackendAuto",
+@@ -886,6 +886,16 @@ const base::Feature kWebOtpBackendAuto{"WebOtpBackendAuto",
  // The JavaScript API for payments on the web.
  const base::Feature kWebPayments{"WebPayments",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
@@ -103,7 +103,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c
 diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
 --- a/content/public/common/content_features.h
 +++ b/content/public/common/content_features.h
-@@ -197,6 +197,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrArModule;
+@@ -209,6 +209,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrHandInput;
  CONTENT_EXPORT extern const base::Feature kWebXrHitTest;
  CONTENT_EXPORT extern const base::Feature kWebXrIncubations;
  
@@ -116,14 +116,14 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa
 --- a/third_party/blink/public/platform/web_runtime_features.h
 +++ b/third_party/blink/public/platform/web_runtime_features.h
 @@ -97,6 +97,8 @@ class WebRuntimeFeatures {
-   BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool);
-   BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool);
-   BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(bool);
+   BLINK_PLATFORM_EXPORT static void EnableCompositeRelativeKeyframes(
+       bool enable);
+   BLINK_PLATFORM_EXPORT static void EnableCookieDeprecationMessages(bool);
 +  BLINK_PLATFORM_EXPORT static void EnableDeviceMotion(bool);
 +  BLINK_PLATFORM_EXPORT static void EnableDeviceOrientation(bool);
-   BLINK_PLATFORM_EXPORT static void EnableKeyboardFocusableScrollers(bool);
-   BLINK_PLATFORM_EXPORT static void EnableDatabase(bool);
-   BLINK_PLATFORM_EXPORT static void EnableDecodeJpeg420ImagesToYUV(bool);
+   BLINK_PLATFORM_EXPORT static void EnableCookiesWithoutSameSiteMustBeSecure(
+       bool);
+   BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool);
 diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc
 --- a/third_party/blink/renderer/modules/modules_initializer.cc
 +++ b/third_party/blink/renderer/modules/modules_initializer.cc
@@ -147,8 +147,8 @@ diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_p
 diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
 +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-@@ -175,6 +175,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
-   RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable);
+@@ -195,6 +195,14 @@ void WebRuntimeFeatures::EnableKeyboardAccessibleTooltip(bool enable) {
+   RuntimeEnabledFeatures::SetKeyboardAccessibleTooltipEnabled(enable);
  }
  
 +void WebRuntimeFeatures::EnableDeviceMotion(bool enable) {
@@ -165,7 +165,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
-@@ -1385,6 +1385,14 @@
+@@ -1437,6 +1437,14 @@
        name: "OffscreenCanvasCommit",
        status: "experimental",
      },

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

@@ -31,7 +31,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
-@@ -37,12 +37,15 @@ import org.chromium.components.user_prefs.UserPrefs;
+@@ -40,12 +40,15 @@ import org.chromium.components.user_prefs.UserPrefs;
  import org.chromium.ui.text.NoUnderlineClickableSpan;
  import org.chromium.ui.text.SpanApplier;
  
@@ -47,7 +47,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_SECURE_DNS = "secure_dns";
-@@ -54,6 +57,7 @@ public class PrivacySettings
+@@ -57,6 +60,7 @@ public class PrivacySettings
      private static final String PREF_PROXY_OPTIONS = "proxy";
      private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
              PREF_ALWAYS_INCOGNITO,
@@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
              PREF_CLOSE_TABS_ON_EXIT,
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
-@@ -103,6 +107,11 @@ public class PrivacySettings
+@@ -118,6 +122,11 @@ public class PrivacySettings
          Preference secureDnsPref = findPreference(PREF_SECURE_DNS);
          secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled());
  
@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          updateSummaries();
      }
  
-@@ -123,6 +132,9 @@ public class PrivacySettings
+@@ -138,6 +147,9 @@ public class PrivacySettings
              SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
              sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
              sharedPreferencesEditor.apply();
@@ -77,7 +77,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          }
  
          return true;
-@@ -167,6 +179,13 @@ public class PrivacySettings
+@@ -188,6 +200,13 @@ public class PrivacySettings
                  (ChromeSwitchPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
          closeTabsOnExitPref.setOnPreferenceChangeListener(this);
          closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
@@ -164,7 +164,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"
-@@ -968,6 +970,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
+@@ -1027,6 +1029,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
    variations::VariationsService::RegisterProfilePrefs(registry);
    video_tutorials::RegisterPrefs(registry);
    feed::prefs::RegisterFeedSharedProfilePrefs(registry);
@@ -175,7 +175,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/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
-@@ -880,6 +880,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -917,6 +917,12 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_ALWAYS_INCOGNITO_SUMMARY" desc="Summary for always incognito mode">
          Opens links in incognito tabs when you click on new tab or on a link
        </message>
@@ -191,7 +191,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
-@@ -3155,6 +3155,11 @@ const char kShowCaretBrowsingDialog[] =
+@@ -3152,6 +3152,11 @@ const char kShowCaretBrowsingDialog[] =
  const char kLacrosAllowed[] = "lacros_allowed";
  #endif
  
@@ -206,9 +206,9 @@ 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
-@@ -1116,6 +1116,10 @@ extern const char kCartModuleRemoved[];
- extern const char kCartModuleWelcomeSurfaceShownTimes[];
- #endif
+@@ -1131,6 +1131,10 @@ extern const char kFetchKeepaliveDurationOnShutdown[];
+ 
+ extern const char kSuppressDifferentOriginSubframeJSDialogs[];
  
 +#if defined(OS_ANDROID)
 +extern const char kIncognitoTabHistoryEnabled[];

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

@@ -35,7 +35,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
          <item android:id="@+id/recent_tabs_menu_id"
              android:title="@string/menu_recent_tabs"
              android:icon="@drawable/devices_black_24dp" />
-@@ -133,6 +137,9 @@
+@@ -136,6 +140,9 @@
          <item android:id="@id/new_incognito_tab_menu_id"
              android:title="@string/menu_new_incognito_tab"
              android:icon="@drawable/incognito_simple" />
@@ -62,16 +62,16 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
 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
-@@ -63,6 +63,8 @@ import org.chromium.chrome.browser.ApplicationLifetime;
- import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
- import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier;
+@@ -66,6 +66,8 @@ import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier;
+ import org.chromium.chrome.browser.app.tabmodel.TabModelOrchestrator;
  import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
+ import org.chromium.chrome.browser.app.tabmodel.TabbedModeTabModelOrchestrator;
 +import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
 +import org.chromium.chrome.browser.bookmarks.BookmarkModel;
  import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
  import org.chromium.chrome.browser.compositor.CompositorViewHolder;
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
-@@ -1832,6 +1834,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1864,6 +1866,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              // Close both incognito and normal tabs
              getTabModelSelector().closeAllTabs();
              RecordUserAction.record("MobileMenuCloseAllTabs");
@@ -80,7 +80,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();
-@@ -1868,6 +1872,28 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1899,6 +1903,28 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          mTabModalHandler.onOmniboxFocusChanged(hasFocus);
      }
  
@@ -164,7 +164,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      /**
       * @return Id representing the special "other" folder from bookmark model.
       */
-@@ -1094,6 +1111,50 @@ public class BookmarkBridge {
+@@ -1099,6 +1116,50 @@ public class BookmarkBridge {
                  mNativeBookmarkBridge, BookmarkBridge.this, title, url);
      }
  
@@ -215,7 +215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      /**
       * @param url The URL of the reading list item.
       * @return The reading list item with the URL, or null if no such reading list item.
-@@ -1350,6 +1411,7 @@ public class BookmarkBridge {
+@@ -1355,6 +1416,7 @@ public class BookmarkBridge {
          void getAllFoldersWithDepths(long nativeBookmarkBridge, BookmarkBridge caller,
                  List<BookmarkId> folderList, List<Integer> depthList);
          BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
@@ -226,7 +226,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
-@@ -472,6 +472,7 @@ public class BookmarkUtils {
+@@ -502,6 +502,7 @@ public class BookmarkUtils {
          List<BookmarkId> topLevelFolders = new ArrayList<>();
          BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId();
          BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId();
@@ -234,7 +234,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          BookmarkId othersNodeId = bookmarkModel.getOtherFolderId();
  
          List<BookmarkId> specialFoldersIds =
-@@ -497,6 +498,9 @@ public class BookmarkUtils {
+@@ -527,6 +528,9 @@ public class BookmarkUtils {
          if (bookmarkModel.isFolderVisible(mobileNodeId)) {
              topLevelFolders.add(mobileNodeId);
          }
@@ -314,7 +314,7 @@ diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser
 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
-@@ -3014,6 +3014,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
+@@ -3017,6 +3017,9 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
        <message name="IDS_MENU_TRACK_PRICES" desc="Menu item for tracking prices on tabs. [CHAR-LIMIT=27]">
          Track prices
        </message>

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

@@ -7,11 +7,11 @@ Subject: Add menu item to view source
  chrome/android/java/res/menu/main_menu.xml         |  3 +++
  chrome/android/java/res/menu/main_menu_regroup.xml |  3 +++
  .../chrome/browser/ChromeTabbedActivity.java       |  2 ++
- .../chrome/browser/app/ChromeActivity.java         |  2 ++
+ .../chrome/browser/app/ChromeActivity.java         |  5 +++++
  .../app/appmenu/AppMenuPropertiesDelegateImpl.java | 14 ++++++++++++++
  .../CustomTabAppMenuPropertiesDelegate.java        |  1 +
  .../ui/android/strings/android_chrome_strings.grd  |  3 +++
- 8 files changed, 31 insertions(+)
+ 8 files changed, 34 insertions(+)
 
 diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
 --- a/chrome/android/java/res/menu/custom_tabs_menu.xml
@@ -29,7 +29,7 @@ diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/
 diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
 --- a/chrome/android/java/res/menu/main_menu.xml
 +++ b/chrome/android/java/res/menu/main_menu.xml
-@@ -91,6 +91,9 @@
+@@ -94,6 +94,9 @@
          <item android:id="@+id/add_to_homescreen_id"
              android:title="@string/menu_add_to_homescreen"
              android:icon="@drawable/ic_add_to_home_screen" />
@@ -42,7 +42,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
 diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml
 --- a/chrome/android/java/res/menu/main_menu_regroup.xml
 +++ b/chrome/android/java/res/menu/main_menu_regroup.xml
-@@ -142,6 +142,9 @@
+@@ -145,6 +145,9 @@
          <item android:id="@+id/add_to_homescreen_id"
              android:title="@string/menu_add_to_homescreen"
              android:icon="@drawable/ic_add_to_home_screen" />
@@ -55,7 +55,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
 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
-@@ -1850,6 +1850,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1881,6 +1881,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
                  NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
              }
              RecordUserAction.record("MobileMenuDownloadManager");
@@ -67,19 +67,22 @@ 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
-@@ -2082,6 +2082,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
-             } catch (ActivityNotFoundException e) {
-                 Toast.makeText(context, R.string.open_webapk_failed, Toast.LENGTH_SHORT).show();
-             }
-+        } else if (id == R.id.view_source_id) {
+@@ -2287,6 +2287,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+             return true;
+         }
+ 
++        if (id == R.id.view_source_id) {
 +            currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrlString()));
-         } else if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
-             final boolean reloadOnChange = !currentTab.isNativePage();
-             final boolean usingDesktopUserAgent =
++            return true;
++        }
++
+         if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
+             boolean usingDesktopUserAgent =
+                     currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent();
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
-@@ -519,6 +519,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -537,6 +537,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
          }
  
          updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
@@ -87,7 +90,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
  
          // Only display reader mode settings menu option if the current page is in reader mode.
          menu.findItem(R.id.reader_mode_prefs_id).setVisible(shouldShowReaderModePrefs(currentTab));
-@@ -932,6 +933,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -950,6 +951,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
          }
      }
  
@@ -110,7 +113,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
-@@ -225,6 +225,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
+@@ -228,6 +228,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
              updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
              MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id);
              MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id);

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

@@ -78,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/Too
 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
-@@ -444,6 +444,7 @@ public final class ChromePreferenceKeys {
+@@ -449,6 +449,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";
@@ -100,7 +100,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
 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
-@@ -1164,6 +1164,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1166,6 +1166,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>
@@ -116,7 +116,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/components/BUILD.gn b/components/BUILD.gn
 --- a/components/BUILD.gn
 +++ b/components/BUILD.gn
-@@ -488,7 +488,7 @@ test("components_unittests") {
+@@ -501,7 +501,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.
@@ -125,7 +125,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
      assert_no_deps = [ "//chrome/*" ]
    }
  
-@@ -730,7 +730,7 @@ if (!is_ios && !is_fuchsia) {
+@@ -748,7 +748,7 @@ if (!is_ios && !is_fuchsia) {
  
      # On LaCrOS, tests use ash-chrome as a window manager, thus the dependency.
      # On other platforms, no components should depend on Chrome.
@@ -142,9 +142,9 @@ diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
      "//base:base_java",
      "//base:jni_java",
 +    "//chrome/browser/preferences:java",
-     "//third_party/android_deps:androidx_annotation_annotation_java",
-     "//third_party/android_deps:androidx_appcompat_appcompat_java",
-     "//third_party/android_deps:androidx_appcompat_appcompat_resources_java",
+     "//third_party/androidx:androidx_annotation_annotation_java",
+     "//third_party/androidx:androidx_appcompat_appcompat_java",
+     "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
 diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
 --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
 +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java

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

@@ -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
-@@ -1112,8 +1112,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1124,8 +1124,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -38,7 +38,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
 +                ContextUtils.getAppSharedPreferences().getBoolean(PREF_CLOSE_TABS_ON_EXIT, false);
              if (noRestoreState) {
                  // Clear the state files because they are inconsistent and useless from now on.
-                 mTabModelSelectorImpl.clearState();
+                 mTabModelOrchestrator.clearState();
 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
@@ -59,7 +59,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;
-@@ -47,9 +50,11 @@ public class PrivacySettings
+@@ -50,9 +53,11 @@ public class PrivacySettings
      private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
      private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
      public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
@@ -71,7 +71,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
              PREF_ALLOW_CUSTOM_TAB_INTENTS};
  
-@@ -101,7 +106,11 @@ public class PrivacySettings
+@@ -116,7 +121,11 @@ public class PrivacySettings
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          String key = preference.getKey();
@@ -84,9 +84,9 @@ 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)) {
-@@ -150,6 +159,11 @@ public class PrivacySettings
-         if (secureDnsPref != null && secureDnsPref.isVisible()) {
-             secureDnsPref.setSummary(SecureDnsSettings.getSummary(getContext()));
+@@ -171,6 +180,11 @@ public class PrivacySettings
+             privacySandboxPreference.setSummary(
+                     PrivacySandboxSettingsFragment.getStatusString(getContext()));
          }
 +
 +        ChromeSwitchPreference closeTabsOnExitPref =
@@ -99,7 +99,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
-@@ -3736,6 +3736,12 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
+@@ -3765,6 +3765,12 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
        <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>

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

@@ -23,7 +23,7 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp
  void WebMediaPlayerImpl::EnabledAudioTracksChanged(
      const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) {
    DCHECK(main_task_runner_->BelongsToCurrentThread());
-@@ -3528,7 +3534,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
+@@ -3447,7 +3453,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.
@@ -39,7 +39,7 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp
 diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
 --- a/media/blink/webmediaplayer_impl.h
 +++ b/media/blink/webmediaplayer_impl.h
-@@ -157,6 +157,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
+@@ -150,6 +150,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
    // True if the loaded media has a playable video/audio track.
    bool HasVideo() const override;
    bool HasAudio() const override;

+ 1 - 1
build/patches/Allow-website-sign-in-without-account-sign-in.patch

@@ -10,7 +10,7 @@ Disable prefs::kSigninAllowedOnNextStartup by default. The setting can be found
 diff --git a/chrome/browser/signin/account_consistency_mode_manager.cc b/chrome/browser/signin/account_consistency_mode_manager.cc
 --- a/chrome/browser/signin/account_consistency_mode_manager.cc
 +++ b/chrome/browser/signin/account_consistency_mode_manager.cc
-@@ -119,7 +119,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
+@@ -118,7 +118,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
  #if BUILDFLAG(ENABLE_DICE_SUPPORT)
    registry->RegisterBooleanPref(kDiceMigrationCompletePref, false);
  #endif

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

@@ -11,7 +11,7 @@ Do not read experiment value for cronet async DNS configuration
 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
-@@ -156,7 +156,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams(
+@@ -155,7 +155,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams(
        local_state->GetBoolean(prefs::kNtlmV2Enabled);
  #endif  // defined(OS_POSIX)
  
@@ -23,7 +23,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
 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
-@@ -561,7 +561,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
+@@ -582,7 +582,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
          effective_experimental_options->Remove(it.key(), nullptr);
          continue;
        }

Файловите разлики са ограничени, защото са твърде много
+ 97 - 246
build/patches/Automated-domain-substitution.patch


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

@@ -18,15 +18,15 @@ Subject: Block gateway attacks via websockets
 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
-@@ -92,7 +92,7 @@ const base::Feature kBlockCredentialedSubresources{
- //
- // https://wicg.github.io/cors-rfc1918/#integration-fetch
+@@ -107,7 +107,7 @@ const base::Feature kBlockCredentialedSubresources{
+ //  - https://wicg.github.io/cors-rfc1918/#integration-fetch
+ //  - kBlockInsecurePrivateNetworkRequestsForNavigations
  const base::Feature kBlockInsecurePrivateNetworkRequests{
 -    "BlockInsecurePrivateNetworkRequests", base::FEATURE_DISABLED_BY_DEFAULT};
 +    "BlockInsecurePrivateNetworkRequests", base::FEATURE_ENABLED_BY_DEFAULT};
  
- // Use ThreadPriority::DISPLAY for browser UI and IO threads.
- #if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH)
+ // When both kBlockInsecurePrivateNetworkRequestsForNavigations and
+ // kBlockInsecurePrivateNetworkRequests are enabled, navigations initiated
 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
@@ -41,7 +41,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
-@@ -556,6 +556,24 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
+@@ -567,6 +567,24 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
    return should_block_request;
  }
  
@@ -69,7 +69,7 @@ diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/thi
 diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.h b/third_party/blink/renderer/core/loader/frame_fetch_context.h
 --- a/third_party/blink/renderer/core/loader/frame_fetch_context.h
 +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.h
-@@ -162,6 +162,7 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext,
+@@ -164,6 +164,7 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext,
    bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const override;
    std::unique_ptr<WebSocketHandshakeThrottle> CreateWebSocketHandshakeThrottle()
        override;
@@ -80,7 +80,7 @@ diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.h b/thir
 diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
 --- a/third_party/blink/renderer/core/loader/worker_fetch_context.cc
 +++ b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
-@@ -26,6 +26,7 @@
+@@ -24,6 +24,7 @@
  #include "third_party/blink/renderer/platform/loader/fetch/resource_timing_info.h"
  #include "third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h"
  #include "third_party/blink/renderer/platform/network/network_state_notifier.h"
@@ -88,7 +88,7 @@ diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/th
  #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
  #include "third_party/blink/renderer/platform/supplementable.h"
  #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
-@@ -92,6 +93,24 @@ bool WorkerFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
+@@ -90,6 +91,24 @@ bool WorkerFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
    return should_block_request;
  }
  
@@ -146,7 +146,7 @@ diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetc
 diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
 --- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
 +++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
-@@ -214,6 +214,11 @@ bool WebSocketChannelImpl::Connect(const KURL& url, const String& protocol) {
+@@ -213,6 +213,11 @@ bool WebSocketChannelImpl::Connect(const KURL& url, const String& protocol) {
      return false;
    }
  

+ 27 - 23
build/patches/Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-scheme.patch → build/patches/Block-qjz9zk-or-trk-requests.patch

@@ -1,7 +1,6 @@
 From: csagan5 <32685696+csagan5@users.noreply.github.com>
 Date: Wed, 30 Oct 2019 11:50:13 +0100
-Subject: Block all connection requests with 'qjz9zk' in the domain name or
- with a 'trk:' scheme.
+Subject: Block 'qjz9zk' or 'trk:' requests
 
 An info bar is displayed unless the --disable-trkbar command-line flag or the chrome://flag option is used.
 This patch is based on Iridium's 'net: add "trk:" scheme and help identify URLs being retrieved'
@@ -9,7 +8,7 @@ This patch is based on Iridium's 'net: add "trk:" scheme and help identify URLs
  .../chrome_autocomplete_scheme_classifier.cc  |  1 +
  chrome/browser/history/history_utils.cc       |  1 +
  chrome/browser/ui/singleton_tabs.cc           |  3 +-
- .../omnibox/browser/autocomplete_input.cc     |  7 +++--
+ .../omnibox/browser/autocomplete_input.cc     |  8 ++++-
  components/url_formatter/url_fixer.cc         |  4 +++
  .../child_process_security_policy_impl.cc     |  1 +
  net/BUILD.gn                                  |  2 ++
@@ -20,7 +19,7 @@ This patch is based on Iridium's 'net: add "trk:" scheme and help identify URLs
  url/url_constants.cc                          |  1 +
  url/url_constants.h                           |  1 +
  url/url_util.cc                               |  2 ++
- 14 files changed, 87 insertions(+), 3 deletions(-)
+ 14 files changed, 89 insertions(+), 2 deletions(-)
  create mode 100644 net/url_request/trk_protocol_handler.cc
  create mode 100644 net/url_request/trk_protocol_handler.h
 
@@ -62,7 +61,23 @@ diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_t
 diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc
 --- a/components/omnibox/browser/autocomplete_input.cc
 +++ b/components/omnibox/browser/autocomplete_input.cc
-@@ -526,7 +526,8 @@ void AutocompleteInput::ParseForEmphasizeComponents(
+@@ -81,10 +81,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) {
+ bool HasScheme(const base::string16& input, const char* scheme) {
+   std::string utf8_input(base::UTF16ToUTF8(input));
+   url::Component view_source_scheme;
++
++  if (url::FindAndCompareScheme(utf8_input, url::kTraceScheme, &view_source_scheme)) {
++    return false;
++  }
+   if (url::FindAndCompareScheme(utf8_input, kViewSourceScheme,
+                                 &view_source_scheme)) {
+     utf8_input.erase(0, view_source_scheme.end() + 1);
+   }
++
+   return url::FindAndCompareScheme(utf8_input, scheme, nullptr);
+ }
+ 
+@@ -552,7 +557,8 @@ void AutocompleteInput::ParseForEmphasizeComponents(
    // For the view-source and blob schemes, we should emphasize the host of the
    // URL qualified by the view-source or blob prefix.
    if ((base::LowerCaseEqualsASCII(scheme_str, kViewSourceScheme) ||
@@ -72,21 +87,10 @@ diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnib
        (static_cast<int>(text.length()) > after_scheme_and_colon)) {
      // Obtain the URL prefixed by view-source or blob and parse it.
      base::string16 real_url(text.substr(after_scheme_and_colon));
-@@ -599,7 +600,9 @@ int AutocompleteInput::NumNonHostComponents(const url::Parsed& parts) {
- bool AutocompleteInput::HasHTTPScheme(const base::string16& input) {
-   std::string utf8_input(base::UTF16ToUTF8(input));
-   url::Component scheme;
--  if (url::FindAndCompareScheme(utf8_input, kViewSourceScheme, &scheme)) {
-+  if (url::FindAndCompareScheme(utf8_input, url::kTraceScheme, &scheme)) {
-+    return false;
-+  } else if (url::FindAndCompareScheme(utf8_input, kViewSourceScheme, &scheme)) {
-     utf8_input.erase(0, scheme.end() + 1);
-   }
-   return url::FindAndCompareScheme(utf8_input, url::kHttpScheme, nullptr);
 diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
 --- a/components/url_formatter/url_fixer.cc
 +++ b/components/url_formatter/url_fixer.cc
-@@ -560,6 +560,10 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) {
+@@ -562,6 +562,10 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) {
      }
    }
  
@@ -100,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
-@@ -772,6 +772,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
+@@ -793,6 +793,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
  #endif  // BUILDFLAG(ENABLE_WEBSOCKETS)
    RegisterWebSafeScheme(url::kFtpScheme);
    RegisterWebSafeScheme(url::kDataScheme);
@@ -111,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
-@@ -1086,6 +1086,8 @@ component("net") {
+@@ -1075,6 +1075,8 @@ component("net") {
        "url_request/report_sender.h",
        "url_request/static_http_user_agent_settings.cc",
        "url_request/static_http_user_agent_settings.h",
@@ -241,10 +245,10 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur
 diff --git a/url/url_constants.cc b/url/url_constants.cc
 --- a/url/url_constants.cc
 +++ b/url/url_constants.cc
-@@ -28,6 +28,7 @@ const char kMailToScheme[] = "mailto";
- // See also: https://www.iana.org/assignments/uri-schemes/prov/quic-transport
+@@ -29,6 +29,7 @@ const char kMailToScheme[] = "mailto";
  const char kQuicTransportScheme[] = "quic-transport";
  const char kTelScheme[] = "tel";
+ const char kUrnScheme[] = "urn";
 +const char kTraceScheme[] = "trk";
  const char kWsScheme[] = "ws";
  const char kWssScheme[] = "wss";
@@ -252,10 +256,10 @@ diff --git a/url/url_constants.cc b/url/url_constants.cc
 diff --git a/url/url_constants.h b/url/url_constants.h
 --- a/url/url_constants.h
 +++ b/url/url_constants.h
-@@ -32,6 +32,7 @@ COMPONENT_EXPORT(URL) extern const char kJavaScriptScheme[];
- COMPONENT_EXPORT(URL) extern const char kMailToScheme[];
+@@ -33,6 +33,7 @@ COMPONENT_EXPORT(URL) extern const char kMailToScheme[];
  COMPONENT_EXPORT(URL) extern const char kQuicTransportScheme[];
  COMPONENT_EXPORT(URL) extern const char kTelScheme[];
+ COMPONENT_EXPORT(URL) extern const char kUrnScheme[];
 +COMPONENT_EXPORT(URL) extern const char kTraceScheme[];
  COMPONENT_EXPORT(URL) extern const char kWsScheme[];
  COMPONENT_EXPORT(URL) extern const char kWssScheme[];

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

@@ -60,26 +60,26 @@ 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
-@@ -727,6 +727,7 @@ chrome_java_resources = [
+@@ -682,6 +682,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",
-   "java/res/layout/add_languages_main.xml",
 +  "java/res/layout/adblock_editor.xml",
-   "java/res/layout/add_to_homescreen_dialog.xml",
    "java/res/layout/add_to_menu_dialog.xml",
    "java/res/layout/add_to_menu_dialog_item.xml",
-@@ -973,6 +974,7 @@ chrome_java_resources = [
+   "java/res/layout/assistant_voice_search_consent_ui.xml",
+@@ -920,6 +921,7 @@ chrome_java_resources = [
    "java/res/xml/about_chrome_preferences.xml",
    "java/res/xml/accessibility_preferences.xml",
    "java/res/xml/account_management_preferences.xml",
 +  "java/res/xml/adblock_preferences.xml",
    "java/res/xml/autofill_assistant_preferences.xml",
-   "java/res/xml/autofill_server_profile_preferences.xml",
    "java/res/xml/bookmark_widget_info.xml",
+   "java/res/xml/clear_browsing_data_preferences_tab.xml",
 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
-@@ -1166,6 +1166,8 @@ chrome_java_sources = [
+@@ -1155,6 +1155,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",
@@ -422,7 +422,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
-@@ -10337,6 +10337,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10400,6 +10400,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
        Never show this again.
      </message>
  
@@ -483,7 +483,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
  namespace extensions {
  class EventRouterForwarder;
  }
-@@ -236,6 +241,7 @@ class BrowserProcess {
+@@ -233,6 +238,7 @@ class BrowserProcess {
  #endif
  
    virtual component_updater::ComponentUpdateService* component_updater() = 0;
@@ -494,7 +494,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
-@@ -1039,6 +1039,35 @@ BrowserProcessImpl::component_updater() {
+@@ -1024,6 +1024,35 @@ BrowserProcessImpl::component_updater() {
    return component_updater_.get();
  }
  
@@ -533,7 +533,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
-@@ -184,6 +184,7 @@ class BrowserProcessImpl : public BrowserProcess,
+@@ -189,6 +189,7 @@ class BrowserProcessImpl : public BrowserProcess,
  #endif
  
    component_updater::ComponentUpdateService* component_updater() override;
@@ -541,7 +541,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;
-@@ -364,6 +365,7 @@ class BrowserProcessImpl : public BrowserProcess,
+@@ -369,6 +370,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_;
@@ -552,11 +552,11 @@ 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
-@@ -1605,6 +1605,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
+@@ -1603,6 +1603,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
    if (!parsed_command_line().HasSwitch(switches::kDisableComponentUpdate)) {
-     component_updater::RegisterComponentsForUpdate(profile_->IsOffTheRecord(),
-                                                    profile_->GetPrefs());
-+    // force initialisation
+     component_updater::RegisterComponentsForUpdate(
+         profile_->IsOffTheRecord(), profile_->GetPrefs(), profile_->GetPath());
++    // force AdBlock updater initialisation
 +    g_browser_process->adblock_updater();
    }
  
@@ -564,15 +564,15 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/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
-@@ -72,7 +72,6 @@
- #include "chrome/browser/hid/chrome_hid_delegate.h"
+@@ -74,7 +74,6 @@
  #include "chrome/browser/interstitials/enterprise_util.h"
+ #include "chrome/browser/lifetime/application_lifetime.h"
  #include "chrome/browser/lifetime/browser_shutdown.h"
 -#include "chrome/browser/lookalikes/lookalike_url_navigation_throttle.h"
  #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"
-@@ -3986,16 +3985,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -3966,16 +3965,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
      content::NavigationHandle* handle) {
    std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
  
@@ -589,7 +589,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #if BUILDFLAG(IS_CHROMEOS_ASH)
    MaybeAddThrottle(
        chromeos::WebTimeLimitNavigationThrottle::MaybeCreateThrottleFor(handle),
-@@ -4102,10 +4091,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -4080,10 +4069,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
                     &throttles);
  #endif
  
@@ -628,7 +628,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
-@@ -258,6 +258,14 @@ public class CachedFeatureFlags {
+@@ -260,6 +260,14 @@ public class CachedFeatureFlags {
                          ChromeFeatureList.REACHED_CODE_PROFILER, "sampling_interval_us", 0));
      }
  
@@ -643,7 +643,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.
       */
-@@ -410,5 +418,7 @@ public class CachedFeatureFlags {
+@@ -426,5 +434,7 @@ public class CachedFeatureFlags {
      @NativeMethods
      interface Natives {
          boolean isNetworkServiceWarmUpEnabled();
@@ -654,7 +654,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
-@@ -337,6 +337,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -336,6 +336,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
            SSLConfigServiceManager::CreateDefaultManager(local_state_)),
        proxy_config_monitor_(local_state_),
        stub_resolver_config_reader_(local_state_) {
@@ -663,7 +663,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 =
-@@ -401,6 +403,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
+@@ -400,6 +402,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
  void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) {
    StubResolverConfigReader::RegisterPrefs(registry);
  
@@ -713,7 +713,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
-@@ -2179,6 +2179,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
+@@ -2172,6 +2172,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
  // capture devices without prompt.
  const char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls";
  
@@ -1478,7 +1478,7 @@ new file mode 100644
 diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
 --- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
 +++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
-@@ -529,6 +529,17 @@ ContentSubresourceFilterThrottleManager::
+@@ -582,6 +582,17 @@ ContentSubresourceFilterThrottleManager::
        throttle->NotifyPageActivationWithRuleset(EnsureRulesetHandle(),
                                                  ad_tagging_state);
      }
@@ -1499,7 +1499,7 @@ diff --git a/components/subresource_filter/content/browser/content_subresource_f
 diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/components/subresource_filter/content/browser/ruleset_service.cc
 --- a/components/subresource_filter/content/browser/ruleset_service.cc
 +++ b/components/subresource_filter/content/browser/ruleset_service.cc
-@@ -47,9 +47,7 @@ namespace {
+@@ -46,9 +46,7 @@ namespace {
  
  void RecordIndexAndWriteRulesetResult(
      RulesetService::IndexAndWriteRulesetResult result) {
@@ -1510,7 +1510,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
  }
  
  // Implements operations on a `sentinel file`, which is used as a safeguard to
-@@ -228,10 +226,13 @@ RulesetService::RulesetService(
+@@ -227,10 +225,13 @@ RulesetService::RulesetService(
  RulesetService::~RulesetService() {}
  
  void RulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
@@ -1526,7 +1526,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
    // Trying to store a ruleset with the same version for a second time would
    // not only be futile, but would fail on Windows due to "File System
    // Tunneling" as long as the previously stored copy of the rules is still
-@@ -241,13 +242,16 @@ void RulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
+@@ -240,13 +241,16 @@ void RulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
    if (most_recently_indexed_version.IsCurrentFormatVersion() &&
        most_recently_indexed_version.content_version ==
            unindexed_ruleset_info.content_version) {
@@ -1543,7 +1543,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
      return;
    }
  
-@@ -266,6 +270,18 @@ IndexedRulesetVersion RulesetService::GetMostRecentlyIndexedVersion() const {
+@@ -265,6 +269,18 @@ IndexedRulesetVersion RulesetService::GetMostRecentlyIndexedVersion() const {
  IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
      const base::FilePath& indexed_ruleset_base_dir,
      const UnindexedRulesetInfo& unindexed_ruleset_info) {
@@ -1562,7 +1562,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
    base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
                                                  base::BlockingType::MAY_BLOCK);
  
-@@ -273,6 +289,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+@@ -272,6 +288,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
        unindexed_ruleset_info);
  
    if (!unindexed_ruleset_stream_generator.ruleset_stream()) {
@@ -1570,7 +1570,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
      RecordIndexAndWriteRulesetResult(
          IndexAndWriteRulesetResult::FAILED_OPENING_UNINDEXED_RULESET);
      return IndexedRulesetVersion();
-@@ -286,6 +303,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+@@ -285,6 +302,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
            indexed_ruleset_base_dir, indexed_version);
  
    if (!base::CreateDirectory(indexed_ruleset_version_dir)) {
@@ -1578,7 +1578,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
      RecordIndexAndWriteRulesetResult(
          IndexAndWriteRulesetResult::FAILED_CREATING_VERSION_DIR);
      return IndexedRulesetVersion();
-@@ -311,6 +329,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+@@ -310,6 +328,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
  
    RulesetIndexer indexer;
    if (!(*g_index_ruleset_func)(&unindexed_ruleset_stream_generator, &indexer)) {
@@ -1586,7 +1586,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
      RecordIndexAndWriteRulesetResult(
          IndexAndWriteRulesetResult::FAILED_PARSING_UNINDEXED_RULESET);
      return IndexedRulesetVersion();
-@@ -331,6 +350,8 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+@@ -330,6 +349,8 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
    if (result != IndexAndWriteRulesetResult::SUCCESS)
      return IndexedRulesetVersion();
  
@@ -1595,7 +1595,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
    DCHECK(indexed_version.IsValid());
    return indexed_version;
  }
-@@ -455,6 +476,7 @@ void RulesetService::IndexAndStoreRuleset(
+@@ -454,6 +475,7 @@ void RulesetService::IndexAndStoreRuleset(
  void RulesetService::OnWrittenRuleset(WriteRulesetCallback result_callback,
                                        const IndexedRulesetVersion& version) {
    DCHECK(!result_callback.is_null());
@@ -1603,7 +1603,7 @@ diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/
    if (!version.IsValid())
      return;
    version.SaveToPrefs(local_state_);
-@@ -467,7 +489,6 @@ void RulesetService::OpenAndPublishRuleset(
+@@ -466,7 +488,6 @@ void RulesetService::OpenAndPublishRuleset(
        IndexedRulesetLocator::GetRulesetDataFilePath(
            IndexedRulesetLocator::GetSubdirectoryPathForVersion(
                indexed_ruleset_base_dir_, version));
@@ -1854,7 +1854,7 @@ diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/comp
 diff --git a/content/browser/renderer_host/navigation_throttle_runner.cc b/content/browser/renderer_host/navigation_throttle_runner.cc
 --- a/content/browser/renderer_host/navigation_throttle_runner.cc
 +++ b/content/browser/renderer_host/navigation_throttle_runner.cc
-@@ -134,11 +134,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
+@@ -171,11 +171,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
    AddThrottle(HttpErrorNavigationThrottle::MaybeCreateThrottleFor(*request));
  
    AddThrottle(BackForwardCacheThrottle::MaybeCreateThrottleFor(request));

+ 1 - 1
build/patches/Change-default-webRTC-policy-to-not-use-any-address.patch

@@ -12,7 +12,7 @@ See also: https://github.com/bromite/bromite/issues/553
 diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
 +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
-@@ -461,12 +461,13 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
+@@ -462,12 +462,13 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
            port_config.enable_nonproxied_udp = false;
            break;
          case DEFAULT:

+ 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
-@@ -595,7 +595,7 @@ const base::Feature kMediaDrmPersistentLicense{
+@@ -611,7 +611,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",

+ 1 - 1
build/patches/Disable-Omaha-update-checks.patch

@@ -11,7 +11,7 @@ Do not consider Jelly Bean unsupported
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java
-@@ -159,7 +159,7 @@ public class OmahaBase {
+@@ -158,7 +158,7 @@ public class OmahaBase {
  
      /** See {@link #sIsDisabled}. */
      static boolean isDisabled() {

+ 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
-@@ -491,7 +491,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
+@@ -523,7 +523,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;
              }
-@@ -526,8 +526,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
+@@ -558,8 +558,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
                  preferenceManager.writeBoolean(
                          ChromePreferenceKeys.PROMOS_SKIPPED_ON_FIRST_START, true);
              }

+ 6 - 6
build/patches/Disable-fetching-of-all-field-trials.patch

@@ -10,7 +10,7 @@ Subject: Disable fetching of all field trials
 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
-@@ -122,9 +122,7 @@ public abstract class ChromeFeatureList {
+@@ -123,9 +123,7 @@ public abstract class ChromeFeatureList {
       *   the specified parameter does not exist.
       */
      public static String getFieldTrialParamByFeature(String featureName, String paramName) {
@@ -21,7 +21,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
      }
  
      /**
-@@ -141,10 +139,7 @@ public abstract class ChromeFeatureList {
+@@ -142,10 +140,7 @@ public abstract class ChromeFeatureList {
       */
      public static int getFieldTrialParamByFeatureAsInt(
              String featureName, String paramName, int defaultValue) {
@@ -33,7 +33,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
      }
  
      /**
-@@ -161,10 +156,7 @@ public abstract class ChromeFeatureList {
+@@ -162,10 +157,7 @@ public abstract class ChromeFeatureList {
       */
      public static double getFieldTrialParamByFeatureAsDouble(
              String featureName, String paramName, double defaultValue) {
@@ -45,7 +45,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
      }
  
      /**
-@@ -181,10 +173,7 @@ public abstract class ChromeFeatureList {
+@@ -196,10 +188,7 @@ public abstract class ChromeFeatureList {
       */
      public static boolean getFieldTrialParamByFeatureAsBoolean(
              String featureName, String paramName, boolean defaultValue) {
@@ -56,11 +56,11 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
 +        return defaultValue;
      }
  
-     /** Alphabetical: */
+     /* Alphabetical: */
 diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc
 --- a/components/variations/service/variations_service.cc
 +++ b/components/variations/service/variations_service.cc
-@@ -239,17 +239,7 @@ bool GetInstanceManipulations(const net::HttpResponseHeaders* headers,
+@@ -240,17 +240,7 @@ bool GetInstanceManipulations(const net::HttpResponseHeaders* headers,
  // Variations seed fetching is only enabled in official Chrome builds, if a URL
  // is specified on the command line, and for testing.
  bool IsFetchingEnabled() {

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

@@ -11,8 +11,8 @@ Subject: Disable media router and remoting by default
 diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc
 --- a/chrome/browser/media/router/media_router_feature.cc
 +++ b/chrome/browser/media/router/media_router_feature.cc
-@@ -53,16 +53,6 @@ const base::Feature kAllowAllSitesToInitiateMirroring{
-     "AllowAllSitesToInitiateMirroring", base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -50,16 +50,6 @@ const base::Feature kCastToMeetingFromCastDialog{
+     "CastToMeetingFromCastDialog", base::FEATURE_DISABLED_BY_DEFAULT};
  #endif  // !defined(OS_ANDROID)
  
 -#if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
@@ -26,10 +26,10 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse
 -#endif  // defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
 -
  bool MediaRouterEnabled(content::BrowserContext* context) {
- #if !defined(OFFICIAL_BUILD) && !defined(OS_ANDROID)
+ #if !defined(OS_ANDROID)
    if (!base::FeatureList::IsEnabled(kMediaRouter))
-@@ -70,7 +60,7 @@ bool MediaRouterEnabled(content::BrowserContext* context) {
- #endif  // !defined(OFFICIAL_BUILD) && !defined(OS_ANDROID)
+@@ -67,7 +57,7 @@ bool MediaRouterEnabled(content::BrowserContext* context) {
+ #endif  // !defined(OS_ANDROID)
  
  #if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
 -  static base::NoDestructor<base::flat_map<content::BrowserContext*, bool>>
@@ -37,7 +37,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse
        stored_pref_values;
  
    // If the Media Router was already enabled or disabled for |context|, then it
-@@ -91,7 +81,8 @@ bool MediaRouterEnabled(content::BrowserContext* context) {
+@@ -88,7 +78,8 @@ bool MediaRouterEnabled(content::BrowserContext* context) {
  
    // The component extension cannot be loaded in guest sessions.
    // TODO(crbug.com/756243): Figure out why.
@@ -50,7 +50,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
-@@ -327,7 +327,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -323,7 +323,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        media_router::prefs::kMediaRouterEnableCloudServices, false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -62,7 +62,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
-@@ -455,7 +455,7 @@ void ProfileImpl::RegisterProfilePrefs(
+@@ -448,7 +448,7 @@ void ProfileImpl::RegisterProfilePrefs(
  #endif
  
    registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false);

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

@@ -75,7 +75,7 @@ diff --git a/components/ntp_tiles/BUILD.gn b/components/ntp_tiles/BUILD.gn
      "most_visited_sites.cc",
      "most_visited_sites.h",
      "ntp_tile.cc",
-@@ -85,7 +83,6 @@ source_set("unit_tests") {
+@@ -84,7 +82,6 @@ source_set("unit_tests") {
      "custom_links_manager_impl_unittest.cc",
      "custom_links_store_unittest.cc",
      "icon_cacher_impl_unittest.cc",

+ 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
-@@ -942,7 +942,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -928,7 +928,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
  #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
  
    registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled,

+ 1 - 1
build/patches/Disable-plugins-enumeration.patch

@@ -9,7 +9,7 @@ Subject: Disable plugins enumeration
 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
-@@ -1864,10 +1864,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
+@@ -1848,10 +1848,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
  }
  
  PluginData* LocalFrame::GetPluginData() const {

Файловите разлики са ограничени, защото са твърде много
+ 148 - 145
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
-@@ -508,8 +508,8 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -517,8 +517,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)) {
-@@ -523,10 +523,12 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -532,10 +532,12 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
    }
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;

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

@@ -15,7 +15,7 @@ leak information through the TextClassifier set by OEM, if any
 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
-@@ -503,7 +503,7 @@ const base::Feature kDownloadProgressInfoBar{"DownloadProgressInfoBar",
+@@ -518,7 +518,7 @@ const base::Feature kDownloadProgressInfoBar{"DownloadProgressInfoBar",
                                               base::FEATURE_ENABLED_BY_DEFAULT};
  
  const base::Feature kDownloadFileProvider{"DownloadFileProvider",

+ 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
-@@ -626,7 +626,7 @@ const base::Feature kSignedExchangePrefetchCacheForNavigations{
+@@ -662,7 +662,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
-@@ -636,7 +636,7 @@ const base::Feature kSignedExchangeSubresourcePrefetch{
+@@ -672,7 +672,7 @@ const base::Feature kSignedExchangeSubresourcePrefetch{
  // Origin-Signed HTTP Exchanges (for WebPackage Loading)
  // https://www.chromestatus.com/features/5745285984681984
  const base::Feature kSignedHTTPExchange{"SignedHTTPExchange",

+ 12 - 12
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
-@@ -5170,6 +5170,7 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -5282,6 +5282,7 @@ const FeatureEntry kFeatureEntries[] = {
           kHappinessTrackingSurveysForDesktopDevToolsIssuesCookiesSameSiteDescription,
       kOsDesktop,
       FEATURE_VALUE_TYPE(
@@ -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
-@@ -2586,7 +2586,7 @@
+@@ -2755,7 +2755,7 @@
    {
      "name": "ev-details-in-page-info",
      "owners": [ "cthomp" ],
@@ -53,17 +53,17 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.
 --- a/content/child/runtime_features.cc
 +++ b/content/child/runtime_features.cc
 @@ -273,6 +273,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
-     {wf::EnableBackgroundFetch, features::kBackgroundFetch},
-     {wf::EnableForcedColors, features::kForcedColors},
-     {wf::EnableFractionalScrollOffsets, features::kFractionalScrollOffsets},
+     {wf::EnableMouseSubframeNoImplicitCapture,
+      features::kMouseSubframeNoImplicitCapture},
+     {wf::EnableNeverSlowMode, features::kNeverSlowMode},
 +    // will set the TextFragmentIdentifiers runtime feature
- #if defined(OS_ANDROID)
-     {wf::EnableGetDisplayMedia, features::kUserMediaScreenCapturing},
- #endif
+     {wf::EnableNotificationContentImage, features::kNotificationContentImage,
+      kSetOnlyIfOverridden},
+     {wf::EnableParseUrlProtocolHandler,
 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
-@@ -301,7 +301,7 @@ const base::Feature kStorageAccessAPI{"StorageAccessAPI",
+@@ -309,7 +309,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
-@@ -4384,6 +4384,10 @@ void Document::SetURL(const KURL& url) {
+@@ -4324,6 +4324,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();
-@@ -4397,6 +4401,7 @@ void Document::SetURL(const KURL& url) {
+@@ -4337,6 +4341,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
-@@ -1973,8 +1973,7 @@
+@@ -2020,8 +2020,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
-@@ -591,7 +591,7 @@ void RegisterProfilePrefsForMigration(
+@@ -632,7 +632,7 @@ void RegisterProfilePrefsForMigration(
  
    registry->RegisterDictionaryPref(kObservedSessionTime);
  

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

@@ -9,15 +9,15 @@ 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
-@@ -448,7 +448,7 @@ const base::Feature kUseR16Texture{"use-r16-texture",
+@@ -453,7 +453,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",
 -                                     base::FEATURE_ENABLED_BY_DEFAULT};
 +                                     base::FEATURE_DISABLED_BY_DEFAULT};
  
- #if (defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
- // Enable vaapi video decoding on linux. This is already enabled by default on
+ // TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is
+ // complete.
 -- 
 2.17.1
 

+ 4 - 4
build/patches/Disable-update-scheduler.patch

@@ -3,12 +3,12 @@ Date: Sat, 27 Oct 2018 17:54:01 +0200
 Subject: Disable update scheduler
 
 ---
- .../chrome/browser/component_updater/UpdateScheduler.java     | 4 +---
+ .../components/component_updater/UpdateScheduler.java         | 4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)
 
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
+diff --git a/components/component_updater/android/java/src/org/chromium/components/component_updater/UpdateScheduler.java b/components/component_updater/android/java/src/org/chromium/components/component_updater/UpdateScheduler.java
+--- a/components/component_updater/android/java/src/org/chromium/components/component_updater/UpdateScheduler.java
++++ b/components/component_updater/android/java/src/org/chromium/components/component_updater/UpdateScheduler.java
 @@ -34,9 +34,7 @@ public class UpdateScheduler {
  
      @CalledByNative

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

@@ -10,7 +10,7 @@ Subject: Do not compile QR code sharing
 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
-@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.profiles.Profile;
+@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.profiles.Profile;
  import org.chromium.chrome.browser.share.ChromeShareExtras;
  import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator;
  import org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsCoordinator;
@@ -18,8 +18,8 @@ diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/s
  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;
-@@ -240,10 +239,6 @@ class ChromeProvidedSharingOptionsProvider {
-                 && ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID)) {
+@@ -241,10 +240,6 @@ class ChromeProvidedSharingOptionsProvider {
+                         ChromeFeatureList.PREEMPTIVE_LINK_TO_TEXT_GENERATION)) {
              mOrderedFirstPartyOptions.add(createHighlightsFirstPartyOption());
          }
 -        if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_QRCODE)
@@ -29,7 +29,7 @@ diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/s
          if (UserPrefs.get(Profile.getLastUsedRegularProfile()).getBoolean(Pref.PRINTING_ENABLED)) {
              mOrderedFirstPartyOptions.add(createPrintingFirstPartyOption());
          }
-@@ -390,18 +385,6 @@ class ChromeProvidedSharingOptionsProvider {
+@@ -391,18 +386,6 @@ class ChromeProvidedSharingOptionsProvider {
                  .build();
      }
  
@@ -51,10 +51,10 @@ 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
-@@ -16,24 +16,6 @@ share_java_sources = [
-   "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/LongScreenshotsEntry.java",
-   "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/LongScreenshotsTabService.java",
-   "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/LongScreenshotsTabServiceFactory.java",
+@@ -19,24 +19,6 @@ share_java_sources = [
+   "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsEntry.java",
+   "//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/qrcode/QRCodeGenerationRequest.java",
 -  "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeCoordinator.java",
 -  "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeDialog.java",

+ 1 - 1
build/patches/Do-not-hide-component-extensions.patch

@@ -9,7 +9,7 @@ Subject: Do not hide component extensions
 diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc
 --- a/extensions/common/extension.cc
 +++ b/extensions/common/extension.cc
-@@ -380,9 +380,8 @@ bool Extension::ShouldDisplayInNewTabPage() const {
+@@ -419,9 +419,8 @@ bool Extension::ShouldDisplayInNewTabPage() const {
  }
  
  bool Extension::ShouldExposeViaManagementAPI() const {

+ 1 - 1
build/patches/Do-not-store-passwords-by-default.patch

@@ -9,7 +9,7 @@ Subject: Do not store passwords by default
 diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
 --- a/components/password_manager/core/browser/password_manager.cc
 +++ b/components/password_manager/core/browser/password_manager.cc
-@@ -207,10 +207,10 @@ FormData SimplifiedFormDataFromFormStructure(
+@@ -208,10 +208,10 @@ FormData SimplifiedFormDataFromFormStructure(
  void PasswordManager::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(

+ 1 - 1
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
-@@ -817,11 +817,7 @@ const base::Feature kShow10_10ObsoleteInfobar{
+@@ -845,11 +845,7 @@ const base::Feature kShow10_10ObsoleteInfobar{
  // browser_features, as they are only used on the browser side.
  const base::Feature kSitePerProcess {
    "site-per-process",

+ 0 - 23
build/patches/Enable-app-overflow-menu-icons-by-default.patch

@@ -1,23 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Thu, 18 Feb 2021 22:10:11 +0100
-Subject: Enable app overflow menu icons by default
-
----
- chrome/browser/flags/android/chrome_feature_list.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-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
-@@ -648,7 +648,7 @@ const base::Feature kTabToGTSAnimation{"TabToGTSAnimation",
-                                        base::FEATURE_ENABLED_BY_DEFAULT};
- 
- const base::Feature kTabbedAppOverflowMenuIcons{
--    "TabbedAppOverflowMenuIcons", base::FEATURE_DISABLED_BY_DEFAULT};
-+    "TabbedAppOverflowMenuIcons", base::FEATURE_ENABLED_BY_DEFAULT};
- 
- const base::Feature kTabbedAppOverflowMenuRegroup{
-     "TabbedAppOverflowMenuRegroup", base::FEATURE_DISABLED_BY_DEFAULT};
--- 
-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
-@@ -976,7 +976,7 @@
+@@ -1099,7 +1099,7 @@
    {
      "name": "disable-keepalive-fetch",
      "owners": [ "yhirano" ],
@@ -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
-@@ -491,7 +491,7 @@ const base::Feature kContextualSearchTranslations{
+@@ -506,7 +506,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
-@@ -311,6 +311,10 @@ config("compiler") {
+@@ -319,6 +319,10 @@ config("compiler") {
        }
      }
  

+ 0 - 123
build/patches/Enable-legacy-TLS-interstitital-warning.patch

@@ -1,123 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Fri, 17 Jul 2020 09:28:36 +0200
-Subject: Enable legacy TLS interstitital warning
-
-Expose show-legacy-tls-warnings flag on Android as well
----
- chrome/browser/about_flags.cc                 |  2 --
- chrome/browser/ssl/tls_deprecation_config.cc  | 22 +------------------
- components/security_state/core/features.cc    |  2 +-
- .../network/legacy_tls_config_distributor.cc  | 21 +-----------------
- services/network/ssl_config_service_mojo.cc   |  7 ++----
- 5 files changed, 5 insertions(+), 49 deletions(-)
-
-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
-@@ -6167,11 +6167,9 @@ const FeatureEntry kFeatureEntries[] = {
-      FEATURE_VALUE_TYPE(features::kElasticOverscrollWin)},
- #endif
- 
--#if !defined(OS_ANDROID)
-     {"show-legacy-tls-warnings", flag_descriptions::kLegacyTLSWarningsName,
-      flag_descriptions::kLegacyTLSWarningsDescription, kOsDesktop,
-      FEATURE_VALUE_TYPE(security_state::features::kLegacyTLSWarnings)},
--#endif
- 
- #if BUILDFLAG(IS_CHROMEOS_ASH)
-     {"enable-assistant-aec", flag_descriptions::kEnableGoogleAssistantAecName,
-diff --git a/chrome/browser/ssl/tls_deprecation_config.cc b/chrome/browser/ssl/tls_deprecation_config.cc
---- a/chrome/browser/ssl/tls_deprecation_config.cc
-+++ b/chrome/browser/ssl/tls_deprecation_config.cc
-@@ -58,27 +58,7 @@ void SetRemoteTLSDeprecationConfig(const std::string& binary_config) {
- }
- 
- bool ShouldSuppressLegacyTLSWarning(const GURL& url) {
--  if (!url.has_host() || !url.SchemeIsCryptographic())
--    return false;
--
--  auto* proto = TLSDeprecationConfigSingleton::GetInstance().GetProto();
--  // If the config is not yet loaded, we err on the side of not showing warnings
--  // for any sites.
--  if (!proto)
--    return true;
--
--  // Convert bytes from crypto::SHA256 so we can compare to the proto contents.
--  std::string host_hash_bytes = crypto::SHA256HashString(url.host_piece());
--  std::string host_hash = base::ToLowerASCII(
--      base::HexEncode(host_hash_bytes.c_str(), host_hash_bytes.size()));
--  const auto& control_site_hashes = proto->control_site_hashes();
--
--  // Perform binary search on the sorted list of control site hashes to check
--  // if the input URL's hostname is included.
--  auto lower = std::lower_bound(control_site_hashes.begin(),
--                                control_site_hashes.end(), host_hash);
--
--  return lower != control_site_hashes.end() && *lower == host_hash;
-+  return false;
- }
- 
- void ResetTLSDeprecationConfigForTesting() {
-diff --git a/components/security_state/core/features.cc b/components/security_state/core/features.cc
---- a/components/security_state/core/features.cc
-+++ b/components/security_state/core/features.cc
-@@ -8,7 +8,7 @@ namespace security_state {
- namespace features {
- 
- const base::Feature kLegacyTLSWarnings{"LegacyTLSWarnings",
--                                       base::FEATURE_DISABLED_BY_DEFAULT};
-+                                       base::FEATURE_ENABLED_BY_DEFAULT};
- 
- const base::Feature kSafetyTipUI{"SafetyTip", base::FEATURE_ENABLED_BY_DEFAULT};
- 
-diff --git a/services/network/legacy_tls_config_distributor.cc b/services/network/legacy_tls_config_distributor.cc
---- a/services/network/legacy_tls_config_distributor.cc
-+++ b/services/network/legacy_tls_config_distributor.cc
-@@ -51,26 +51,7 @@ scoped_refptr<LegacyTLSExperimentConfig> LegacyTLSExperimentConfig::Parse(
- 
- bool LegacyTLSExperimentConfig::ShouldSuppressLegacyTLSWarning(
-     const std::string& hostname) const {
--  // Match on eTLD+1 rather than full hostname (to account for subdomains and
--  // redirects). If no registrable domain is found, default to using the
--  // hostname as-is.
--  auto domain = net::registry_controlled_domains::GetDomainAndRegistry(
--      hostname, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
--  if (domain.empty())
--    domain = hostname;
--
--  // Convert bytes from crypto::SHA256 so we can compare to the proto contents.
--  std::string host_hash_bytes = crypto::SHA256HashString(domain);
--  std::string host_hash = base::ToLowerASCII(
--      base::HexEncode(host_hash_bytes.data(), host_hash_bytes.size()));
--  const auto& control_site_hashes = proto_.control_site_hashes();
--
--  // Perform binary search on the sorted list of control site hashes to check
--  // if the input URL's hostname is included.
--  auto lower = std::lower_bound(control_site_hashes.begin(),
--                                control_site_hashes.end(), host_hash);
--
--  return lower != control_site_hashes.end() && *lower == host_hash;
-+  return false;
- }
- 
- LegacyTLSConfigDistributor::LegacyTLSConfigDistributor() = default;
-diff --git a/services/network/ssl_config_service_mojo.cc b/services/network/ssl_config_service_mojo.cc
---- a/services/network/ssl_config_service_mojo.cc
-+++ b/services/network/ssl_config_service_mojo.cc
-@@ -120,11 +120,8 @@ bool SSLConfigServiceMojo::CanShareConnectionWithClientCerts(
- 
- bool SSLConfigServiceMojo::ShouldSuppressLegacyTLSWarning(
-     const std::string& hostname) const {
--  // If the config is not yet loaded, we err on the side of not showing warnings
--  // for any sites.
--  if (!legacy_tls_config_)
--    return true;
--  return legacy_tls_config_->ShouldSuppressLegacyTLSWarning(hostname);
-+  // never suppress any warning
-+  return false;
- }
- 
- void SSLConfigServiceMojo::OnNewCRLSet(scoped_refptr<net::CRLSet> crl_set) {
--- 
-2.17.1
-

+ 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
-@@ -322,7 +322,7 @@ const base::Feature kFontAccessChooser{"FontAccessChooser",
+@@ -334,7 +334,7 @@ const base::Feature kComputePressure{"ComputePressure",
  // Prefetch request properties are updated to be privacy-preserving. See
  // crbug.com/988956.
  const base::Feature kPrefetchPrivacyChanges{"PrefetchPrivacyChanges",

+ 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
-@@ -53,7 +53,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{
+@@ -56,7 +56,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{
  
  // Freezes the user-agent as part of https://github.com/WICG/ua-client-hints.
  const base::Feature kFreezeUserAgent{"FreezeUserAgent",

+ 2 - 2
build/patches/Hardening-against-incognito-mode-detection.patch

@@ -9,9 +9,9 @@ Subject: Hardening against incognito mode detection
 diff --git a/storage/browser/quota/quota_settings.cc b/storage/browser/quota/quota_settings.cc
 --- a/storage/browser/quota/quota_settings.cc
 +++ b/storage/browser/quota/quota_settings.cc
-@@ -29,7 +29,7 @@ const int kRandomizedPercentage = 10;
+@@ -28,7 +28,7 @@ const int64_t kMBytes = 1024 * 1024;
+ const int kRandomizedPercentage = 10;
  const double kDefaultPerHostRatio = 0.75;
- const double kDefaultPoolSizeRatio = 0.8;
  const double kIncognitoQuotaRatioLowerBound = 0.15;
 -const double kIncognitoQuotaRatioUpperBound = 0.2;
 +const double kIncognitoQuotaRatioUpperBound = 0.3;

+ 1 - 1
build/patches/Increase-number-of-autocomplete-matches-from-5-to-10.patch

@@ -11,7 +11,7 @@ Patch from https://github.com/Eloston/ungoogled-chromium/issues/814#issuecomment
 diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc
 --- a/components/omnibox/browser/autocomplete_result.cc
 +++ b/components/omnibox/browser/autocomplete_result.cc
-@@ -68,7 +68,8 @@ struct MatchGURLHash {
+@@ -69,7 +69,8 @@ struct MatchGURLHash {
  // static
  size_t AutocompleteResult::GetMaxMatches(bool is_zero_suggest) {
  #if (defined(OS_ANDROID))

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

@@ -21,7 +21,7 @@ Send a random key press to circumvent idle status detection
 diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/renderer/core/dom/build.gni
 --- a/third_party/blink/renderer/core/dom/build.gni
 +++ b/third_party/blink/renderer/core/dom/build.gni
-@@ -165,6 +165,8 @@ blink_core_sources_dom = [
+@@ -167,6 +167,8 @@ blink_core_sources_dom = [
    "global_event_handlers.h",
    "icon_url.cc",
    "icon_url.h",
@@ -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
-@@ -273,6 +273,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"
@@ -41,7 +41,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h"
  #include "third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.h"
  #include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h"
-@@ -338,6 +339,8 @@
+@@ -340,6 +341,8 @@
  #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h"
  #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.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();
-@@ -6896,6 +6899,61 @@ void Document::setAllowDeclarativeShadowRoots(bool val) {
+@@ -6850,6 +6853,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);
-@@ -6948,6 +7006,10 @@ void Document::FinishedParsing() {
+@@ -6902,6 +6960,10 @@ void Document::FinishedParsing() {
  
      frame->Loader().FinishedParsing();
  
@@ -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
-@@ -1695,6 +1695,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1721,6 +1721,9 @@ class CORE_EXPORT Document : public ContainerNode,
    void AddAXContext(AXContext*);
    void RemoveAXContext(AXContext*);
  

+ 8 - 8
build/patches/Modify-default-preferences.patch

@@ -20,7 +20,7 @@ Subject: Modify default preferences
 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
 +++ b/chrome/browser/background/background_mode_manager.cc
-@@ -360,7 +360,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -362,7 +362,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
    registry->RegisterBooleanPref(prefs::kChromeCreatedLoginItem, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
  #endif
@@ -32,7 +32,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
-@@ -1364,7 +1364,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
+@@ -1264,7 +1264,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -68,7 +68,7 @@ diff --git a/chrome/browser/net/prediction_options.h b/chrome/browser/net/predic
 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
-@@ -248,7 +248,7 @@ const char Profile::kProfileKey[] = "__PROFILE__";
+@@ -247,7 +247,7 @@ const char Profile::kProfileKey[] = "__PROFILE__";
  void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kSearchSuggestEnabled,
@@ -121,7 +121,7 @@ diff --git a/chrome/service/cloud_print/connector_settings.cc b/chrome/service/c
 diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
 --- a/components/autofill/core/browser/autofill_manager.cc
 +++ b/components/autofill/core/browser/autofill_manager.cc
-@@ -990,10 +990,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
+@@ -975,10 +975,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
        // suggestions available.
        // TODO(mathp): Differentiate between number of suggestions available
        // (current metric) and number shown to the user.
@@ -133,9 +133,9 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
      }
    }
  
-@@ -1576,8 +1573,8 @@ void AutofillManager::Reset() {
+@@ -1556,8 +1553,8 @@ void AutofillManager::Reset() {
    credit_card_access_manager_ = std::make_unique<CreditCardAccessManager>(
-       driver(), client_, personal_data_, credit_card_form_event_logger_.get());
+       driver(), client(), personal_data_, credit_card_form_event_logger_.get());
  
 -  has_logged_autofill_enabled_ = false;
 -  has_logged_address_suggestions_count_ = false;
@@ -159,7 +159,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
-@@ -442,12 +442,12 @@ bool DoesBookmarkContainWords(const base::string16& title,
+@@ -441,12 +441,12 @@ bool DoesBookmarkContainWords(const base::string16& title,
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kShowBookmarkBar,
@@ -177,7 +177,7 @@ diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmar
 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
-@@ -192,9 +192,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+@@ -196,9 +196,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
    registry->RegisterBooleanPref(
        prefs::kSafeBrowsingSawInterstitialScoutReporting, false);
    registry->RegisterBooleanPref(

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

@@ -39,7 +39,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
-@@ -39,6 +39,13 @@ import org.chromium.ui.text.SpanApplier;
+@@ -42,6 +42,13 @@ import org.chromium.ui.text.SpanApplier;
  
  import org.chromium.base.Log;
  
@@ -53,7 +53,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  /**
   * Fragment to keep track of the all the privacy related preferences.
   */
-@@ -55,6 +62,13 @@ public class PrivacySettings
+@@ -58,6 +65,13 @@ public class PrivacySettings
      public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
      private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
      private static final String PREF_PROXY_OPTIONS = "proxy";
@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
              PREF_ALWAYS_INCOGNITO,
              PREF_INCOGNITO_TAB_HISTORY_ENABLED,
-@@ -62,11 +76,19 @@ public class PrivacySettings
+@@ -65,11 +79,19 @@ public class PrivacySettings
              PREF_CLOSE_TABS_ON_EXIT,
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
              PREF_ALLOW_CUSTOM_TAB_INTENTS,
@@ -88,7 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
          PrivacyPreferencesManagerImpl privacyPrefManager =
-@@ -93,6 +115,29 @@ public class PrivacySettings
+@@ -108,6 +130,29 @@ public class PrivacySettings
  
          mManagedPreferenceDelegate = createManagedPreferenceDelegate();
  
@@ -118,7 +118,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);
-@@ -125,6 +170,11 @@ public class PrivacySettings
+@@ -140,6 +185,11 @@ public class PrivacySettings
          } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
@@ -130,7 +130,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);
-@@ -140,6 +190,16 @@ public class PrivacySettings
+@@ -155,6 +205,16 @@ public class PrivacySettings
          return true;
      }
  
@@ -147,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onResume() {
          super.onResume();
-@@ -150,7 +210,7 @@ public class PrivacySettings
+@@ -165,7 +225,7 @@ public class PrivacySettings
       * Updates the summaries for several preferences.
       */
      public void updateSummaries() {

+ 26 - 26
build/patches/Multiple-fingerprinting-mitigations.patch

@@ -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
-@@ -2301,6 +2301,7 @@ static_library("browser") {
+@@ -2311,6 +2311,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
-@@ -171,6 +171,7 @@
+@@ -173,6 +173,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/experiments/memory_ablation_experiment.h"
  #include "third_party/blink/public/common/features.h"
-@@ -2643,6 +2644,18 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2674,6 +2675,18 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName,
       flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll,
       SINGLE_VALUE_TYPE(switches::kEnableWebRtcSrtpAesGcm)},
@@ -97,7 +97,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
-@@ -219,6 +219,7 @@ source_set("browser") {
+@@ -218,6 +218,7 @@ source_set("browser") {
      "//third_party/libyuv",
      "//third_party/re2",
      "//third_party/sqlite",
@@ -108,7 +108,7 @@ 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
-@@ -214,6 +214,7 @@
+@@ -212,6 +212,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"
@@ -116,7 +116,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content
  #include "third_party/skia/include/core/SkBitmap.h"
  #include "ui/accessibility/accessibility_switches.h"
  #include "ui/base/ui_base_switches.h"
-@@ -3184,6 +3185,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
+@@ -3248,6 +3249,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
      switches::kDisableBreakpad,
      switches::kDisableDatabases,
      switches::kDisableFileSystem,
@@ -129,7 +129,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content
 diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
 --- a/content/child/BUILD.gn
 +++ b/content/child/BUILD.gn
-@@ -103,6 +103,7 @@ target(link_target_type, "child") {
+@@ -104,6 +104,7 @@ target(link_target_type, "child") {
      "//third_party/blink/public/common",
      "//third_party/blink/public/strings",
      "//third_party/ced",
@@ -149,7 +149,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.
  #if defined(OS_ANDROID)
  #include "base/android/build_info.h"
  #endif
-@@ -540,6 +542,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs(
+@@ -545,6 +547,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs(
    // They're moved here to distinguish them from actual base checks
    WebRuntimeFeatures::EnableOverlayScrollbars(ui::IsOverlayScrollbarEnabled());
  
@@ -166,7 +166,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.
 diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
 --- a/third_party/blink/public/platform/web_runtime_features.h
 +++ b/third_party/blink/public/platform/web_runtime_features.h
-@@ -199,6 +199,9 @@ class WebRuntimeFeatures {
+@@ -209,6 +209,9 @@ class WebRuntimeFeatures {
    BLINK_PLATFORM_EXPORT static void EnableGetDisplayMedia(bool);
    BLINK_PLATFORM_EXPORT static void EnableGetCurrentBrowsingContextMedia(bool);
    BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
@@ -179,7 +179,7 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa
 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
-@@ -42,6 +42,7 @@
+@@ -43,6 +43,7 @@
  #include "base/macros.h"
  #include "base/metrics/histogram_functions.h"
  #include "base/optional.h"
@@ -187,7 +187,7 @@ 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"
-@@ -2433,6 +2434,23 @@ void Document::UpdateStyleAndLayoutTree() {
+@@ -2389,6 +2390,23 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() {
  #if DCHECK_IS_ON()
    AssertLayoutTreeUpdated(*this);
  #endif
@@ -214,7 +214,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
-@@ -442,6 +442,10 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -444,6 +444,10 @@ class CORE_EXPORT Document : public ContainerNode,
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -225,7 +225,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;
-@@ -1970,6 +1974,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -2001,6 +2005,9 @@ class CORE_EXPORT Document : public ContainerNode,
  
    base::ElapsedTimer start_time_;
  
@@ -238,7 +238,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
-@@ -2057,6 +2057,11 @@ DOMRectList* Element::getClientRects() {
+@@ -2075,6 +2075,11 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -250,14 +250,14 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
    return MakeGarbageCollected<DOMRectList>(quads);
  }
  
-@@ -2074,6 +2079,9 @@ DOMRect* Element::getBoundingClientRect() {
+@@ -2092,6 +2097,9 @@ FloatRect Element::GetBoundingClientRectNoLifecycleUpdate() const {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
 +  if (RuntimeEnabledFeatures::FingerprintingClientRectsNoiseEnabled()) {
 +    result.Scale(GetDocument().GetNoiseFactorX(), GetDocument().GetNoiseFactorY());
 +  }
-   return DOMRect::FromFloatRect(result);
+   return result;
  }
  
 diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/renderer/core/dom/range.cc
@@ -332,7 +332,7 @@ diff --git a/third_party/blink/renderer/core/html/canvas/text_metrics.h b/third_
 diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
 +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
-@@ -26,6 +26,7 @@
+@@ -22,6 +22,7 @@
  #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"
@@ -340,7 +340,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c
  
  namespace blink {
  
-@@ -1772,6 +1773,12 @@ ImageData* BaseRenderingContext2D::getImageDataInternal(
+@@ -1978,6 +1979,12 @@ ImageData* BaseRenderingContext2D::getImageDataInternal(
            snapshot->PaintImageForCurrentFrame().GetSkImageInfo().bounds();
        DCHECK(!bounds.intersect(SkIRect::MakeXYWH(sx, sy, sw, sh)));
      }
@@ -356,7 +356,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c
 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
-@@ -965,9 +965,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+@@ -964,9 +964,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
    else
      direction = ToTextDirection(GetState().GetDirection(), canvas());
  
@@ -372,11 +372,11 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering
 +  return text_metrics;
  }
  
- void CanvasRenderingContext2D::DrawTextInternal(
+ void CanvasRenderingContext2D::fillFormattedText(
 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
-@@ -1602,7 +1602,9 @@ component("platform") {
+@@ -1615,7 +1615,9 @@ component("platform") {
      "//third_party/blink/renderer:non_test_config",
    ]
  
@@ -387,9 +387,9 @@ 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",
-@@ -1666,6 +1668,7 @@ component("platform") {
+@@ -1681,6 +1683,7 @@ component("platform") {
+     "//third_party/blink/public/strings",
      "//third_party/blink/renderer/platform/wtf",
-     "//third_party/blink/renderer/platform/wtf:buildflags",
      "//third_party/ced",
 +    "//third_party/ungoogled:switches",
      "//third_party/emoji-segmenter",
@@ -398,7 +398,7 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re
 diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
 +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-@@ -643,4 +643,16 @@ void WebRuntimeFeatures::EnableCSSColorSchemeUARendering(bool enable) {
+@@ -671,4 +671,16 @@ void WebRuntimeFeatures::EnableCSSColorSchemeUARendering(bool enable) {
    RuntimeEnabledFeatures::SetCSSColorSchemeUARenderingEnabled(enable);
  }
  
@@ -461,7 +461,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
  namespace blink {
  
  scoped_refptr<StaticBitmapImage> StaticBitmapImage::Create(
-@@ -79,4 +84,154 @@ void StaticBitmapImage::DrawHelper(
+@@ -81,4 +86,154 @@ void StaticBitmapImage::DrawHelper(
                          WebCoreClampingModeToSkiaRectConstraint(clamp_mode));
  }
  
@@ -631,7 +631,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
-@@ -863,6 +863,15 @@
+@@ -919,6 +919,15 @@
        name: "FeaturePolicyReporting",
        status: "experimental"
      },

+ 2 - 2
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
-@@ -571,6 +571,7 @@ public class ExternalNavigationHandler {
+@@ -572,6 +572,7 @@ public class ExternalNavigationHandler {
              startActivity(intent, false, mDelegate);
              return OverrideUrlLoadingResult.forExternalIntent();
          }
@@ -17,7 +17,7 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component
      }
  
      private static void loadUrlWithReferrer(
-@@ -1229,6 +1230,13 @@ public class ExternalNavigationHandler {
+@@ -1230,6 +1231,13 @@ public class ExternalNavigationHandler {
                      OverrideUrlLoadingAsyncActionType.UI_GATING_BROWSER_NAVIGATION);
          }
  

+ 55 - 33
build/patches/Remove-SMS-integration.patch

@@ -3,16 +3,42 @@ Date: Sun, 3 Nov 2019 08:22:29 +0100
 Subject: Remove SMS integration
 
 ---
- .../content/browser/sms/SmsProviderGms.java   |  9 +---
+ .../content/browser/sms/SmsProviderGms.java   | 21 +--------
  .../browser/sms/SmsUserConsentReceiver.java   | 46 ++-----------------
- .../browser/sms/SmsVerificationReceiver.java  | 41 ++++-------------
+ .../browser/sms/SmsVerificationReceiver.java  | 37 ++++-----------
  .../content/browser/sms/Wrappers.java         | 28 +----------
- 4 files changed, 14 insertions(+), 110 deletions(-)
+ 4 files changed, 16 insertions(+), 116 deletions(-)
 
 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
-@@ -123,13 +123,6 @@ public class SmsProviderGms {
+@@ -4,9 +4,6 @@
+ 
+ package org.chromium.content.browser.sms;
+ 
+-import com.google.android.gms.common.ConnectionResult;
+-import com.google.android.gms.common.GoogleApiAvailability;
+-
+ import org.chromium.base.ContextUtils;
+ import org.chromium.base.Log;
+ import org.chromium.base.annotations.CalledByNative;
+@@ -47,15 +44,6 @@ public class SmsProviderGms {
+ 
+         mContext = new Wrappers.WebOTPServiceContext(ContextUtils.getApplicationContext(), this);
+ 
+-        boolean isVerificationBackendAvailable =
+-                GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(
+-                        mContext, MIN_GMS_VERSION_NUMBER_WITH_CODE_BROWSER_BACKEND)
+-                == ConnectionResult.SUCCESS;
+-        if (isVerificationBackendAvailable
+-                && (mBackend == GmsBackend.AUTO || mBackend == GmsBackend.VERIFICATION)) {
+-            mVerificationReceiver = new SmsVerificationReceiver(this, mContext);
+-        }
+-
+         if (mBackend == GmsBackend.AUTO || mBackend == GmsBackend.USER_CONSENT) {
+             mUserConsentReceiver = new SmsUserConsentReceiver(this, mContext);
+         }
+@@ -133,13 +121,6 @@ public class SmsProviderGms {
      }
  
      public Wrappers.SmsRetrieverClientWrapper getClient() {
@@ -26,7 +52,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
          return mClient;
      }
  
-@@ -151,4 +144,4 @@ public class SmsProviderGms {
+@@ -161,4 +142,4 @@ public class SmsProviderGms {
          void onCancel(long nativeSmsProviderGms);
          void onNotAvailable(long nativeSmsProviderGms);
      }
@@ -50,7 +76,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
  import org.chromium.base.Log;
  import org.chromium.ui.base.WindowAndroid;
  
-@@ -34,28 +27,11 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
+@@ -34,29 +27,12 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
          mDestroyed = false;
          mProvider = provider;
          mContext = context;
@@ -73,13 +99,14 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
      }
  
      public void destroy() {
+         if (mDestroyed) return;
          if (DEBUG) Log.d(TAG, "Destroying SmsUserConsentReceiver.");
          mDestroyed = true;
 -        mContext.unregisterReceiver(this);
      }
  
      @Override
-@@ -66,7 +42,7 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
+@@ -67,7 +43,7 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
              return;
          }
  
@@ -88,7 +115,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
              return;
          }
  
-@@ -100,28 +76,14 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
+@@ -101,28 +77,14 @@ public class SmsUserConsentReceiver extends BroadcastReceiver {
                  if (DEBUG) Log.d(TAG, "Timeout");
                  mProvider.onTimeout();
                  break;
@@ -140,17 +167,10 @@ 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;
-@@ -54,35 +44,18 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
-         mDestroyed = false;
-         mProvider = provider;
-         mContext = context;
--
--        // A broadcast receiver is registered upon the creation of this class which happens when the
--        // SMS Retriever API or SMS Browser Code API is used for the first time since chrome last
--        // restarted (which, on android, happens frequently). The broadcast receiver is fairly
--        // 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.
+@@ -61,27 +51,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.
 -        if (DEBUG) Log.i(TAG, "Registering intent filters.");
 -        IntentFilter filter = new IntentFilter();
 -        filter.addAction(SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION);
@@ -163,21 +183,22 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
      }
  
      public void destroy() {
+-        if (mDestroyed) return;
++        /*if (mDestroyed) return;
          if (DEBUG) Log.d(TAG, "Destroying SmsVerificationReceiver.");
          mDestroyed = true;
 -        mContext.unregisterReceiver(this);
++        mContext.unregisterReceiver(this); */
      }
  
      @Override
      public void onReceive(Context context, Intent intent) {
-         if (DEBUG) Log.d(TAG, "Received something!");
+-        if (DEBUG) Log.d(TAG, "Received something!");
++        /*if (DEBUG) Log.d(TAG, "Received something!");
  
--        if (mDestroyed) {
-+        /*if (mDestroyed) {
+         if (mDestroyed) {
              return;
-         }
- 
-@@ -113,7 +86,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -114,7 +95,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
                  if (DEBUG) Log.d(TAG, "Timeout");
                  mProvider.onTimeout();
                  break;
@@ -186,7 +207,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
      }
  
      public void onPermissionDone(WindowAndroid window, int resultCode) {
-@@ -133,7 +106,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -134,7 +115,7 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
       * task.
       */
      public void onRetrieverTaskFailure(WindowAndroid window, Exception e) {
@@ -195,23 +216,24 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Sm
          BackendAvailability availability = BackendAvailability.AVAILABLE;
          ApiException exception = (ApiException) e;
          if (exception.getStatusCode() == SmsRetrieverStatusCodes.API_NOT_CONNECTED) {
-@@ -175,18 +148,20 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+@@ -176,11 +157,12 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
          } else {
              Log.w(TAG, "Unexpected exception", e);
          }
 -        reportBackendAvailability(availability);
-+        reportBackendAvailability(availability);*/
++        reportBackendAvailability(availability); */
 +        Log.w(TAG, "Unexpected exception", e);
      }
  
      public void listen(WindowAndroid window) {
 -        Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient();
-+        /*Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient();
++        /* Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient();
          Task<Void> task = client.startSmsCodeBrowserRetriever();
  
-         task.addOnSuccessListener(
-                 unused -> { this.reportBackendAvailability(BackendAvailability.AVAILABLE); });
-         task.addOnFailureListener((Exception e) -> { this.onRetrieverTaskFailure(window, e); });
+         task.addOnSuccessListener(unused -> {
+@@ -192,7 +174,8 @@ public class SmsVerificationReceiver extends BroadcastReceiver {
+             mProvider.destoryVerificationReceiver();
+         });
  
 -        if (DEBUG) Log.d(TAG, "Installed task");
 +        if (DEBUG) Log.d(TAG, "Installed task"); */
@@ -267,7 +289,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Wr
      }
  
      /**
-@@ -77,12 +57,6 @@ class Wrappers {
+@@ -83,12 +63,6 @@ class Wrappers {
  
          @Override
          public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {

Файловите разлики са ограничени, защото са твърде много
+ 224 - 268
build/patches/Remove-binary-blob-integrations.patch


+ 12 - 12
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
-@@ -136,6 +136,8 @@ import org.chromium.chrome.browser.profiles.Profile;
- import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
- import org.chromium.chrome.browser.share.ShareDelegate;
- import org.chromium.chrome.browser.share.ShareDelegateImpl;
+@@ -136,6 +136,8 @@ import org.chromium.chrome.browser.page_info.ChromePageInfoControllerDelegate;
+ import org.chromium.chrome.browser.page_info.ChromePermissionParamsListBuilderDelegate;
+ import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
+ import org.chromium.chrome.browser.preferences.Pref;
 +import org.chromium.chrome.browser.suggestions.SuggestionsDependencyFactory;
 +import org.chromium.chrome.browser.suggestions.mostvisited.MostVisitedSites;
- import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
- import org.chromium.chrome.browser.tab.Tab;
- import org.chromium.chrome.browser.tab.TabHidingType;
-@@ -208,6 +210,8 @@ import org.chromium.url.GURL;
+ import org.chromium.chrome.browser.printing.TabPrinter;
+ import org.chromium.chrome.browser.profiles.Profile;
+ import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
+@@ -223,6 +225,8 @@ import org.chromium.url.GURL;
  import org.chromium.url.Origin;
  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;
-@@ -252,6 +256,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -275,6 +279,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;
  
-@@ -1243,6 +1248,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1320,6 +1325,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              mCompositorViewHolder = null;
          }
  
@@ -47,7 +47,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
          onDestroyInternal();
  
          if (mDidAddPolicyChangeListener) {
-@@ -1491,6 +1501,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1597,6 +1607,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          // Defense in depth against the UI being erroneously enabled.
          BookmarkBridge bridge = mBookmarkBridgeSupplier.get();
@@ -56,7 +56,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
 +            mMostVisitedSites =
 +                SuggestionsDependencyFactory.getInstance().createMostVisitedSites(Profile.getLastUsedRegularProfile());
 +        }
-+        mMostVisitedSites.removeBlocklistedUrl(new GURL(tabToBookmark.getOriginalUrl()));
++        mMostVisitedSites.removeBlocklistedUrl(tabToBookmark.getOriginalUrl());	
 +
          if (bridge == null || !bridge.isEditBookmarksEnabled()) {
              assert false;

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

@@ -13,7 +13,7 @@ Subject: Remove help menu item
 diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
 --- a/chrome/android/java/res/menu/main_menu.xml
 +++ b/chrome/android/java/res/menu/main_menu.xml
-@@ -111,9 +111,6 @@
+@@ -114,9 +114,6 @@
          <item android:id="@+id/preferences_id"
              android:title="@string/menu_settings"
              android:icon="@drawable/settings_cog" />
@@ -39,13 +39,13 @@ 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
-@@ -1991,15 +1991,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2142,15 +2142,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  
 -        if (id == R.id.help_id) {
 -            String url = currentTab != null ? currentTab.getUrlString() : "";
--            Profile profile = mTabModelSelector.isIncognitoSelected()
+-            Profile profile = getTabModelSelector().isIncognitoSelected()
 -                    ? Profile.getLastUsedRegularProfile().getPrimaryOTRProfile()
 -                    : Profile.getLastUsedRegularProfile();
 -            startHelpAndFeedback(url, "MobileMenuFeedback", profile);
@@ -58,7 +58,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/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
-@@ -482,7 +482,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity<BaseCustomTab
+@@ -497,7 +497,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity<BaseCustomTab
      @Override
      public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
          // Disable creating new tabs, bookmark, history, print, help, focus_url, etc.

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

@@ -0,0 +1,23 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sat, 3 Apr 2021 23:07:41 +0200
+Subject: Remove offline measurement background task
+
+---
+ .../chrome/browser/init/ProcessInitializationHandler.java       | 2 --
+ 1 file changed, 2 deletions(-)
+
+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
+@@ -418,8 +418,6 @@ public class ProcessInitializationHandler {
+                 () -> VideoTutorialShareHelper.saveUrlsToSharedPrefs());
+         deferredStartupHandler.addDeferredTask(
+                 () -> TosDialogBehaviorSharedPrefInvalidator.refreshSharedPreferenceIfTosSkipped());
+-        deferredStartupHandler.addDeferredTask(
+-                () -> OfflineMeasurementsBackgroundTask.maybeScheduleTaskAndReportMetrics());
+         deferredStartupHandler.addDeferredTask(() -> QueryTileUtils.isQueryTilesEnabledOnNTP());
+     }
+ 
+-- 
+2.17.1
+

Файловите разлики са ограничени, защото са твърде много
+ 223 - 223
build/patches/Remove-signin-and-data-saver-integrations.patch


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

@@ -20,27 +20,27 @@ Disable search-ready omnibox by default
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java
-@@ -68,6 +68,7 @@ class DropdownItemViewInfoListBuilder {
-     private int mDropdownHeight;
+@@ -66,6 +66,7 @@ class DropdownItemViewInfoListBuilder {
      private boolean mEnableAdaptiveSuggestionsCount;
+     private boolean mEnableNativeVoiceSuggestProvider;
      private boolean mBuiltListHasFullyConcealedElements;
 +    private EditUrlSuggestionProcessor mEditUrlSuggestionProcessor;
  
-     DropdownItemViewInfoListBuilder(AutocompleteController controller) {
-         mPriorityOrderedSuggestionProcessors = new ArrayList<>();
-@@ -98,8 +99,9 @@ class DropdownItemViewInfoListBuilder {
+     DropdownItemViewInfoListBuilder(
+             AutocompleteController controller, @NonNull Supplier<Tab> tabSupplier) {
+@@ -96,8 +97,9 @@ class DropdownItemViewInfoListBuilder {
          final Supplier<BookmarkBridge> bookmarkSupplier = () -> mBookmarkBridge;
  
          mHeaderProcessor = new HeaderProcessor(context, host, delegate);
 -        registerSuggestionProcessor(new EditUrlSuggestionProcessor(
--                context, host, delegate, iconBridgeSupplier, tabSupplier, shareSupplier));
+-                context, host, delegate, iconBridgeSupplier, mActivityTabSupplier, shareSupplier));
 +        mEditUrlSuggestionProcessor = new EditUrlSuggestionProcessor(
-+                context, host, delegate, iconBridgeSupplier, tabSupplier, shareSupplier);
++                context, host, delegate, iconBridgeSupplier, mActivityTabSupplier, shareSupplier);
 +        registerSuggestionProcessor(mEditUrlSuggestionProcessor);
          registerSuggestionProcessor(
                  new AnswerSuggestionProcessor(context, host, textProvider, imageFetcherSupplier));
          registerSuggestionProcessor(
-@@ -235,6 +237,10 @@ class DropdownItemViewInfoListBuilder {
+@@ -224,6 +226,10 @@ class DropdownItemViewInfoListBuilder {
  
      /** Signals that native initialization has completed. */
      void onNativeInitialized() {
@@ -50,11 +50,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggest
 +
          mEnableAdaptiveSuggestionsCount =
                  ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_ADAPTIVE_SUGGESTIONS_COUNT);
- 
+         mEnableNativeVoiceSuggestProvider = ChromeFeatureList.isEnabled(
 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
-@@ -3182,6 +3182,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3255,6 +3255,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kAndroidAutofillAccessibilityName,
       flag_descriptions::kAndroidAutofillAccessibilityDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(features::kAndroidAutofillAccessibility)},
@@ -67,7 +67,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
-@@ -2034,6 +2034,11 @@
+@@ -2161,6 +2161,11 @@
      //  with neural net palm detection.
      "expiry_milestone": 90
    },
@@ -82,7 +82,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
-@@ -3184,6 +3184,11 @@ const char kSafeBrowsingUseLocalBlacklistsV2Description[] =
+@@ -3325,6 +3325,11 @@ const char kSafeBrowsingUseLocalBlacklistsV2Description[] =
      "process to check the Safe Browsing reputation of URLs without calling "
      "into GmsCore for every URL.";
  
@@ -97,7 +97,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
-@@ -1837,6 +1837,9 @@ extern const char kSafeBrowsingSectionUiAndroidDescription[];
+@@ -1920,6 +1920,9 @@ extern const char kSafeBrowsingSectionUiAndroidDescription[];
  extern const char kSafeBrowsingUseLocalBlacklistsV2Name[];
  extern const char kSafeBrowsingUseLocalBlacklistsV2Description[];
  
@@ -110,17 +110,17 @@ 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
-@@ -207,6 +207,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
+@@ -211,6 +211,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
      &kReachedCodeProfiler,
      &kReaderModeInCCT,
      &kReengagementNotification,
 +    &kSearchReadyOmniboxFeature,
      &kRelatedSearches,
+     &kRelatedSearchesUi,
      &kSearchEnginePromoExistingDevice,
-     &kSearchEnginePromoNewDevice,
-@@ -587,6 +588,9 @@ const base::Feature kReengagementNotification{
- const base::Feature kRelatedSearches{"RelatedSearches",
-                                      base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -602,6 +603,9 @@ const base::Feature kRelatedSearches{"RelatedSearches",
+ const base::Feature kRelatedSearchesUi{"RelatedSearchesUi",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
  
 +const base::Feature kSearchReadyOmniboxFeature{
 +    "SearchReadyOmnibox", base::FEATURE_DISABLED_BY_DEFAULT};
@@ -131,8 +131,8 @@ 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
-@@ -104,6 +104,7 @@ extern const base::Feature kReaderModeInCCT;
- extern const base::Feature kRelatedSearches;
+@@ -106,6 +106,7 @@ extern const base::Feature kRelatedSearches;
+ extern const base::Feature kRelatedSearchesUi;
  extern const base::Feature kSearchEnginePromoExistingDevice;
  extern const base::Feature kSearchEnginePromoNewDevice;
 +extern const base::Feature kSearchReadyOmniboxFeature;
@@ -142,7 +142,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
-@@ -356,6 +356,7 @@ public abstract class ChromeFeatureList {
+@@ -374,6 +374,7 @@ public abstract class ChromeFeatureList {
      public static final String OMNIBOX_ADAPTIVE_SUGGESTIONS_COUNT =
              "OmniboxAdaptiveSuggestionsCount";
      public static final String OMNIBOX_ASSISTANT_VOICE_SEARCH = "OmniboxAssistantVoiceSearch";

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

@@ -28,7 +28,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
-@@ -854,6 +854,7 @@ chrome_java_resources = [
+@@ -809,6 +809,7 @@ chrome_java_resources = [
    "java/res/layout/new_tab_page_snippets_expandable_header.xml",
    "java/res/layout/new_tab_page_snippets_expandable_header_with_menu.xml",
    "java/res/layout/new_tab_page_tile_grid_placeholder.xml",
@@ -39,7 +39,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
-@@ -590,6 +590,7 @@ chrome_java_sources = [
+@@ -591,6 +591,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",
@@ -191,15 +191,15 @@ new file mode 100644
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
-@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.cryptids.ProbabilisticCryptidRenderer;
- import org.chromium.chrome.browser.explore_sites.ExperimentalExploreSitesSection;
- import org.chromium.chrome.browser.explore_sites.ExploreSitesBridge;
+@@ -38,6 +38,7 @@ import org.chromium.chrome.browser.explore_sites.ExploreSitesBridge;
  import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
+ import org.chromium.chrome.browser.lens.LensEntryPoint;
+ import org.chromium.chrome.browser.lens.LensFeature;
 +import org.chromium.chrome.browser.flags.ChromeFeatureList;
  import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
  import org.chromium.chrome.browser.native_page.ContextMenuManager;
  import org.chromium.chrome.browser.ntp.LogoBridge.Logo;
-@@ -104,6 +105,8 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -108,6 +109,8 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
      private UiConfig mUiConfig;
      private CallbackController mCallbackController = new CallbackController();
  
@@ -208,15 +208,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
      /**
       * Whether the tiles shown in the layout have finished loading.
       * With {@link #mHasShownView}, it's one of the 2 flags used to track initialisation progress.
-@@ -270,6 +273,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -281,6 +284,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
          }
          mNoSearchLogoSpacer = findViewById(R.id.no_search_logo_spacer);
  
 +        initializeShortcuts();
          initializeSearchBoxTextView();
          initializeVoiceSearchButton();
-         initializeLayoutChangeListener();
-@@ -558,10 +562,16 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+         initializeLensButton();
+@@ -594,10 +598,16 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
       * Updates the padding for the tile grid based on what is shown above it.
       */
      private void updateTileGridPadding() {
@@ -235,7 +235,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
          mSiteSectionViewHolder.itemView.setPadding(
                  0, paddingTop, 0, mSiteSectionViewHolder.itemView.getPaddingBottom());
      }
-@@ -952,6 +962,22 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -1011,6 +1021,22 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
          return iphCommandBuilder;
      }
  
@@ -306,7 +306,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
-@@ -3734,6 +3734,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3831,6 +3831,9 @@ const FeatureEntry kFeatureEntries[] = {
       SINGLE_VALUE_TYPE_AND_VALUE(
           switches::kForceShowUpdateMenuItemCustomSummary,
           "Custom Summary")},
@@ -319,7 +319,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
-@@ -3227,6 +3227,9 @@ const char kStartSurfaceAndroidDescription[] =
+@@ -3364,6 +3364,9 @@ const char kStartSurfaceAndroidDescription[] =
      "Enable showing the start surface when launching Chrome via the "
      "launcher.";
  
@@ -332,7 +332,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
-@@ -1861,6 +1861,9 @@ extern const char kSiteIsolationForPasswordSitesDescription[];
+@@ -1944,6 +1944,9 @@ extern const char kSiteIsolationForPasswordSitesDescription[];
  extern const char kSmartSuggestionForLargeDownloadsName[];
  extern const char kSmartSuggestionForLargeDownloadsDescription[];
  
@@ -345,15 +345,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
-@@ -188,6 +188,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
-     &kEnhancedProtectionPromoCard,
+@@ -193,6 +193,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
      &kEphemeralTabUsingBottomSheet,
+     &kExperimentsForAgsa,
      &kExploreSites,
 +    &kSimplifiedNTP,
      &kFocusOmniboxInIncognitoTabIntents,
-     &kGPayAppDynamicUpdate,
      &kHandleMediaIntents,
-@@ -567,6 +568,9 @@ const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2",
+     &kHomepagePromoCard,
+@@ -579,6 +580,9 @@ const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2",
  const base::Feature kOfflineMeasurementsBackgroundTask{
      "OfflineMeasurementsBackgroundTask", base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -366,7 +366,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
-@@ -96,6 +96,7 @@ extern const base::Feature kNotificationSuspender;
+@@ -97,6 +97,7 @@ extern const base::Feature kNotificationSuspender;
  extern const base::Feature kOfflineIndicatorV2;
  extern const base::Feature kOfflineMeasurementsBackgroundTask;
  extern const base::Feature kOmniboxSpareRenderer;
@@ -377,7 +377,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
-@@ -334,6 +334,7 @@ public abstract class ChromeFeatureList {
+@@ -352,6 +352,7 @@ public abstract class ChromeFeatureList {
      public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI =
              "LookalikeUrlNavigationSuggestionsUI";
      public static final String MARK_HTTP_AS = "MarkHttpAs";
@@ -410,7 +410,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
-@@ -6821,6 +6821,24 @@
+@@ -6917,6 +6917,24 @@
              ]
          }
      ],

+ 4 - 4
build/patches/Restore-enable-horizontal-tab-switcher-flag.patch

@@ -9,15 +9,15 @@ Subject: Restore enable-horizontal-tab-switcher flag
 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
-@@ -1757,7 +1757,7 @@
+@@ -1889,7 +1889,7 @@
    {
-     "name": "enable-horizontal-tab-switcher",
-     "owners": [ "memex-team@google.com" ],
+     "name": "enable-hosted-app-quit-notification",
+     "owners": [ "ccameron" ],
 -    "expiry_milestone": 77
 +    "expiry_milestone": -1
    },
    {
-     "name": "enable-hosted-app-quit-notification",
+     "name": "enable-hostname-setting",
 -- 
 2.17.1
 

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

@@ -13,7 +13,7 @@ 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
-@@ -3207,6 +3207,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3280,6 +3280,10 @@ const FeatureEntry kFeatureEntries[] = {
       SINGLE_VALUE_TYPE(switches::kHostedAppQuitNotification)},
  #endif  // OS_MAC
  #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-metadata.json b/chrome/browser/flag-metadata.json
 --- a/chrome/browser/flag-metadata.json
 +++ b/chrome/browser/flag-metadata.json
-@@ -968,6 +968,11 @@
+@@ -1091,6 +1091,11 @@
      // enable-javascript-harmony.
      "expiry_milestone": -1
    },
@@ -42,7 +42,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
-@@ -3112,6 +3112,10 @@ const char kReadLaterDescription[] =
+@@ -3241,6 +3241,10 @@ const char kReadLaterDescription[] =
      "Allow users to save tabs for later. Enables a new button and menu for "
      "accessing tabs saved for later.";
  
@@ -56,7 +56,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
-@@ -1799,6 +1799,9 @@ extern const char kQueryTilesMoreTrendingDescription[];
+@@ -1876,6 +1876,9 @@ extern const char kQueryTilesMoreTrendingDescription[];
  extern const char kQueryTilesSwapTrendingName[];
  extern const char kQueryTilesSwapTrendingDescription[];
  

+ 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
-@@ -297,6 +297,15 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = {
+@@ -298,6 +298,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,
-@@ -3301,6 +3310,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3378,6 +3387,9 @@ const FeatureEntry kFeatureEntries[] = {
           feature_engagement::kIPHDemoMode,
           feature_engagement::kIPHDemoModeChoiceVariations,
           "IPH_DemoMode")},
@@ -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
-@@ -3360,6 +3360,11 @@
+@@ -3560,6 +3560,11 @@
      ],
      "expiry_milestone": 95
    },
@@ -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
-@@ -1523,6 +1523,14 @@ const char kUseMultiloginEndpointName[] = "Use Multilogin endpoint.";
+@@ -1601,6 +1601,14 @@ const char kUseMultiloginEndpointName[] = "Use Multilogin endpoint.";
  const char kUseMultiloginEndpointDescription[] =
      "Use Gaia OAuth multilogin for identity consistency.";
  
@@ -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
-@@ -911,6 +911,13 @@ extern const char kNotificationsNativeFlagDescription[];
+@@ -959,6 +959,13 @@ extern const char kNotificationsSystemFlagDescription[];
  extern const char kUseMultiloginEndpointName[];
  extern const char kUseMultiloginEndpointDescription[];
  

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

@@ -182,7 +182,7 @@ diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_setti
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
 +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
-@@ -111,6 +111,10 @@ public class ContentSettingsResources {
+@@ -113,6 +113,10 @@ public class ContentSettingsResources {
                      new ResourceItem(R.drawable.infobar_downloading,
                              R.string.automatic_downloads_permission_title, ContentSettingValues.ASK,
                              ContentSettingValues.BLOCK, R.string.website_settings_category_ask, 0));
@@ -217,7 +217,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
-@@ -128,6 +128,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -134,6 +134,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
                  return "bluetooth_scanning_permission_list";
              case ContentSettingsType.COOKIES:
                  return "cookies_permission_list";
@@ -226,7 +226,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              case ContentSettingsType.IDLE_DETECTION:
                  return "idle_detection_permission_list";
              case ContentSettingsType.JAVASCRIPT:
-@@ -471,6 +473,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -524,6 +526,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
  
              if (type == ContentSettingsType.ADS) {
                  setUpAdsPreference(preference);
@@ -235,7 +235,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              } else if (type == ContentSettingsType.SOUND) {
                  setUpSoundPreference(preference);
              } else if (type == ContentSettingsType.JAVASCRIPT) {
-@@ -982,6 +986,24 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -1046,6 +1050,24 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
          }
      }
  
@@ -439,7 +439,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
-@@ -179,6 +179,7 @@ bool RendererContentSettingRules::IsRendererContentSetting(
+@@ -178,6 +178,7 @@ bool RendererContentSettingRules::IsRendererContentSetting(
      ContentSettingsType content_type) {
    return content_type == ContentSettingsType::IMAGES ||
           content_type == ContentSettingsType::JAVASCRIPT ||
@@ -575,7 +575,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in
 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
-@@ -278,6 +278,9 @@
+@@ -321,6 +321,9 @@
      <message name="IDS_PAGE_INFO_TYPE_SOUND" desc="The label used for the sound permission controls in the Page Info popup.">
        Sound
      </message>

+ 4 - 4
build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch

@@ -11,7 +11,7 @@ Avoid displaying info about intrusive ads
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
-@@ -472,6 +472,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -525,6 +525,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
                  setUpSoundPreference(preference);
              } else if (type == ContentSettingsType.JAVASCRIPT) {
                  setUpJavascriptPreference(preference);
@@ -20,7 +20,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              } else if (type == ContentSettingsType.GEOLOCATION) {
                  setUpLocationPreference(preference);
              } else if (type == ContentSettingsType.NOTIFICATIONS) {
-@@ -787,16 +789,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -848,16 +850,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
      private void setUpAdsInformationalBanner() {
          // Add the informational banner which shows at the top of the UI if ad blocking is
          // activated on this site.
@@ -37,7 +37,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
      }
  
      private SiteSettingsCategory getWarningCategory() {
-@@ -987,17 +981,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -1051,17 +1045,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
          @Nullable
          Integer currentValue =
                  mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT);
@@ -79,7 +79,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
      /**
       * Updates the ads list preference based on whether the site is a candidate for blocking. This
       * has some custom behavior.
-@@ -1013,22 +1025,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -1077,22 +1089,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
              setupContentSettingsPreference(preference, null, false);
              return;
          }

+ 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
-@@ -294,16 +294,12 @@ config("compiler") {
+@@ -302,16 +302,12 @@ config("compiler") {
          cflags += [ "-fstack-protector" ]
        }
      } else if ((is_posix && !is_chromeos_ash && !is_nacl) || is_fuchsia) {

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

@@ -49,7 +49,7 @@ See also: https://github.com/bromite/bromite/wiki/TimezoneOverride
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
-@@ -40,6 +40,10 @@ import org.chromium.content_public.common.ContentSwitches;
+@@ -41,6 +41,10 @@ import org.chromium.content_public.common.ContentSwitches;
  
  import java.util.Set;
  
@@ -60,9 +60,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/C
  /**
   * A SiteSettingsDelegate instance that contains Chrome-specific Site Settings logic.
   */
-@@ -252,4 +256,16 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate {
+@@ -253,4 +257,16 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate {
+             mPrivacySandboxController.dismissSnackbar();
          }
-         mPrivacySandboxController.dismissSnackbar();
      }
 +
 +    // open wiki page for documentation about the timezone override feature
@@ -255,7 +255,7 @@ diff --git a/components/browser_ui/site_settings/android/java/res/xml/website_pr
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
 +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
-@@ -227,6 +227,11 @@ public class ContentSettingsResources {
+@@ -231,6 +231,11 @@ public class ContentSettingsResources {
                              ContentSettingValues.ASK, ContentSettingValues.BLOCK,
                              R.string.website_settings_category_vr_ask,
                              R.string.website_settings_category_vr_blocked));
@@ -267,7 +267,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              sResourceInfo = localMap;
          }
          return sResourceInfo;
-@@ -355,6 +360,23 @@ public class ContentSettingsResources {
+@@ -365,6 +370,23 @@ public class ContentSettingsResources {
          }
      }
  
@@ -291,7 +291,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
      /**
       * Returns the string resource id for a content type to show with a permission category.
       * @param enabled Whether the content type is enabled.
-@@ -369,7 +391,10 @@ public class ContentSettingsResources {
+@@ -379,7 +401,10 @@ public class ContentSettingsResources {
       * with a particular website.
       * @param value The ContentSetting for which we want the resource.
       */
@@ -303,7 +303,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
          switch (value) {
              case ContentSettingValues.ALLOW:
                  return R.string.website_settings_permissions_allow;
-@@ -458,6 +483,13 @@ public class ContentSettingsResources {
+@@ -468,6 +493,13 @@ public class ContentSettingsResources {
                  return descriptionIDs;
              }
          }
@@ -519,7 +519,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
 +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
-@@ -97,6 +97,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -103,6 +103,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
              ContentSettingsType.JAVASCRIPT,
              ContentSettingsType.POPUPS,
              ContentSettingsType.ADS,
@@ -527,7 +527,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              ContentSettingsType.BACKGROUND_SYNC,
              ContentSettingsType.AUTOMATIC_DOWNLOADS,
              ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER,
-@@ -135,6 +136,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -141,6 +142,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
                  return "popup_permission_list";
              case ContentSettingsType.SOUND:
                  return "sound_permission_list";
@@ -536,7 +536,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
              case ContentSettingsType.AR:
                  return "ar_permission_list";
              case ContentSettingsType.MEDIASTREAM_CAMERA:
-@@ -867,11 +870,12 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -928,11 +931,12 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
          }
  
          ChromeSwitchPreference switchPreference = (ChromeSwitchPreference) preference;
@@ -548,9 +548,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
 -                        : getString(ContentSettingsResources.getCategorySummary(value)));
 +                        : getString(ContentSettingsResources.getCategorySummary(type, value)));
          switchPreference.setOnPreferenceChangeListener(this);
-     }
- 
-@@ -884,20 +888,43 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+         @ContentSettingsType
+         int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey());
+@@ -950,20 +954,43 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
              @ContentSettingValues @Nullable Integer value, boolean isEmbargoed) {
          ListPreference listPreference = (ListPreference) preference;
  
@@ -597,14 +597,14 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
          // TODO(crbug.com/735110): Figure out if this is the correct thing to do - here we are
          // effectively treating non-ALLOW values as BLOCK.
          int index = (value == ContentSettingValues.ALLOW ? 0 : 1);
-@@ -1132,7 +1159,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
+@@ -1196,7 +1223,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
              preference.setSummary(getDSECategorySummary(permission));
          } else {
              preference.setSummary(
 -                    getString(ContentSettingsResources.getCategorySummary(permission)));
 +                    getString(ContentSettingsResources.getCategorySummary(type, permission)));
          }
-         preference.setIcon(getContentSettingsIcon(type, permission, true));
+         preference.setIcon(getContentSettingsIcon(type, permission));
  
 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
@@ -1022,27 +1022,27 @@ diff --git a/components/browser_ui/strings/android/site_settings.grdp b/componen
 diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc
 --- a/components/content_settings/core/browser/content_settings_pref_provider.cc
 +++ b/components/content_settings/core/browser/content_settings_pref_provider.cc
-@@ -107,6 +107,8 @@ void PrefProvider::RegisterProfilePrefs(
-   registry->RegisterDictionaryPref(kDeprecatedNativeFileSystemReadGuardPref);
-   registry->RegisterDictionaryPref(kDeprecatedNativeFileSystemWriteGuardPref);
- #endif  // !defined(OS_ANDROID)
-+
-+  registry->RegisterStringPref(prefs::kContentSettingsCustomTimezone, std::string());
- }
- 
- PrefProvider::PrefProvider(PrefService* prefs,
-@@ -163,6 +165,10 @@ PrefProvider::PrefProvider(PrefService* prefs,
-                             num_exceptions);
+@@ -78,6 +78,8 @@ void PrefProvider::RegisterProfilePrefs(
+                                      info->GetPrefRegistrationFlags());
    }
  
++  registry->RegisterStringPref(prefs::kContentSettingsCustomTimezone, std::string());
++
+   // Obsolete prefs ----------------------------------------------------------
+ 
+   // These prefs have been removed, but need to be registered so they can
+@@ -157,6 +159,10 @@ PrefProvider::PrefProvider(PrefService* prefs,
+     event_args->set_number_of_exceptions(
+         num_exceptions);  // PrefProvider::PrefProvider.
+   });
++
 +  custom_timezone_ =
 +    prefs_->GetString(
 +          prefs::kContentSettingsCustomTimezone);
-+
-   TRACE_EVENT_END1("startup", "PrefProvider::PrefProvider",
-                    "NumberOfExceptions", num_exceptions);
  }
-@@ -318,4 +324,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) {
+ 
+ PrefProvider::~PrefProvider() {
+@@ -284,4 +290,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) {
    clock_ = clock;
  }
  
@@ -1152,7 +1152,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
-@@ -94,6 +94,7 @@ constexpr HistogramValue kHistogramValue[] = {
+@@ -93,6 +93,7 @@ constexpr HistogramValue kHistogramValue[] = {
      {ContentSettingsType::PERMISSION_AUTOREVOCATION_DATA, 72},
      {ContentSettingsType::FILE_SYSTEM_LAST_PICKED_DIRECTORY, 73},
      {ContentSettingsType::DISPLAY_CAPTURE, 74},
@@ -1160,7 +1160,7 @@ diff --git a/components/content_settings/core/common/content_settings.cc b/compo
  };
  
  }  // namespace
-@@ -180,7 +181,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
+@@ -179,7 +180,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
           content_type == ContentSettingsType::JAVASCRIPT ||
           content_type == ContentSettingsType::CLIENT_HINTS ||
           content_type == ContentSettingsType::POPUPS ||
@@ -1242,7 +1242,7 @@ diff --git a/components/content_settings/core/common/content_settings_types.h b/
 diff --git a/components/content_settings/core/common/pref_names.cc b/components/content_settings/core/common/pref_names.cc
 --- a/components/content_settings/core/common/pref_names.cc
 +++ b/components/content_settings/core/common/pref_names.cc
-@@ -128,4 +128,7 @@ const char kQuietNotificationPermissionUiEnablingMethod[] =
+@@ -134,4 +134,7 @@ const char kQuietNotificationPermissionUiDisabledTime[] =
  const char kNotificationsVibrateEnabled[] = "notifications.vibrate_enabled";
  #endif
  
@@ -1253,7 +1253,7 @@ diff --git a/components/content_settings/core/common/pref_names.cc b/components/
 diff --git a/components/content_settings/core/common/pref_names.h b/components/content_settings/core/common/pref_names.h
 --- a/components/content_settings/core/common/pref_names.h
 +++ b/components/content_settings/core/common/pref_names.h
-@@ -71,6 +71,8 @@ extern const char kQuietNotificationPermissionUiEnablingMethod[];
+@@ -72,6 +72,8 @@ extern const char kQuietNotificationPermissionUiDisabledTime[];
  extern const char kNotificationsVibrateEnabled[];
  #endif
  

+ 4 - 4
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
-@@ -7278,4 +7278,6 @@
+@@ -7315,4 +7315,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
-@@ -1198,4 +1198,35 @@
+@@ -1230,4 +1230,35 @@
  <translation id="983192555821071799">关闭所有标签页</translation>
  <translation id="987264212798334818">常规</translation>
  <translation id="996149300115483134">动态卡片上的菜单已关闭</translation>
@@ -65,7 +65,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
-@@ -307,4 +307,17 @@
+@@ -310,4 +310,17 @@
  <translation id="913657688200966289">在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中为 <ph name="APP_NAME" /> 开启这些权限。</translation>
  <translation id="965817943346481315">屏蔽会展示侵扰性或误导性广告的网站(推荐)</translation>
  <translation id="967624055006145463">已存储的数据</translation>
@@ -88,7 +88,7 @@ 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
-@@ -2102,4 +2102,7 @@
+@@ -2123,4 +2123,7 @@
      &lt;/ul&gt;</translation>
  <translation id="994346157028146140">JIS B1</translation>
  <translation id="997986563973421916">来自 Google Pay</translation>

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

@@ -12,7 +12,7 @@ Subject: Use 4 tile rows, never show logo
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
-@@ -116,7 +116,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -120,7 +120,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
       */
      private boolean mHasShownView;
  
@@ -21,7 +21,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
      private boolean mSearchProviderIsGoogle;
      private boolean mShowingNonStandardLogo;
  
-@@ -243,7 +243,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -254,7 +254,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
          mTileGroup = new TileGroup(tileRenderer, mManager, contextMenuManager, tileGroupDelegate,
                  /* observer = */ this, offlinePageBridge);
  
@@ -30,7 +30,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
          if (searchProviderIsGoogle && QueryTileUtils.isQueryTilesEnabledOnNTP()) {
              maxRows = QueryTileSection.getMaxRowsForMostVisitedTiles(getContext());
          }
-@@ -538,7 +538,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -574,7 +574,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
                  && mInitialized) {
              return;
          }

+ 0 - 1275
build/patches/User-agent-customization.patch

@@ -1,1275 +0,0 @@
-From: uazo <uazo@users.noreply.github.com>
-Date: Mon, 26 Oct 2020 16:50:15 +0000
-Subject: User agent customization
-
-Add flag to always view the desktop site for all websites
-Add possibility to define a custom User agent for mobile and desktop mode.
-Add possibility to reactivate the metatag view for desktop mode, allowing users to choose
-to use the flag in the hamburger menu to navigate with a custom useragent leaving the standard navigation unchanged.
----
- base/base_switches.cc                         |   2 +
- base/base_switches.h                          |   2 +
- chrome/android/chrome_java_resources.gni      |   2 +
- chrome/android/chrome_java_sources.gni        |   1 +
- .../layout/custom_useragent_preferences.xml   | 108 ++++++++++
- .../android/java/res/xml/main_preferences.xml |   5 +
- .../java/res/xml/useragent_preferences.xml    |  31 +++
- .../chrome/browser/app/ChromeActivity.java    |  21 +-
- .../init/ChromeBrowserInitializer.java        |   3 +
- .../PrivacyPreferencesManagerImpl.java        |  42 ++++
- .../settings/UserAgentPreferences.java        | 185 ++++++++++++++++++
- .../chromium/chrome/browser/tab/TabImpl.java  |  83 +++++++-
- .../browser/android/content/content_utils.cc  |  28 +++
- .../preferences/browser_prefs_android.cc      |   7 +
- .../privacy_preferences_manager_impl.cc       | 114 +++++++++++
- chrome/browser/android/tab_android.cc         |   5 +-
- chrome/browser/android/tab_android.h          |   3 +-
- .../browser/chrome_content_browser_client.cc  |   8 +
- .../preferences/ChromePreferenceKeys.java     |   7 +-
- .../settings/PrivacyPreferencesManager.java   |   8 +
- .../org/chromium/chrome/browser/tab/Tab.java  |   2 +
- .../browser/tabmodel/TabWindowManager.java    |   8 +
- .../tabmodel/TabWindowManagerImpl.java        |  18 ++
- .../strings/android_chrome_strings.grd        |  35 ++++
- chrome/common/pref_names.cc                   |  13 ++
- chrome/common/pref_names.h                    |   8 +
- .../widget/RadioButtonWithEditText.java       |  11 ++
- .../navigation_controller_android.cc          |   6 +-
- .../navigation_controller_android.h           |   3 +-
- .../renderer_host/render_process_host_impl.cc |   1 +
- .../browser/web_contents/web_contents_impl.cc |   4 +-
- .../framehost/NavigationControllerImpl.java   |   6 +-
- content/renderer/render_thread_impl.cc        |   1 -
- 33 files changed, 767 insertions(+), 14 deletions(-)
- create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml
- create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml
- create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
-
-diff --git a/base/base_switches.cc b/base/base_switches.cc
---- a/base/base_switches.cc
-+++ b/base/base_switches.cc
-@@ -164,6 +164,8 @@ const char kForceFieldTrialParams[] = "force-fieldtrial-params";
- const char kEnableThreadInstructionCount[] = "enable-thread-instruction-count";
- #endif
- 
-+const char kDesktopModeViewportMetaEnabled[] = "dm-viewport-meta-enabled";
-+
- #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
- // Override the default scheduling boosting value for urgent tasks.
- // This can be adjusted if a specific chromeos device shows better perf/power
-diff --git a/base/base_switches.h b/base/base_switches.h
---- a/base/base_switches.h
-+++ b/base/base_switches.h
-@@ -66,6 +66,8 @@ extern const char kEnableThreadInstructionCount[];
- extern const char kSchedulerBoostUrgent[];
- #endif
- 
-+extern const char kDesktopModeViewportMetaEnabled[];
-+
- }  // namespace switches
- 
- #endif  // BASE_BASE_SWITCHES_H_
-diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni
---- a/chrome/android/chrome_java_resources.gni
-+++ b/chrome/android/chrome_java_resources.gni
-@@ -998,4 +998,6 @@ chrome_java_resources = [
-   "java/res/xml/sync_and_services_preferences.xml",
-   "java/res/xml/theme_preferences.xml",
-   "java/res/xml/tracing_preferences.xml",
-+  "java/res/xml/useragent_preferences.xml",
-+  "java/res/layout/custom_useragent_preferences.xml",
- ]
-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
-@@ -1155,6 +1155,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",
-+  "java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java",
-   "java/src/org/chromium/chrome/browser/payments/ui/PaymentInformation.java",
-   "java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestBottomBar.java",
-   "java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestHeader.java",
-diff --git a/chrome/android/java/res/layout/custom_useragent_preferences.xml b/chrome/android/java/res/layout/custom_useragent_preferences.xml
-new file mode 100644
---- /dev/null
-+++ b/chrome/android/java/res/layout/custom_useragent_preferences.xml
-@@ -0,0 +1,108 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!--
-+    This file is part of Bromite.
-+
-+    Bromite is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    Bromite is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with Bromite. If not, see <https://www.gnu.org/licenses/>.
-+-->
-+
-+<!-- Layout used by the UserAgentPreferences. -->
-+
-+<ScrollView
-+    xmlns:android="http://schemas.android.com/apk/res/android"
-+    xmlns:app="http://schemas.android.com/apk/res-auto"
-+    android:layout_weight="0"
-+    android:gravity="top"
-+    android:layout_width="match_parent"
-+    android:layout_height="wrap_content">
-+
-+    <LinearLayout
-+        android:layout_width="match_parent"
-+        android:layout_height="wrap_content"
-+        android:focusable="false"
-+        android:orientation="vertical"
-+        android:divider="?android:dividerHorizontal">
-+
-+        <TextView
-+            android:layout_width="match_parent"
-+            android:layout_height="wrap_content"
-+            android:textAppearance="@style/TextAppearance.AccessibilityTextPreference"
-+            android:background="@color/default_bg_color_secondary"
-+            android:padding="16dp"
-+            android:text="@string/custom_ua_text"/>
-+
-+        <org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout
-+        android:id="@+id/ua_radio_button_layout"
-+        android:layout_width="match_parent"
-+        android:layout_height="wrap_content">
-+
-+            <org.chromium.components.browser_ui.widget.RadioButtonWithDescription
-+                android:id="@+id/default_ua_switch"
-+                android:layout_width="match_parent"
-+                android:layout_height="wrap_content"
-+                android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-+                app:primaryText="@string/custom_ua_flag_off" />
-+
-+            <org.chromium.components.browser_ui.widget.RadioButtonWithEditText
-+                android:id="@+id/custom_ua_switch"
-+                android:layout_width="match_parent"
-+                android:layout_height="wrap_content"
-+                android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-+                android:inputType="text"
-+                android:hint="@string/custom_ua_placeholder"
-+                app:descriptionText="@string/custom_ua_flag_on" />
-+
-+        </org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout>
-+
-+        <TextView
-+            android:layout_width="match_parent"
-+            android:layout_height="wrap_content"
-+            android:textAppearance="@style/TextAppearance.AccessibilityTextPreference"
-+            android:background="@color/default_bg_color_secondary"
-+            android:padding="16dp"
-+            android:text="@string/custom_desktop_ua_text"/>
-+
-+        <org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout
-+        android:id="@+id/ua_radio_button_layout_dm"
-+        android:layout_width="match_parent"
-+        android:layout_height="wrap_content">
-+
-+            <org.chromium.components.browser_ui.widget.RadioButtonWithDescription
-+                android:id="@+id/default_ua_switch_dm"
-+                android:layout_width="match_parent"
-+                android:layout_height="wrap_content"
-+                android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-+                app:primaryText="@string/custom_ua_flag_off" />
-+
-+            <org.chromium.components.browser_ui.widget.RadioButtonWithEditText
-+                android:id="@+id/custom_ua_switch_dm"
-+                android:layout_width="match_parent"
-+                android:layout_height="wrap_content"
-+                android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-+                android:inputType="text"
-+                android:hint="@string/custom_ua_placeholder"
-+                app:descriptionText="@string/custom_ua_flag_on" />
-+
-+        </org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout>
-+
-+        <CheckBox
-+            android:id="@+id/desktop_mode_viewportmeta"
-+            android:layout_width="wrap_content"
-+            android:layout_height="wrap_content"
-+            android:layout_centerVertical="true"
-+            android:layout_marginLeft="?android:attr/listPreferredItemPaddingStart"
-+            android:text="@string/desktop_mode_viewportmeta_checkbox" />
-+
-+    </LinearLayout>
-+
-+</ScrollView>
-diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
---- a/chrome/android/java/res/xml/main_preferences.xml
-+++ b/chrome/android/java/res/xml/main_preferences.xml
-@@ -101,6 +101,11 @@
-         android:key="content_settings"
-         android:order="19"
-         android:title="@string/prefs_site_settings"/>
-+    <Preference
-+        android:fragment="org.chromium.chrome.browser.settings.UserAgentPreferences"
-+        android:key="useragent_settings"
-+        android:order="20"
-+        android:title="@string/prefs_useragent_settings"/>
-     <Preference
-         android:fragment="org.chromium.chrome.browser.language.settings.LanguageSettings"
-         android:key="languages"
-diff --git a/chrome/android/java/res/xml/useragent_preferences.xml b/chrome/android/java/res/xml/useragent_preferences.xml
-new file mode 100644
---- /dev/null
-+++ b/chrome/android/java/res/xml/useragent_preferences.xml
-@@ -0,0 +1,31 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!--
-+    This file is part of Bromite.
-+
-+    Bromite is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    Bromite is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with Bromite. If not, see <https://www.gnu.org/licenses/>.
-+-->
-+
-+<!-- Layout used by the UserAgentPreferences. -->
-+
-+<PreferenceScreen
-+    xmlns:android="http://schemas.android.com/apk/res/android"
-+    xmlns:app="http://schemas.android.com/apk/res-auto">
-+
-+    <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
-+        android:key="desktop_mode_switch"
-+        android:title="@string/option_desktop_flag"
-+        android:summaryOn="@string/option_desktop_flag_on"
-+        android:summaryOff="@string/option_desktop_flag_off" />
-+
-+</PreferenceScreen>
-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
-@@ -72,6 +72,7 @@ import org.chromium.chrome.browser.app.flags.ChromeCachedFlags;
- import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory;
- import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController;
- import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
-+import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
- import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
- import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
- import org.chromium.chrome.browser.bookmarks.BookmarkModel;
-@@ -209,6 +210,13 @@ import org.chromium.ui.widget.Toast;
- import org.chromium.url.GURL;
- import org.chromium.url.Origin;
- import org.chromium.webapk.lib.client.WebApkNavigationClient;
-+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-+
-+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
- 
- import org.chromium.url.GURL;
- 
-@@ -2102,11 +2110,18 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
-         } else if (id == R.id.view_source_id) {
-             currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrlString()));
-         } else if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
--            final boolean reloadOnChange = !currentTab.isNativePage();
-             final boolean usingDesktopUserAgent =
-                     currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent();
--            currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent(
--                    !usingDesktopUserAgent, reloadOnChange);
-+            SharedPreferencesManager.getInstance().writeBoolean(
-+                ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, !usingDesktopUserAgent);
-+
-+            final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
-+                    ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
-+            if (stickyDesktopModeEnabled) {
-+                TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(!usingDesktopUserAgent);
-+            } else {
-+                currentTab.SetOverrideUserAgent(!usingDesktopUserAgent);
-+            }
-             RecordUserAction.record("MobileMenuRequestDesktopSite");
-         } else if (id == R.id.reader_mode_prefs_id) {
-             DomDistillerUIUtils.openSettings(currentTab.getWebContents());
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
-@@ -47,6 +47,7 @@ import org.chromium.content_public.browser.SpeechRecognition;
- import org.chromium.content_public.browser.UiThreadTaskTraits;
- import org.chromium.net.NetworkChangeNotifier;
- import org.chromium.ui.resources.ResourceExtractor;
-+import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
- 
- import java.io.File;
- import java.util.ArrayList;
-@@ -322,11 +323,13 @@ public class ChromeBrowserInitializer {
- 
-                         @Override
-                         public void onSuccess() {
-+                            PrivacyPreferencesManagerImpl.getInstance().updateOverrideUserAgent();
-                             tasks.start(false);
-                         }
-                     });
-         } else {
-             startChromeBrowserProcessesSync();
-+            PrivacyPreferencesManagerImpl.getInstance().updateOverrideUserAgent();
-             tasks.start(true);
-         }
-     }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java
-@@ -162,6 +162,41 @@ public class PrivacyPreferencesManagerImpl implements PrivacyPreferencesManager
-         return PrivacyPreferencesManagerImplJni.get().getNetworkPredictionManaged();
-     }
- 
-+    @Override
-+    public void updateOverrideUserAgent() {
-+        PrivacyPreferencesManagerImplJni.get().updateOverrideUserAgent();
-+    }
-+
-+    @Override
-+    public boolean isOverrideUserAgentEnabled(boolean desktopMode) {
-+        return PrivacyPreferencesManagerImplJni.get().isOverrideUserAgentEnabled(desktopMode);
-+    }
-+
-+    @Override
-+    public void setOverrideUserAgentEnabled(boolean enabled, boolean desktopMode) {
-+        PrivacyPreferencesManagerImplJni.get().setOverrideUserAgentEnabled(enabled, desktopMode);
-+    }
-+
-+    @Override
-+    public String getOverrideUserAgentValue(boolean desktopMode) {
-+        return PrivacyPreferencesManagerImplJni.get().getOverrideUserAgentValue(desktopMode);
-+    }
-+
-+    @Override
-+    public void setOverrideUserAgentValue(String user_agent, boolean desktopMode) {
-+        PrivacyPreferencesManagerImplJni.get().setOverrideUserAgentValue(user_agent, desktopMode);
-+    }
-+
-+    @Override
-+    public boolean isDesktopModeViewportMetaEnabled() {
-+        return PrivacyPreferencesManagerImplJni.get().isDesktopModeViewportMetaEnabled();
-+    }
-+
-+    @Override
-+    public void setDesktopModeViewportMetaEnabled(boolean enabled) {
-+        PrivacyPreferencesManagerImplJni.get().setDesktopModeViewportMetaEnabled(enabled);
-+    }
-+
-     @NativeMethods
-     public interface Natives {
-         boolean canPrefetchAndPrerender();
-@@ -171,5 +206,12 @@ public class PrivacyPreferencesManagerImpl implements PrivacyPreferencesManager
-         boolean isMetricsReportingEnabled();
-         void setMetricsReportingEnabled(boolean enabled);
-         boolean isMetricsReportingManaged();
-+        void updateOverrideUserAgent();
-+        boolean isOverrideUserAgentEnabled(boolean desktopMode);
-+        void setOverrideUserAgentEnabled(boolean enabled, boolean desktopMode);
-+        String getOverrideUserAgentValue(boolean desktopMode);
-+        void setOverrideUserAgentValue(String timezone, boolean desktopMode);
-+        boolean isDesktopModeViewportMetaEnabled();
-+        void setDesktopModeViewportMetaEnabled(boolean enabled);
-     }
- }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
-new file mode 100644
---- /dev/null
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
-@@ -0,0 +1,185 @@
-+/*
-+    This file is part of Bromite.
-+
-+    Bromite is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    Bromite is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with Bromite. If not, see <https://www.gnu.org/licenses/>.
-+*/
-+
-+package org.chromium.chrome.browser.settings;
-+
-+import android.os.Bundle;
-+import androidx.preference.Preference;
-+import androidx.preference.PreferenceFragmentCompat;
-+import androidx.preference.PreferenceViewHolder;
-+import androidx.annotation.NonNull;
-+import androidx.annotation.Nullable;
-+import android.view.LayoutInflater;
-+import android.widget.RadioGroup;
-+import android.content.Context;
-+import android.util.AttributeSet;
-+import android.view.View;
-+import android.view.ViewGroup;
-+import android.widget.LinearLayout;
-+import android.widget.ScrollView;
-+import android.widget.CheckBox;
-+import android.widget.CompoundButton;
-+import androidx.recyclerview.widget.RecyclerView;
-+
-+import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
-+import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
-+import org.chromium.components.browser_ui.widget.RadioButtonWithEditText;
-+import org.chromium.components.browser_ui.settings.SettingsUtils;
-+
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-+
-+import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
-+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
-+import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
-+import org.chromium.chrome.R;
-+
-+/**
-+ * Fragment that allows the user to configure User Agent related preferences.
-+ */
-+public class UserAgentPreferences
-+        extends PreferenceFragmentCompat implements RadioGroup.OnCheckedChangeListener {
-+
-+    private static final String PREF_STICK_DESKTOP_MODE_SWITCH = "desktop_mode_switch";
-+    private RadioButtonWithDescription useDefaultAgentSwitch;
-+    private RadioButtonWithEditText useCustomAgentSwitch;
-+    private RadioButtonWithDescription useDefaultAgentSwitchDesktopMode;
-+    private RadioButtonWithEditText useCustomAgentSwitchDesktopMode;
-+    private RadioGroup mRadioGroup;
-+    private RadioGroup mRadioGroupDesktopMode;
-+    private CheckBox mDesktopModeViewportmeta;
-+
-+    @Override
-+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-+        getActivity().setTitle(R.string.useragent_settings_title);
-+        SettingsUtils.addPreferencesFromResource(this, R.xml.useragent_preferences);
-+
-+        ChromeSwitchPreference alwaysDesktopModeSwitch =
-+                (ChromeSwitchPreference) findPreference(PREF_STICK_DESKTOP_MODE_SWITCH);
-+        boolean enabled = SharedPreferencesManager.getInstance().readBoolean(
-+            ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
-+        alwaysDesktopModeSwitch.setChecked(enabled);
-+        alwaysDesktopModeSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
-+            SharedPreferencesManager.getInstance().writeBoolean(
-+                ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, (boolean) newValue);
-+            UpdateAllTabs();
-+            return true;
-+        });
-+    }
-+
-+    @Override
-+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
-+            @Nullable Bundle savedInstanceState) {
-+        LinearLayout viewGroup = (LinearLayout) super.onCreateView(inflater, container, savedInstanceState);
-+        ScrollView view = (ScrollView) inflater.inflate(R.layout.custom_useragent_preferences, viewGroup, false);
-+        viewGroup.addView(view);
-+
-+        boolean enabledCustomUA = PrivacyPreferencesManagerImpl.getInstance().isOverrideUserAgentEnabled(false);
-+        boolean enabledCustomUADesktopMode = PrivacyPreferencesManagerImpl.getInstance().isOverrideUserAgentEnabled(true);
-+        boolean enabledDesktopModeViewportmeta = PrivacyPreferencesManagerImpl.getInstance().isDesktopModeViewportMetaEnabled();
-+
-+        useDefaultAgentSwitch =
-+                (RadioButtonWithDescription) view.findViewById(R.id.default_ua_switch);
-+        useCustomAgentSwitch =
-+                (RadioButtonWithEditText) view.findViewById(R.id.custom_ua_switch);
-+        useDefaultAgentSwitchDesktopMode =
-+                (RadioButtonWithDescription) view.findViewById(R.id.default_ua_switch_dm);
-+        useCustomAgentSwitchDesktopMode =
-+                (RadioButtonWithEditText) view.findViewById(R.id.custom_ua_switch_dm);
-+
-+        mRadioGroup = (RadioGroup) view.findViewById(R.id.ua_radio_button_layout);
-+        mRadioGroup.setOnCheckedChangeListener(this);
-+
-+        mRadioGroupDesktopMode = (RadioGroup) view.findViewById(R.id.ua_radio_button_layout_dm);
-+        mRadioGroupDesktopMode.setOnCheckedChangeListener(this);
-+
-+        mDesktopModeViewportmeta = (CheckBox) view.findViewById(R.id.desktop_mode_viewportmeta);
-+        mDesktopModeViewportmeta.setChecked(enabledDesktopModeViewportmeta);
-+        mDesktopModeViewportmeta.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
-+            @Override
-+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-+                PrivacyPreferencesManagerImpl.getInstance().setDesktopModeViewportMetaEnabled(
-+                    mDesktopModeViewportmeta.isChecked());
-+            }
-+        });
-+
-+        useDefaultAgentSwitch.setChecked(!enabledCustomUA);
-+        useCustomAgentSwitch.setChecked(enabledCustomUA);
-+
-+        useDefaultAgentSwitchDesktopMode.setChecked(!enabledCustomUADesktopMode);
-+        useCustomAgentSwitchDesktopMode.setChecked(enabledCustomUADesktopMode);
-+
-+        useCustomAgentSwitch.setPrimaryText(
-+            PrivacyPreferencesManagerImpl.getInstance().getOverrideUserAgentValue(false));
-+        useCustomAgentSwitch.addTextChangeListener(new RadioButtonWithEditText.OnTextChangeListener() {
-+            @Override
-+            public void onTextChanged(CharSequence newText) {
-+                PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentValue(
-+                    newText.toString(), false);
-+            }
-+        });
-+        useCustomAgentSwitch.setFocusChangeListener( hasFocus -> {
-+            if( hasFocus )
-+                PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(true, false);
-+        });
-+
-+        useCustomAgentSwitchDesktopMode.setPrimaryText(
-+            PrivacyPreferencesManagerImpl.getInstance().getOverrideUserAgentValue(true));
-+        useCustomAgentSwitchDesktopMode.addTextChangeListener(new RadioButtonWithEditText.OnTextChangeListener() {
-+            @Override
-+            public void onTextChanged(CharSequence newText) {
-+                PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentValue(
-+                    newText.toString(), true);
-+            }
-+        });
-+        useCustomAgentSwitchDesktopMode.setFocusChangeListener( hasFocus -> {
-+            if( hasFocus )
-+                PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(true, true);
-+        });
-+
-+        return viewGroup;
-+    }
-+
-+    private void UpdateAllTabs() {
-+        final boolean alwaysDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
-+            ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
-+        TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(alwaysDesktopModeEnabled);
-+    }
-+
-+    @Override
-+    public void onCheckedChanged(RadioGroup group, int checkedId) {
-+        if (useDefaultAgentSwitch.isChecked()) {
-+            PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(false, false);
-+        } else if (useCustomAgentSwitch.isChecked()) {
-+            PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(true, false);
-+        }
-+
-+        if (useDefaultAgentSwitchDesktopMode.isChecked()) {
-+            PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(false, true);
-+        } else if (useCustomAgentSwitchDesktopMode.isChecked()) {
-+            PrivacyPreferencesManagerImpl.getInstance().setOverrideUserAgentEnabled(true, true);
-+        }
-+
-+        UpdateAllTabs();
-+    }
-+
-+    @Override
-+    public void onStop() {
-+        super.onStop();
-+        UpdateAllTabs();
-+    }
-+}
-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
-@@ -61,6 +61,18 @@ import org.chromium.ui.base.WindowAndroid;
- import org.chromium.ui.util.ColorUtils;
- import org.chromium.url.GURL;
- import org.chromium.url.Origin;
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-+import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption;
-+import org.chromium.content_public.browser.NavigationController;
-+import org.chromium.components.embedder_support.util.UrlUtilities;
-+import org.chromium.components.url_formatter.UrlFormatter;
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-+import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption;
-+import org.chromium.content_public.browser.NavigationController;
-+import org.chromium.components.embedder_support.util.UrlUtilities;
-+import org.chromium.components.url_formatter.UrlFormatter;
- 
- /**
-  * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}.
-@@ -481,6 +493,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-                 throw new RuntimeException("Tab.loadUrl called when no native side exists");
-             }
- 
-+            final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
-+                ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
-+            if (stickyDesktopModeEnabled) {
-+                boolean alwaysDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
-+                    ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
-+
-+                if (UrlUtilities.isInternalScheme(UrlFormatter.fixupUrl(params.getUrl()))) {
-+                    alwaysDesktopModeEnabled = false;
-+                }
-+
-+                WebContents webContents = this.getWebContents();
-+                if (webContents != null) {
-+                    NavigationController navigationController = webContents.getNavigationController();
-+                    boolean currentUseDesktopUserAgent = navigationController.getUseDesktopUserAgent();
-+                    if (currentUseDesktopUserAgent != alwaysDesktopModeEnabled)
-+                        navigationController.setUseDesktopUserAgent(alwaysDesktopModeEnabled, false);
-+                }
-+
-+                if (alwaysDesktopModeEnabled) {
-+                    params.setOverrideUserAgent((int)UserAgentOverrideOption.TRUE);
-+                } else {
-+                    params.setOverrideUserAgent((int)UserAgentOverrideOption.FALSE);
-+                }
-+            }
-+
-             // We load the URL from the tab rather than directly from the ContentView so the tab has
-             // a chance of using a prerenderer page is any.
-             int loadType = TabImplJni.get().loadUrl(mNativeTabAndroid, params.getUrl(),
-@@ -493,7 +530,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-                     params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
-                     params.getIsRendererInitiated(), params.getShouldReplaceCurrentEntry(),
-                     params.getHasUserGesture(), params.getShouldClearHistoryList(),
--                    params.getInputStartTimestamp(), params.getIntentReceivedTimestamp());
-+                    params.getInputStartTimestamp(), params.getIntentReceivedTimestamp(),
-+                    params.getUserAgentOverrideOption());
- 
-             for (TabObserver observer : mObservers) {
-                 observer.onLoadUrl(this, params, loadType);
-@@ -1477,6 +1515,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-             if (mWebContents != null) mWebContents.getNavigationController().loadIfNecessary();
-             mIsBeingRestored = true;
-             for (TabObserver observer : mObservers) observer.onRestoreStarted(this);
-+
-+            if(overrideUserAgentWhenUnFrozen != UserAgentOverrideOption.INHERIT) {
-+                SetOverrideUserAgent(overrideUserAgentWhenUnFrozen == (int)UserAgentOverrideOption.TRUE ? true : false);
-+            }
-         } finally {
-             TraceEvent.end("Tab.restoreIfNeeded");
-         }
-@@ -1596,6 +1638,42 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-         }
-     }
- 
-+    int overrideUserAgentWhenUnFrozen = (int)UserAgentOverrideOption.INHERIT;
-+
-+    public void SetOverrideUserAgent(boolean usingDesktopUserAgent) {
-+        WebContents webContents = this.getWebContents();
-+        overrideUserAgentWhenUnFrozen = UserAgentOverrideOption.INHERIT;
-+
-+        if (usingDesktopUserAgent) {
-+            GURL url = this.getUrl();
-+            if (webContents == null && this.getPendingLoadParams() != null) {
-+                url = UrlFormatter.fixupUrl(this.getPendingLoadParams().getUrl());
-+            }
-+            if (UrlUtilities.isInternalScheme(url) == true)
-+                usingDesktopUserAgent = false;
-+        }
-+
-+        if (webContents != null) {
-+            ContentUtils.setUserAgentOverride(webContents);
-+
-+            NavigationController navigationController = webContents.getNavigationController();
-+            navigationController.setUseDesktopUserAgent(
-+                usingDesktopUserAgent, !this.isNativePage());
-+        }
-+        else if (this.getPendingLoadParams() != null) {
-+            if (usingDesktopUserAgent) {
-+                this.getPendingLoadParams().setOverrideUserAgent((int)UserAgentOverrideOption.TRUE);
-+            }
-+            else {
-+                this.getPendingLoadParams().setOverrideUserAgent((int)UserAgentOverrideOption.FALSE);
-+            }
-+        }
-+        else {
-+            overrideUserAgentWhenUnFrozen = usingDesktopUserAgent ? UserAgentOverrideOption.TRUE :
-+                                                                    UserAgentOverrideOption.FALSE;
-+        }
-+    }
-+
-     @NativeMethods
-     interface Natives {
-         TabImpl fromWebContents(WebContents webContents);
-@@ -1615,7 +1693,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
-                 ResourceRequestBody postData, int transition, String referrerUrl,
-                 int referrerPolicy, boolean isRendererInitiated, boolean shoulReplaceCurrentEntry,
-                 boolean hasUserGesture, boolean shouldClearHistoryList, long inputStartTimestamp,
--                long intentReceivedTimestamp);
-+                long intentReceivedTimestamp,
-+                int userAgentOverrideOption);
-         void setActiveNavigationEntryTitleForUrl(long nativeTabAndroid, String url, String title);
-         void loadOriginalImage(long nativeTabAndroid);
-         void setAddApi2TransitionToFutureNavigations(long nativeTabAndroid, boolean shouldAdd);
-diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/android/content/content_utils.cc
---- a/chrome/browser/android/content/content_utils.cc
-+++ b/chrome/browser/android/content/content_utils.cc
-@@ -8,6 +8,20 @@
- #include "components/embedder_support/android/util/user_agent_utils.h"
- #include "components/version_info/version_info.h"
- 
-+#include "base/android/jni_android.h"
-+#include "base/android/scoped_java_ref.h"
-+#include "chrome/browser/browser_process.h"
-+#include "components/prefs/pref_service.h"
-+#include "chrome/common/pref_names.h"
-+
-+using base::android::ConvertJavaStringToUTF8;
-+using base::android::ConvertUTF16ToJavaString;
-+using base::android::ConvertUTF8ToJavaString;
-+using base::android::JavaParamRef;
-+using base::android::JavaRef;
-+using base::android::ScopedJavaGlobalRef;
-+using base::android::ScopedJavaLocalRef;
-+
- static base::android::ScopedJavaLocalRef<jstring>
- JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) {
-   return base::android::ConvertUTF8ToJavaString(env, GetUserAgent());
-@@ -16,6 +30,20 @@ JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) {
- static void JNI_ContentUtils_SetUserAgentOverride(
-     JNIEnv* env,
-     const base::android::JavaParamRef<jobject>& jweb_contents) {
-+  bool enabled =
-+    g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentDesktopModeEnabled);
-+
-+  if (enabled == true) {
-+    std::string ua = g_browser_process->local_state()->GetString(prefs::kOverrideUserAgentDesktopMode);
-+    blink::UserAgentOverride spoofed_ua;
-+    spoofed_ua.ua_string_override = ua;
-+
-+    content::WebContents* web_contents =
-+        content::WebContents::FromJavaWebContents(jweb_contents);
-+    web_contents->SetUserAgentOverride(spoofed_ua, false);
-+    return;
-+  }
-+
-   content::WebContents* web_contents =
-       content::WebContents::FromJavaWebContents(jweb_contents);
-   embedder_support::SetDesktopUserAgentOverride(web_contents,
-diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrome/browser/android/preferences/browser_prefs_android.cc
---- a/chrome/browser/android/preferences/browser_prefs_android.cc
-+++ b/chrome/browser/android/preferences/browser_prefs_android.cc
-@@ -10,11 +10,18 @@
- #include "chrome/browser/notifications/notification_platform_bridge_android.h"
- #include "components/pref_registry/pref_registry_syncable.h"
- #include "components/prefs/pref_registry_simple.h"
-+#include "chrome/common/pref_names.h"
- 
- namespace android {
- 
- void RegisterPrefs(PrefRegistrySimple* registry) {
-   RegisterClipboardAndroidPrefs(registry);
-+
-+  registry->RegisterBooleanPref(prefs::kOverrideUserAgentEnabled, false);
-+  registry->RegisterStringPref(prefs::kOverrideUserAgent, "");
-+  registry->RegisterBooleanPref(prefs::kOverrideUserAgentDesktopModeEnabled, false);
-+  registry->RegisterStringPref(prefs::kOverrideUserAgentDesktopMode, "");
-+  registry->RegisterBooleanPref(prefs::kDesktopModeViewportMetaEnabled, false);
- }
- 
- void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
-diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
---- a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
-+++ b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
-@@ -12,6 +12,26 @@
- #include "components/metrics/metrics_pref_names.h"
- #include "components/prefs/pref_service.h"
- 
-+#include "base/command_line.h"
-+#include "base/base_switches.h"
-+#include "chrome/common/chrome_switches.h"
-+#include "content/browser/renderer_host/render_process_host_impl.h"
-+#include "content/common/renderer.mojom.h"
-+#include "chrome/browser/chrome_content_browser_client.h"
-+
-+#include "base/android/jni_android.h"
-+#include "base/android/jni_array.h"
-+#include "base/android/jni_string.h"
-+#include "base/android/scoped_java_ref.h"
-+
-+using base::android::ConvertJavaStringToUTF8;
-+using base::android::ConvertUTF16ToJavaString;
-+using base::android::ConvertUTF8ToJavaString;
-+using base::android::JavaParamRef;
-+using base::android::JavaRef;
-+using base::android::ScopedJavaGlobalRef;
-+using base::android::ScopedJavaLocalRef;
-+
- namespace {
- 
- PrefService* GetPrefService() {
-@@ -67,3 +87,97 @@ static void JNI_PrivacyPreferencesManagerImpl_SetNetworkPredictionEnabled(
-       enabled ? chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY
-               : chrome_browser_net::NETWORK_PREDICTION_NEVER);
- }
-+
-+static void UpdateOverrideUserAgent() {
-+  bool overrideUserAgentEnabled =
-+    g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentEnabled);
-+  std::string ua = g_browser_process->local_state()->GetString(prefs::kOverrideUserAgent);
-+  if (ua.empty()) {
-+    ua = ChromeContentBrowserClient().GetUserAgent();
-+  }
-+
-+  base::CommandLine* parsed_command_line =
-+      base::CommandLine::ForCurrentProcess();
-+  parsed_command_line->RemoveSwitch(switches::kUserAgent);
-+  if (!ua.empty()) {
-+    if (overrideUserAgentEnabled) {
-+      parsed_command_line->AppendSwitchASCII(switches::kUserAgent, ua);
-+    }
-+
-+    for (auto iter = content::RenderProcessHost::AllHostsIterator(); !iter.IsAtEnd();
-+         iter.Advance()) {
-+      if (iter.GetCurrentValue()->IsInitializedAndNotDead()) {
-+        iter.GetCurrentValue()->GetRendererInterface()->SetUserAgent(ua);
-+      }
-+    }
-+  }
-+
-+  parsed_command_line->RemoveSwitch(switches::kDesktopModeViewportMetaEnabled);
-+  if (g_browser_process->local_state()->GetBoolean(prefs::kDesktopModeViewportMetaEnabled))
-+    parsed_command_line->AppendSwitch(switches::kDesktopModeViewportMetaEnabled);
-+}
-+
-+static void JNI_PrivacyPreferencesManagerImpl_UpdateOverrideUserAgent(
-+    JNIEnv* env) {
-+  UpdateOverrideUserAgent();
-+}
-+
-+static jboolean JNI_PrivacyPreferencesManagerImpl_IsOverrideUserAgentEnabled(
-+    JNIEnv* env, jboolean desktopMode) {
-+  if (desktopMode == false)
-+    return g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentEnabled);
-+  else
-+    return g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentDesktopModeEnabled);
-+}
-+
-+static void JNI_PrivacyPreferencesManagerImpl_SetOverrideUserAgentEnabled(
-+    JNIEnv* env,
-+    jboolean enabled, jboolean desktopMode) {
-+  if (desktopMode == false) {
-+    g_browser_process->local_state()->SetBoolean(prefs::kOverrideUserAgentEnabled,
-+                                                enabled);
-+    UpdateOverrideUserAgent();
-+  } else {
-+    g_browser_process->local_state()->SetBoolean(prefs::kOverrideUserAgentDesktopModeEnabled,
-+                                                enabled);
-+  }
-+}
-+
-+static void JNI_PrivacyPreferencesManagerImpl_SetOverrideUserAgentValue(
-+    JNIEnv* env,
-+    const JavaParamRef<jstring>& ua, jboolean desktopMode) {
-+  std::string new_ua = ConvertJavaStringToUTF8(env, ua);
-+  if (desktopMode == false) {
-+    g_browser_process->local_state()->SetString(prefs::kOverrideUserAgent,
-+                                                new_ua);
-+    UpdateOverrideUserAgent();
-+  } else {
-+    g_browser_process->local_state()->SetString(prefs::kOverrideUserAgentDesktopMode,
-+                                                new_ua);
-+  }
-+}
-+
-+static base::android::ScopedJavaLocalRef<jstring>
-+    JNI_PrivacyPreferencesManagerImpl_GetOverrideUserAgentValue(
-+      JNIEnv* env, jboolean desktopMode) {
-+  if (desktopMode == false) {
-+    std::string ua = g_browser_process->local_state()->GetString(prefs::kOverrideUserAgent);
-+    return ConvertUTF8ToJavaString(env, ua);
-+  } else {
-+    std::string ua = g_browser_process->local_state()->GetString(prefs::kOverrideUserAgentDesktopMode);
-+    return ConvertUTF8ToJavaString(env, ua);
-+  }
-+}
-+
-+static jboolean JNI_PrivacyPreferencesManagerImpl_IsDesktopModeViewportMetaEnabled(
-+    JNIEnv* env) {
-+  return g_browser_process->local_state()->GetBoolean(prefs::kDesktopModeViewportMetaEnabled);
-+}
-+
-+static void JNI_PrivacyPreferencesManagerImpl_SetDesktopModeViewportMetaEnabled(
-+    JNIEnv* env,
-+    jboolean enabled) {
-+  g_browser_process->local_state()->SetBoolean(prefs::kDesktopModeViewportMetaEnabled,
-+                                              enabled);
-+  UpdateOverrideUserAgent();
-+}
-\ No newline at end of file
-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
-@@ -373,7 +373,8 @@ TabAndroid::TabLoadStatus TabAndroid::LoadUrl(
-     jboolean has_user_gesture,
-     jboolean should_clear_history_list,
-     jlong input_start_timestamp,
--    jlong intent_received_timestamp) {
-+    jlong intent_received_timestamp,
-+    jint user_agent_override_option) {
-   if (!web_contents())
-     return PAGE_LOAD_FAILED;
- 
-@@ -430,6 +431,8 @@ TabAndroid::TabLoadStatus TabAndroid::LoadUrl(
-       load_params.input_start =
-           base::TimeTicks::FromUptimeMillis(intent_received_timestamp);
-     }
-+    load_params.override_user_agent = static_cast<NavigationController::UserAgentOverrideOption>(
-+      user_agent_override_option);
-     web_contents()->GetController().LoadURLWithParams(load_params);
-   }
-   return DEFAULT_PAGE_LOAD;
-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
-@@ -167,7 +167,8 @@ class TabAndroid : public base::SupportsUserData {
-       jboolean has_user_gesture,
-       jboolean should_clear_history_list,
-       jlong omnibox_input_received_timestamp,
--      jlong intent_received_timestamp);
-+      jlong intent_received_timestamp,
-+      jint user_agent_override_option);
-   void SetActiveNavigationEntryTitleForUrl(
-       JNIEnv* env,
-       const base::android::JavaParamRef<jstring>& jurl,
-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
-@@ -1286,6 +1286,13 @@ std::string GetPlatformForUAMetadata() {
- blink::UserAgentMetadata GetUserAgentMetadata() {
-   blink::UserAgentMetadata metadata;
- 
-+  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
-+  if (command_line->HasSwitch(switches::kUserAgent)) {
-+    std::string ua = command_line->GetSwitchValueASCII(switches::kUserAgent);
-+
-+    return metadata;
-+  }
-+
-   metadata.brand_version_list = GetBrandVersionList();
-   metadata.full_version = version_info::GetVersionNumber();
-   metadata.platform = GetPlatformForUAMetadata();
-@@ -2379,6 +2386,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
-             switches::kDisableTargetBlankImpliesNoOpener);
-       }
- 
-+
- #if defined(OS_ANDROID)
-       // Communicating to content/ for BackForwardCache.
-       if (prefs->HasPrefPath(policy::policy_prefs::kBackForwardCacheEnabled) &&
-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
-@@ -828,6 +828,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*");
- 
-+    public static final String USERAGENT_STICKY_DESKTOP_MODE = "Chrome.UserAgent.StickyDesktopMode";
-+    public static final String USERAGENT_ALWAYS_DESKTOP_MODE = "Chrome.UserAgent.AlwaysDesktopMode";
-+
-     /**
-      * These values are currently used as SharedPreferences keys, along with the keys in
-      * {@link GrandfatheredChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys
-@@ -890,7 +893,9 @@ public final class ChromePreferenceKeys {
-                 SETTINGS_SAFETY_CHECK_RUN_COUNTER,
-                 SIGNIN_PROMO_IMPRESSIONS_COUNT_NTP,
-                 TWA_DISCLOSURE_SEEN_PACKAGES,
--                VIDEO_TUTORIALS_SHARE_URL_SET
-+                VIDEO_TUTORIALS_SHARE_URL_SET,
-+                USERAGENT_STICKY_DESKTOP_MODE,
-+                USERAGENT_ALWAYS_DESKTOP_MODE
-         );
-         // clang-format on
-     }
-diff --git a/chrome/browser/privacy/settings/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManager.java b/chrome/browser/privacy/settings/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManager.java
---- a/chrome/browser/privacy/settings/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManager.java
-+++ b/chrome/browser/privacy/settings/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManager.java
-@@ -105,4 +105,12 @@ public interface PrivacyPreferencesManager extends CrashReportingPermissionManag
-      * @return Whether Network Predictions is configured by policy.
-      */
-     boolean isNetworkPredictionManaged();
-+
-+    void updateOverrideUserAgent();
-+    boolean isOverrideUserAgentEnabled(boolean desktopMode);
-+    void setOverrideUserAgentEnabled(boolean enabled, boolean desktopMode);
-+    String getOverrideUserAgentValue(boolean desktopMode);
-+    void setOverrideUserAgentValue(String timezone, boolean desktopMode);
-+    boolean isDesktopModeViewportMetaEnabled();
-+    void setDesktopModeViewportMetaEnabled(boolean enabled);
- }
-diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
---- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
-+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
-@@ -279,6 +279,8 @@ public interface Tab extends TabLifecycle {
-      */
-     void setIsTabStateDirty(boolean isTabStateDirty);
- 
-+    void SetOverrideUserAgent(boolean usingDesktopUserAgent);
-+
-     /**
-      * If set to true, any future navigations in the tab automatically get
-      * PageTransition.FROM_API_2 applied.
-diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
---- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
-+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
-@@ -10,6 +10,11 @@ import org.chromium.chrome.browser.tab.Tab;
- import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
- import org.chromium.ui.base.WindowAndroid;
- 
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-+
-+import java.util.List;
-+
- /**
-  * Manages multiple {@link TabModelSelector} instances, each owned by different {@link Activity}s.
-  *
-@@ -76,4 +81,7 @@ public interface TabWindowManager {
-      * @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found.
-      */
-     Tab getTabById(int tabId);
-+
-+    void SetOverrideUserAgentForAllTabs(boolean usingDesktopUserAgent);
-+
- }
-diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
---- a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
-+++ b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
-@@ -119,6 +119,24 @@ public class TabWindowManagerImpl implements ActivityStateListener, TabWindowMan
-         return null;
-     }
- 
-+    @Override
-+    public void SetOverrideUserAgentForAllTabs(boolean usingDesktopUserAgent) {
-+        for (int selectorIndex = 0; selectorIndex < mSelectors.size(); selectorIndex++) {
-+            TabModelSelector selector = mSelectors.get(selectorIndex);
-+            if (selector != null) {
-+                List<TabModel> models = selector.getModels();
-+                for (int modelIndex = 0; modelIndex < models.size(); modelIndex++) {
-+                    TabModel model = models.get(modelIndex);
-+
-+                    for (int tabIdex = 0; tabIdex < model.getCount(); tabIdex++) {
-+                        Tab theTab = model.getTabAt(tabIdex);
-+                        theTab.SetOverrideUserAgent(usingDesktopUserAgent);
-+                    }
-+                }
-+            }
-+        }
-+    }
-+
-     @Override
-     public Tab getTabById(int tabId) {
-         for (int i = 0; i < mSelectors.size(); i++) {
-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
-@@ -228,6 +228,41 @@ CHAR-LIMIT guidelines:
-         Visit help page
-       </message>
- 
-+      <!-- User Agent settings -->
-+      <message name="IDS_PREFS_USERAGENT_SETTINGS" desc="Title of the User Agent preference. [CHAR-LIMIT=32]">
-+        User Agent
-+      </message>
-+      <message name="IDS_USERAGENT_SETTINGS_TITLE" desc="Title of the User Agent screen. [CHAR-LIMIT=32]">
-+        Customize User Agent
-+      </message>
-+      <message name="IDS_OPTION_DESKTOP_FLAG" desc="The label of the option that allows users to sticky desktop mode view flag under hambuger menu.">
-+        Current behaviour for desktop mode toggle in hamburger menu
-+      </message>
-+      <message name="IDS_OPTION_DESKTOP_FLAG_ON" desc="The label of the option that allows users to sticky desktop mode view flag under hambuger menu. [CHAR-LIMIT=32]">
-+        Applies to all tabs (sticky mode)
-+      </message>
-+      <message name="IDS_OPTION_DESKTOP_FLAG_OFF" desc="The label of the option that revert the hambuger menu flag to actual behaviour. [CHAR-LIMIT=32]">
-+        Applies to current tab only
-+      </message>
-+      <message name="IDS_CUSTOM_UA_FLAG_ON" desc="The label of the option that allows users to define custom user agent.">
-+        Use custom user agent
-+      </message>
-+      <message name="IDS_CUSTOM_UA_FLAG_OFF" desc="The label of the option that revert the user agent to actual value.">
-+        Use standard user agent
-+      </message>
-+      <message name="IDS_CUSTOM_UA_PLACEHOLDER" desc="The label of the placeholder for user agent textbox.">
-+        Insert a valid user agent
-+      </message>
-+      <message name="IDS_CUSTOM_UA_TEXT" desc="The label of the placeholder for user agent textbox.">
-+        Mobile User Agent
-+      </message>
-+      <message name="IDS_CUSTOM_DESKTOP_UA_TEXT" desc="The label of the placeholder for user agent textbox.">
-+        Desktop Mode User Agent
-+      </message>
-+      <message name="IDS_DESKTOP_MODE_VIEWPORTMETA_CHECKBOX" desc="The label of the enable viewport meta checkbox for user desktop mode.">
-+        Enable processing of the viewport meta tag also for desktop mode
-+      </message>
-+
-       <!-- Notification channels -->
-       <message name="IDS_NOTIFICATION_CATEGORY_GROUP_GENERAL" desc='Subheading for "General" section of a list of notification categories. [CHAR-LIMIT=32]'>
-         General
-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
-@@ -418,6 +418,19 @@ const char kAllowJavascriptAppleEvents[] =
- 
- #endif
- 
-+#if defined(OS_ANDROID)
-+const char kOverrideUserAgentEnabled[] =
-+    "override_user_agent_enabled";
-+const char kOverrideUserAgent[] =
-+    "override_user_agent";
-+const char kOverrideUserAgentDesktopModeEnabled[] =
-+    "override_user_agent_dm_enabled";
-+const char kOverrideUserAgentDesktopMode[] =
-+    "override_user_agent_dm";
-+const char kDesktopModeViewportMetaEnabled[] =
-+    "dm-viewport-meta-enabled";
-+#endif
-+
- // Boolean which specifies whether we should ask the user if we should download
- // a file (true) or just download it automatically.
- const char kPromptForDownload[] = "download.prompt_for_download";
-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
-@@ -1120,6 +1120,14 @@ extern const char kCartModuleWelcomeSurfaceShownTimes[];
- extern const char kIncognitoTabHistoryEnabled[];
- #endif
- 
-+#if defined(OS_ANDROID)
-+extern const char kOverrideUserAgentEnabled[];
-+extern const char kOverrideUserAgent[];
-+extern const char kOverrideUserAgentDesktopModeEnabled[];
-+extern const char kOverrideUserAgentDesktopMode[];
-+extern const char kDesktopModeViewportMetaEnabled[];
-+#endif
-+
- }  // namespace prefs
- 
- #endif  // CHROME_COMMON_PREF_NAMES_H_
-diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
---- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
-+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
-@@ -167,6 +167,17 @@ public class RadioButtonWithEditText extends RadioButtonWithDescription {
-             mEditText.setCursorVisible(false);
-             KeyboardVisibilityDelegate.getInstance().hideKeyboard(mEditText);
-         }
-+        if (mRadioButtonWithEditTextFocusListener != null) {
-+            mRadioButtonWithEditTextFocusListener.onRadioButtonWithEditTextFocusChanged(hasFocus);
-+        }
-+    }
-+
-+    public interface RadioButtonWithEditTextFocusListener {
-+        void onRadioButtonWithEditTextFocusChanged(boolean hasFocus);
-+    }
-+    private RadioButtonWithEditTextFocusListener mRadioButtonWithEditTextFocusListener;
-+    public void setFocusChangeListener(RadioButtonWithEditTextFocusListener listener) {
-+        mRadioButtonWithEditTextFocusListener = listener;
-     }
- 
-     /**
-diff --git a/content/browser/renderer_host/navigation_controller_android.cc b/content/browser/renderer_host/navigation_controller_android.cc
---- a/content/browser/renderer_host/navigation_controller_android.cc
-+++ b/content/browser/renderer_host/navigation_controller_android.cc
-@@ -237,7 +237,8 @@ void NavigationControllerAndroid::LoadUrl(
-     const JavaParamRef<jstring>& data_url_as_string,
-     jboolean can_load_local_resources,
-     jboolean is_renderer_initiated,
--    jboolean should_replace_current_entry) {
-+    jboolean should_replace_current_entry,
-+    jint user_agent_override_option) {
-   DCHECK(url);
-   NavigationController::LoadURLParams params(
-       GURL(ConvertJavaStringToUTF8(env, url)));
-@@ -291,6 +292,9 @@ void NavigationControllerAndroid::LoadUrl(
-                  Referrer::ConvertToPolicy(referrer_policy));
-   }
- 
-+  params.override_user_agent = static_cast<NavigationController::UserAgentOverrideOption>(
-+    user_agent_override_option);
-+
-   navigation_controller_->LoadURLWithParams(params);
- }
- 
-diff --git a/content/browser/renderer_host/navigation_controller_android.h b/content/browser/renderer_host/navigation_controller_android.h
---- a/content/browser/renderer_host/navigation_controller_android.h
-+++ b/content/browser/renderer_host/navigation_controller_android.h
-@@ -80,7 +80,8 @@ class CONTENT_EXPORT NavigationControllerAndroid {
-       const base::android::JavaParamRef<jstring>& data_url_as_string,
-       jboolean can_load_local_resources,
-       jboolean is_renderer_initiated,
--      jboolean should_replace_current_entry);
-+      jboolean should_replace_current_entry,
-+      jint user_agent_override_option);
-   void ClearSslPreferences(
-       JNIEnv* env,
-       const base::android::JavaParamRef<jobject>& /* obj */);
-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
-@@ -3366,6 +3366,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
- #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
-     switches::kSchedulerBoostUrgent,
- #endif
-+    switches::kDesktopModeViewportMetaEnabled,
-   };
-   renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames,
-                                  base::size(kSwitchNames));
-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
-@@ -38,6 +38,7 @@
- #include "base/strings/string_util.h"
- #include "base/strings/utf_string_conversions.h"
- #include "base/system/sys_info.h"
-+#include "base/base_switches.h"
- #include "base/threading/thread_task_runner_handle.h"
- #include "base/time/time.h"
- #include "base/trace_event/optional_trace_event.h"
-@@ -2447,7 +2448,8 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() {
-   prefs.threaded_scrolling_enabled =
-       !command_line.HasSwitch(blink::switches::kDisableThreadedScrolling);
- 
--  if (IsOverridingUserAgent())
-+  if (IsOverridingUserAgent() &&
-+      !command_line.HasSwitch(switches::kDesktopModeViewportMetaEnabled))
-     prefs.viewport_meta_enabled = false;
- 
-   prefs.main_frame_resizes_are_orientation_changes =
-diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
---- a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
-+++ b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
-@@ -169,7 +169,8 @@ import org.chromium.url.GURL;
-                     params.getUserAgentOverrideOption(), params.getExtraHeadersString(),
-                     params.getPostData(), params.getBaseUrl(), params.getVirtualUrlForDataUrl(),
-                     params.getDataUrlAsString(), params.getCanLoadLocalResources(),
--                    params.getIsRendererInitiated(), params.getShouldReplaceCurrentEntry());
-+                    params.getIsRendererInitiated(), params.getShouldReplaceCurrentEntry(),
-+                    params.getUserAgentOverrideOption());
-         }
-     }
- 
-@@ -348,7 +349,8 @@ import org.chromium.url.GURL;
-                 int referrerPolicy, int uaOverrideOption, String extraHeaders,
-                 ResourceRequestBody postData, String baseUrlForDataUrl, String virtualUrlForDataUrl,
-                 String dataUrlAsString, boolean canLoadLocalResources, boolean isRendererInitiated,
--                boolean shouldReplaceCurrentEntry);
-+                boolean shouldReplaceCurrentEntry,
-+                int userAgentOverrideOption);
-         void clearHistory(long nativeNavigationControllerAndroid, NavigationControllerImpl caller);
-         int getNavigationHistory(long nativeNavigationControllerAndroid,
-                 NavigationControllerImpl caller, Object history);
-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
-@@ -1673,7 +1673,6 @@ void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
- }
- 
- void RenderThreadImpl::SetUserAgent(const std::string& user_agent) {
--  DCHECK(user_agent_.IsNull());
-   user_agent_ = WebString::FromUTF8(user_agent);
-   GetContentClient()->renderer()->DidSetUserAgent(user_agent);
- }
--- 
-2.17.1
-

+ 15 - 12
build/patches/autofill-disable-autofill-download-manager.patch

@@ -5,8 +5,8 @@ Subject: autofill: disable autofill download manager
 Disables the autofill download manager (trk:158).
 ---
  .../core/browser/autofill_download_manager.cc | 61 +++----------------
- .../autofill/core/browser/autofill_handler.cc | 17 ------
- 2 files changed, 7 insertions(+), 71 deletions(-)
+ .../autofill/core/browser/autofill_handler.cc | 20 ------
+ 2 files changed, 7 insertions(+), 74 deletions(-)
 
 diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc
 --- a/components/autofill/core/browser/autofill_download_manager.cc
@@ -55,7 +55,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
  // Gets HTTP body payload for API POST request.
  bool GetAPIBodyPayload(const std::string& payload,
                         AutofillDownloadManager::RequestType type,
-@@ -769,6 +739,7 @@ size_t AutofillDownloadManager::GetPayloadLength(
+@@ -774,6 +744,7 @@ size_t AutofillDownloadManager::GetPayloadLength(
  
  std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
      const FormRequestData& request_data) const {
@@ -63,7 +63,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
    std::string method("POST");
    std::string query_str;
  
-@@ -791,36 +762,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
+@@ -796,36 +767,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
    GURL url = autofill_server_url_
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .ReplaceComponents(replacements);
@@ -109,7 +109,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
 diff --git a/components/autofill/core/browser/autofill_handler.cc b/components/autofill/core/browser/autofill_handler.cc
 --- a/components/autofill/core/browser/autofill_handler.cc
 +++ b/components/autofill/core/browser/autofill_handler.cc
-@@ -57,19 +57,6 @@ bool CachedFormNeedsUpdate(const FormData& live_form,
+@@ -61,19 +61,6 @@ bool CachedFormNeedsUpdate(const FormData& live_form,
    return false;
  }
  
@@ -129,17 +129,20 @@ diff --git a/components/autofill/core/browser/autofill_handler.cc b/components/a
  }  // namespace
  
  using base::TimeTicks;
-@@ -110,10 +97,6 @@ AutofillHandler::AutofillHandler(
-     : driver_(driver),
-       log_manager_(log_manager),
+@@ -135,13 +122,6 @@ AutofillHandler::AutofillHandler(
+       log_manager_(client ? client->GetLogManager() : nullptr),
+       form_interactions_ukm_logger_(CreateFormInteractionsUkmLogger()),
        is_rich_query_enabled_(IsRichQueryEnabled(channel)) {
 -  if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) {
 -    download_manager_ = std::make_unique<AutofillDownloadManager>(
--        driver, this, GetAPIKeyForUrl(channel), log_manager);
+-        driver, this, GetAPIKeyForUrl(channel),
+-        AutofillDownloadManager::IsRawMetadataUploadingEnabled(
+-            IsRawMetadataUploadingEnabled(channel)),
+-        log_manager_);
 -  }
- }
- 
- AutofillHandler::~AutofillHandler() = default;
+   if (client) {
+     translate::TranslateDriver* translate_driver = client->GetTranslateDriver();
+     if (translate_driver) {
 -- 
 2.17.1
 

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

@@ -11,7 +11,7 @@ sysroot.
 diff --git a/DEPS b/DEPS
 --- a/DEPS
 +++ b/DEPS
-@@ -93,7 +93,7 @@ vars = {
+@@ -94,7 +94,7 @@ vars = {
  
    # Check out and download nacl by default. This can be disabled e.g. with
    # custom_vars.
@@ -20,7 +20,7 @@ diff --git a/DEPS b/DEPS
  
    # By default, do not check out src-internal. This can be overridden e.g. with
    # custom_vars.
-@@ -124,8 +124,8 @@ vars = {
+@@ -125,8 +125,8 @@ vars = {
    # support for other platforms may be added in the future.
    'checkout_openxr' : 'checkout_win',
  
@@ -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.
-@@ -4204,49 +4204,6 @@ hooks = [
+@@ -3584,49 +3584,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',
-@@ -4377,18 +4334,6 @@ hooks = [
+@@ -3757,18 +3714,6 @@ hooks = [
                  '-s', 'src/buildtools/mac/clang-format.sha1',
      ],
    },
@@ -100,7 +100,7 @@ diff --git a/DEPS b/DEPS
    # Pull rc binaries using checked-in hashes.
    {
      'name': 'rc_win',
-@@ -4414,29 +4359,6 @@ hooks = [
+@@ -3794,29 +3739,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
      ],
    },

+ 13 - 13
build/patches/disable-AdsBlockedInfoBar.patch

@@ -9,17 +9,17 @@ Subject: disable AdsBlockedInfoBar
 diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
 --- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
 +++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
-@@ -11,7 +11,6 @@
- #include "base/metrics/histogram_macros.h"
+@@ -6,7 +6,6 @@
+ 
  #include "build/build_config.h"
  #include "chrome/browser/browser_process.h"
 -#include "chrome/browser/infobars/infobar_service.h"
  #include "chrome/browser/profiles/profile.h"
  #include "chrome/browser/safe_browsing/safe_browsing_service.h"
  #include "chrome/browser/subresource_filter/subresource_filter_profile_context_factory.h"
-@@ -33,10 +32,6 @@
- #include "content/public/browser/web_contents.h"
- #include "services/metrics/public/cpp/ukm_source_id.h"
+@@ -15,10 +14,6 @@
+ #include "components/subresource_filter/content/browser/profile_interaction_manager.h"
+ #include "components/subresource_filter/content/browser/ruleset_service.h"
  
 -#if defined(OS_ANDROID)
 -#include "components/subresource_filter/android/ads_blocked_infobar_delegate.h"
@@ -28,18 +28,18 @@ diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.
  ChromeSubresourceFilterClient::ChromeSubresourceFilterClient(
      content::WebContents* web_contents)
      : web_contents_(web_contents) {
-@@ -126,11 +121,6 @@ ChromeSubresourceFilterClient::GetProfileInteractionManager() {
+@@ -48,11 +43,6 @@ void ChromeSubresourceFilterClient::
  }
  
- void ChromeSubresourceFilterClient::ShowUI(const GURL& url) {
+ void ChromeSubresourceFilterClient::ShowNotification() {
 -#if defined(OS_ANDROID)
--  InfoBarService* infobar_service =
--      InfoBarService::FromWebContents(web_contents_);
--  subresource_filter::AdsBlockedInfobarDelegate::Create(infobar_service);
+-    InfoBarService* infobar_service =
+-        InfoBarService::FromWebContents(web_contents_);
+-    subresource_filter::AdsBlockedInfobarDelegate::Create(infobar_service);
 -#endif
-   // TODO(https://crbug.com/1103176): Plumb the actual frame reference here
-   // (it comes  from
-   // ContentSubresourceFilterThrottleManager::DidDisallowFirstSubresource, which
+ }
+ 
+ const scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
 -- 
 2.17.1
 

+ 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
-@@ -279,7 +279,7 @@ const base::Feature kAutofillSectionUponRedundantNameInfo{
+@@ -309,7 +309,7 @@ const base::Feature kAutofillSectionUponRedundantNameInfo{
  // "upload" resources.
  // i.e., https://other.autofill.server:port/tbproxy/af/
  const base::Feature kAutofillServerCommunication{

+ 1 - 1
build/patches/first_run-deactivate-autoupdate-globally.patch

@@ -15,7 +15,7 @@ turn it back on.
 diff --git a/chrome/browser/extensions/extension_system_impl.cc b/chrome/browser/extensions/extension_system_impl.cc
 --- a/chrome/browser/extensions/extension_system_impl.cc
 +++ b/chrome/browser/extensions/extension_system_impl.cc
-@@ -207,8 +207,7 @@ void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) {
+@@ -206,8 +206,7 @@ void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) {
    // ExtensionService depends on RuntimeData.
    runtime_data_.reset(new RuntimeData(ExtensionRegistry::Get(profile_)));
  

+ 3 - 3
build/patches/kill-Auth.patch

@@ -6,9 +6,9 @@ Subject: kill Auth
  .../signin/SystemAccountManagerDelegate.java  | 56 ++-----------------
  1 file changed, 4 insertions(+), 52 deletions(-)
 
-diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
---- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
-+++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
+diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
+--- a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
++++ b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
 @@ -26,9 +26,6 @@ import android.os.SystemClock;
  
  import androidx.annotation.Nullable;

+ 1 - 1
build/patches/kill-Location-fall-back-to-system.patch

@@ -10,7 +10,7 @@ Subject: kill Location, fall back to system
 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
-@@ -152,7 +152,6 @@ if (is_android) {
+@@ -153,7 +153,6 @@ if (is_android) {
        "android/java/src/org/chromium/device/geolocation/LocationProviderAdapter.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java",

+ 1 - 1
build/patches/kill-TOS-and-metrics-opt-out.patch

@@ -31,7 +31,7 @@ diff --git a/chrome/android/java/res/layout/fre_tosanduma.xml b/chrome/android/j
 diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
 --- a/chrome/android/java/res/values/dimens.xml
 +++ b/chrome/android/java/res/values/dimens.xml
-@@ -145,7 +145,6 @@
+@@ -141,7 +141,6 @@
      <dimen name="fre_image_bottom_margin">36dp</dimen>
      <dimen name="fre_image_height">120dp</dimen>
      <dimen name="fre_tos_image_height">110dp</dimen>

+ 1 - 1
build/patches/kill-Vision.patch

@@ -13,7 +13,7 @@ Barcode, face and text detection APIs
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -285,8 +285,6 @@ android_library("chrome_java") {
+@@ -286,8 +286,6 @@ android_library("chrome_java") {
      "$google_play_services_package:google_play_services_gcm_java",
      "$google_play_services_package:google_play_services_iid_java",
      "$google_play_services_package:google_play_services_tasks_java",

+ 1 - 1
build/patches/ungoogled-chromium-Disable-Google-host-detection.patch

@@ -352,7 +352,7 @@ diff --git a/components/search_engines/template_url.cc b/components/search_engin
 diff --git a/net/base/url_util.cc b/net/base/url_util.cc
 --- a/net/base/url_util.cc
 +++ b/net/base/url_util.cc
-@@ -430,27 +430,6 @@ bool HasGoogleHost(const GURL& url) {
+@@ -431,27 +431,6 @@ bool HasGoogleHost(const GURL& url) {
  }
  
  bool IsGoogleHost(base::StringPiece host) {

+ 41 - 1
build/patches/ungoogled-chromium-Disable-domain-reliability.patch

@@ -3,14 +3,54 @@ Date: Sat, 25 Aug 2018 22:58:52 +0200
 Subject: ungoogled-chromium: Disable domain reliability
 
 ---
+ .../domain_reliability/service_factory.cc     |  24 +-
  components/domain_reliability/BUILD.gn        |  42 +-
  .../domain_reliability/bake_in_configs.py     |   2 +-
  .../domain_reliability/context_manager.cc     |  22 +-
  .../domain_reliability/google_configs.cc      | 611 ------------------
  .../domain_reliability/google_configs.h       |   8 +-
  components/domain_reliability/uploader.cc     |   2 +-
- 6 files changed, 23 insertions(+), 664 deletions(-)
+ 7 files changed, 24 insertions(+), 687 deletions(-)
 
+diff --git a/chrome/browser/domain_reliability/service_factory.cc b/chrome/browser/domain_reliability/service_factory.cc
+--- a/chrome/browser/domain_reliability/service_factory.cc
++++ b/chrome/browser/domain_reliability/service_factory.cc
+@@ -11,34 +11,12 @@
+ 
+ namespace domain_reliability {
+ 
+-namespace {
+-
+-// If Domain Reliability is enabled in the absence of a flag or field trial.
+-const bool kDefaultEnabled = true;
+-
+-// The name and value of the field trial to turn Domain Reliability on.
+-const char kFieldTrialName[] = "DomRel-Enable";
+-const char kFieldTrialValueEnable[] = "enable";
+-
+-}  // namespace
+-
+ // Identifies Chrome as the source of Domain Reliability uploads it sends.
+ const char DomainReliabilityServiceFactory::kUploadReporterString[] = "chrome";
+ 
+ // static
+ bool DomainReliabilityServiceFactory::ShouldCreateService() {
+-  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+-  if (command_line->HasSwitch(switches::kDisableDomainReliability))
+-    return false;
+-  if (command_line->HasSwitch(switches::kEnableDomainReliability))
+-    return true;
+-  if (!ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled())
+-    return false;
+-  if (base::FieldTrialList::TrialExists(kFieldTrialName)) {
+-    std::string value = base::FieldTrialList::FindFullName(kFieldTrialName);
+-    return (value == kFieldTrialValueEnable);
+-  }
+-  return kDefaultEnabled;
++  return false;
+ }
+ 
+ }  // namespace domain_reliability
 diff --git a/components/domain_reliability/BUILD.gn b/components/domain_reliability/BUILD.gn
 --- a/components/domain_reliability/BUILD.gn
 +++ b/components/domain_reliability/BUILD.gn

+ 3 - 3
build/patches/ungoogled-chromium-Disable-profile-avatar.patch

@@ -11,7 +11,7 @@ Added some Bromite-specific further improvements
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -1455,8 +1455,6 @@ static_library("browser") {
+@@ -1433,8 +1433,6 @@ static_library("browser") {
      "profiles/profile_attributes_entry.h",
      "profiles/profile_attributes_storage.cc",
      "profiles/profile_attributes_storage.h",
@@ -23,7 +23,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc
 --- a/chrome/browser/profiles/profile_attributes_entry.cc
 +++ b/chrome/browser/profiles/profile_attributes_entry.cc
-@@ -286,12 +286,6 @@ base::string16 ProfileAttributesEntry::GetUserName() const {
+@@ -284,12 +284,6 @@ base::string16 ProfileAttributesEntry::GetUserName() const {
  gfx::Image ProfileAttributesEntry::GetAvatarIcon(
      int size_for_placeholder_avatar,
      bool use_high_res_file) const {
@@ -33,9 +33,9 @@ diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browse
 -      return *image;
 -  }
 -
+ #if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
    // TODO(crbug.com/1100835): After launch, remove the treatment of placeholder
    // avatars from GetHighResAvatar() and from any other places.
-   if (ShouldShowGenericColoredAvatar(GetAvatarIconIndex())) {
 -- 
 2.17.1
 

+ 2 - 2
build/patches/ungoogled-chromium-Disable-translate-integration.patch

@@ -138,7 +138,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/language/settin
 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
-@@ -1184,9 +1184,6 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1224,9 +1224,6 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_LANGUAGES_LIST_DESCRIPTION" desc="Description on the Languages settings screen. Appears above a list of one or more languages that the user selects, to tell Chrome which languages they prefer to use to read website content.">
          Websites will show text in your preferred language, when possible.
        </message>
@@ -151,7 +151,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc
 --- a/components/translate/core/browser/translate_manager.cc
 +++ b/components/translate/core/browser/translate_manager.cc
-@@ -855,8 +855,9 @@ void TranslateManager::FilterIsTranslatePossible(
+@@ -889,8 +889,9 @@ void TranslateManager::FilterIsTranslatePossible(
          ->LogAutofillAssistantDeferredTriggerDecision();
    }
  

+ 33 - 2
build/patches/updater-disable-updater-pings.patch

@@ -9,7 +9,8 @@ Chromium would still send background requests. Kill it.
  .../component_updater/component_updater_url_constants.cc     | 4 ++--
  components/component_updater/configurator_impl.cc            | 5 +----
  components/component_updater/configurator_impl.h             | 1 -
- 3 files changed, 3 insertions(+), 7 deletions(-)
+ third_party/dav1d/dav1d_generated.gni                        | 5 -----
+ 4 files changed, 3 insertions(+), 12 deletions(-)
 
 diff --git a/components/component_updater/component_updater_url_constants.cc b/components/component_updater/component_updater_url_constants.cc
 --- a/components/component_updater/component_updater_url_constants.cc
@@ -57,8 +58,38 @@ diff --git a/components/component_updater/configurator_impl.h b/components/compo
    const bool pings_enabled_;
 -  const bool require_encryption_;
    const GURL url_source_override_;
-   const int initial_delay_;
+   const double initial_delay_;
  
+diff --git a/third_party/dav1d/dav1d_generated.gni b/third_party/dav1d/dav1d_generated.gni
+--- a/third_party/dav1d/dav1d_generated.gni
++++ b/third_party/dav1d/dav1d_generated.gni
+@@ -5,8 +5,6 @@
+ # NOTE: this file is autogenerated by dav1d/generate_sources.py - DO NOT EDIT.
+ 
+ x86_asm_sources = [
+-  "libdav1d/src/x86/cdef16_avx2.asm",
+-  "libdav1d/src/x86/cdef16_sse.asm",
+   "libdav1d/src/x86/cdef_avx2.asm",
+   "libdav1d/src/x86/cdef_avx512.asm",
+   "libdav1d/src/x86/cdef_sse.asm",
+@@ -20,7 +18,6 @@ x86_asm_sources = [
+   "libdav1d/src/x86/loopfilter.asm",
+   "libdav1d/src/x86/loopfilter_ssse3.asm",
+   "libdav1d/src/x86/looprestoration.asm",
+-  "libdav1d/src/x86/looprestoration16_avx2.asm",
+   "libdav1d/src/x86/looprestoration_sse.asm",
+   "libdav1d/src/x86/mc_avx2.asm",
+   "libdav1d/src/x86/mc_avx512.asm",
+@@ -43,9 +40,7 @@ arm32_asm_sources = [
+   "libdav1d/src/arm/32/cdef16.S",
+   "libdav1d/src/arm/32/cdef_tmpl.S",
+   "libdav1d/src/arm/32/ipred.S",
+-  "libdav1d/src/arm/32/ipred16.S",
+   "libdav1d/src/arm/32/itx.S",
+-  "libdav1d/src/arm/32/itx16.S",
+   "libdav1d/src/arm/32/loopfilter.S",
+   "libdav1d/src/arm/32/loopfilter16.S",
+   "libdav1d/src/arm/32/looprestoration.S",
 -- 
 2.17.1
 

+ 4 - 6
build/patches/webview-Hard-no-to-persistent-histograms.patch

@@ -10,22 +10,20 @@ Subject: webview: Hard no to persistent histograms
 * These were guarded by a feature check before
   https://chromium.googlesource.com/chromium/src/+/b86102f2a243
 ---
- android_webview/browser/aw_field_trials.cc | 7 -------
- 1 file changed, 7 deletions(-)
+ android_webview/browser/aw_field_trials.cc | 5 -----
+ 1 file changed, 5 deletions(-)
 
 diff --git a/android_webview/browser/aw_field_trials.cc b/android_webview/browser/aw_field_trials.cc
 --- a/android_webview/browser/aw_field_trials.cc
 +++ b/android_webview/browser/aw_field_trials.cc
-@@ -11,11 +11,4 @@
+@@ -11,9 +11,4 @@
  #include "components/metrics/persistent_histograms.h"
  
  void AwFieldTrials::SetupFieldTrials() {
--  // https://crbug.com/1093420: enable for persistent metrics.
 -  // Persistent histograms must be enabled as soon as possible.
 -  base::FilePath metrics_dir;
 -  if (base::PathService::Get(base::DIR_ANDROID_APP_DATA, &metrics_dir)) {
--    InstantiatePersistentHistograms(metrics_dir,
--                                    /*default_local_memory=*/true);
+-    InstantiatePersistentHistograms(metrics_dir);
 -  }
  }
 -- 

Някои файлове не бяха показани, защото твърде много файлове са промени