Browse Source

Updated patches for v80 (#482)

* Updated patches for v80

* Fix arm64 build of openH264

* Fix linking error

* Update other patches too

* Fix remaining crashes
Carl 5 năm trước cách đây
mục cha
commit
410fc50a21
100 tập tin đã thay đổi với 2065 bổ sung2282 xóa
  1. 7 0
      CHANGELOG.md
  2. 1 1
      README.md
  3. 0 1
      build/GN_ARGS
  4. 1 9
      build/bromite_patches_list.txt
  5. 1 1
      build/patches/AV1-codec-support.patch
  6. 12 12
      build/patches/Add-a-proxy-configuration-page.patch
  7. 54 53
      build/patches/Add-an-always-incognito-mode.patch
  8. 96 93
      build/patches/Add-bookmark-import-export-actions.patch
  9. 24 24
      build/patches/Add-custom-tab-intents-privacy-option.patch
  10. 9 9
      build/patches/Add-exit-menu-item.patch
  11. 8 8
      build/patches/Add-flag-to-configure-maximum-connections-per-host.patch
  12. 4 4
      build/patches/Add-flag-to-control-video-playback-resume-feature.patch
  13. 20 20
      build/patches/Add-flag-to-disable-IPv6-probes.patch
  14. 3 3
      build/patches/Add-flag-to-disable-WebGL.patch
  15. 10 10
      build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch
  16. 73 86
      build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch
  17. 19 19
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  18. 15 15
      build/patches/Add-option-to-use-home-page-as-NTP.patch
  19. 107 103
      build/patches/Add-site-settings-option-for-session-only-cookies.patch
  20. 105 103
      build/patches/Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch
  21. 12 36
      build/patches/Allow-building-without-feed-support.patch
  22. 3 3
      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. 17 17
      build/patches/Always-show-site-settings-for-cookies-javascript-and-ads.patch
  26. 73 232
      build/patches/Automated-domain-substitution.patch
  27. 23 23
      build/patches/Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-scheme.patch
  28. 32 41
      build/patches/Bromite-AdBlockUpdaterService.patch
  29. 1 1
      build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch
  30. 2 2
      build/patches/Disable-Omaha-update-checks.patch
  31. 4 4
      build/patches/Disable-addresses-autofill-by-default.patch
  32. 23 40
      build/patches/Disable-all-promo-dialogs.patch
  33. 22 22
      build/patches/Disable-dynamic-module-loading.patch
  34. 3 3
      build/patches/Disable-fetching-of-all-field-trials.patch
  35. 3 3
      build/patches/Disable-media-router-and-remoting-by-default.patch
  36. 18 21
      build/patches/Disable-metrics-collection-for-NTP-tiles.patch
  37. 2 2
      build/patches/Disable-metrics-on-all-I-O-threads.patch
  38. 1 1
      build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch
  39. 1 1
      build/patches/Disable-plugins-enumeration.patch
  40. 19 19
      build/patches/Disable-promos-displayed-in-bookmarks-manager.patch
  41. 4 4
      build/patches/Disable-references-to-fonts.googleapis.com.patch
  42. 319 199
      build/patches/Disable-safe-browsing.patch
  43. 1 1
      build/patches/Disable-search-ready-omnibox-by-default.patch
  44. 1 1
      build/patches/Disable-seed-based-field-trials.patch
  45. 4 4
      build/patches/Disable-smart-selection-by-default.patch
  46. 2 2
      build/patches/Disable-some-signed-exchange-features.patch
  47. 8 8
      build/patches/Disable-sync-services-menu-entry.patch
  48. 3 3
      build/patches/Do-not-enable-QUIC-by-default.patch
  49. 2 2
      build/patches/Do-not-grant-notifications-to-default-search-engine.patch
  50. 6 7
      build/patches/Do-not-ignore-download-location-prompt-setting.patch
  51. 3 3
      build/patches/Do-not-store-passwords-by-default.patch
  52. 1 1
      build/patches/Enable-changing-default-downloads-storage-location-by-default.patch
  53. 0 23
      build/patches/Enable-download-rename-option-by-default.patch
  54. 1 1
      build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
  55. 0 23
      build/patches/Enable-night-mode-menu-entry-by-default.patch
  56. 2 2
      build/patches/Enable-site-per-process-isolation-for-devices-with-enough-memory.patch
  57. 1 1
      build/patches/Fix-crash-when-accessing-page-info-site-settings.patch
  58. 6 6
      build/patches/Hide-passwords-manager-link.patch
  59. 3 3
      build/patches/Increase-number-of-autocomplete-matches-from-5-to-10.patch
  60. 4 4
      build/patches/Inject-scripts-for-AMP-tracking-ads-and-video-functionality.patch
  61. 27 39
      build/patches/Modify-default-preferences.patch
  62. 36 38
      build/patches/Multiple-fingerprinting-mitigations-for-canvas-text-and-client-rectangles.patch
  63. 1 1
      build/patches/Never-fetch-popular-sites.patch
  64. 1 1
      build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch
  65. 2 2
      build/patches/Open-YouTube-links-in-Bromite.patch
  66. 7 17
      build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch
  67. 96 82
      build/patches/Remove-SMS-integration.patch
  68. 0 46
      build/patches/Remove-background-sync-and-translate-menu-options.patch
  69. 8 8
      build/patches/Remove-dependency-on-com.google.android.gms.auth.patch
  70. 14 14
      build/patches/Remove-dependency-on-com.google.android.gms.cast.patch
  71. 32 32
      build/patches/Remove-dependency-on-com.google.android.gms.common-auth-signin-dynamic-com.google.android.gms.tasks.patch
  72. 22 22
      build/patches/Remove-dependency-on-com.google.android.gms.fido-com.google.android.gms.iid-com.google.android.gms.instantapps-com.google.android.gms.location.patch
  73. 4 4
      build/patches/Remove-dependency-on-com.google.android.gms.flags-com.google.android.gms.location.places-com.google.android.gms.stats.patch
  74. 13 13
      build/patches/Remove-dependency-on-com.google.android.gms.gcm.patch
  75. 4 4
      build/patches/Remove-dependency-on-com.google.android.gms.vision-com.google.android.gms.clearcut-com.google.android.gms.phenotype.patch
  76. 3 3
      build/patches/Remove-dependency-on-com.google.android.play.patch
  77. 15 15
      build/patches/Remove-help-menu-item.patch
  78. 91 146
      build/patches/Remove-signin-and-data-saver-integrations.patch
  79. 1 1
      build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch
  80. 2 2
      build/patches/Restore-enable-horizontal-tab-switcher-flag.patch
  81. 8 8
      build/patches/Revert-Cleanup-Search-Ready-Omnibox-flag-since-it-has-launched.patch
  82. 3 3
      build/patches/Revert-Merge-to-M78-Enable-AImageReader-by-default.patch
  83. 383 259
      build/patches/Revert-Remove-pre-unified-consent-code-in-sync-and-privacy-directory.patch
  84. 4 4
      build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch
  85. 15 20
      build/patches/Skip-the-first-run-and-metrics.patch
  86. 1 1
      build/patches/Switch-to-fstack-protector-strong.patch
  87. 0 38
      build/patches/Use-64-bit-WebView-processes.patch
  88. 8 8
      build/patches/Use-dummy-DFM-installer.patch
  89. 5 5
      build/patches/autofill-disable-autofill-download-manager.patch
  90. 12 37
      build/patches/build-remove-calling-untrusted-hooks.patch
  91. 1 1
      build/patches/disable-AdsBlockedInfoBar.patch
  92. 2 2
      build/patches/disable-background-sync-by-default.patch
  93. 3 3
      build/patches/disable-sensors-access-site-setting-by-default.patch
  94. 1 1
      build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch
  95. 6 6
      build/patches/kill-Auth.patch
  96. 17 18
      build/patches/kill-GCM.patch
  97. 1 1
      build/patches/kill-Location-fall-back-to-system.patch
  98. 6 5
      build/patches/kill-Translate.patch
  99. 6 24
      build/patches/openH264-enable-ARM-ARM64-optimizations.patch
  100. 2 2
      build/patches/prefs-only-keep-cookies-until-exit.patch

+ 7 - 0
CHANGELOG.md

@@ -1,3 +1,10 @@
+# 80.0.3987.78
+* removed ungoogled-chromium patch for non-remote developer tools resources
+* removed patch for 64-bit webview (it is now a default from upstream)
+* removed patch for enabling dark mode menu entry by default (it is now a default from upstream)
+* removed patch for enabling download rename by default (it is now a default from upstream)
+* removed some redundant Iridium safe browsing patches
+
 # 79.0.3945.139
 * remove patch to automatically disable video decoding acceleration on Android 10+ and arm64
 * fix referral headers bug in non-DoH requests (fixes https://github.com/bromite/bromite/issues/470)

+ 1 - 1
README.md

@@ -58,7 +58,7 @@ ETH donations address: `0xf47ff39223d828f99fec5ab53bd068c5c0522042`
 * [AV1 codec support](https://github.com/bromite/bromite/wiki/AV1-support)
 * [dav1d](https://code.videolan.org/videolan/dav1d) decoder enabled by default
 * built with official speed optimizations
-* increase number of autocomplete matches
+* increase number of autocomplete matches from 5 to 10
 * allow changing default download storage location
 * do not ignore save prompt for users without SD cards
 * disable articles and increase number of icons on new tab page

+ 0 - 1
build/GN_ARGS

@@ -28,7 +28,6 @@ is_debug=false
 is_official_build=true
 rtc_build_examples=false
 safe_browsing_mode=0
-strip_absolute_paths_from_debug_symbols=true
 symbol_level=1
 target_os="android"
 use_debug_fission=true

+ 1 - 9
build/bromite_patches_list.txt

@@ -29,16 +29,11 @@ ungoogled-chromium-Disable-GCM.patch
 ungoogled-chromium-Disable-Gaia.patch
 ungoogled-chromium-Disable-domain-reliability.patch
 ungoogled-chromium-Disable-Network-Time-Tracker.patch
-ungoogled-chromium-Always-use-local-DevTools-files-instead-of-remote-files-from-Google.patch
-safe_browsing-disable-incident-reporting.patch
-safe_browsing-disable-reporting-of-safebrowsing-override.patch
-safe_browsing-disable-cookie-transmission.patch
 Disable-safe-browsing.patch
 Skip-the-first-run-and-metrics.patch
 Disable-all-promo-dialogs.patch
 Disable-sync-services-menu-entry.patch
 Remove-signin-and-data-saver-integrations.patch
-Remove-background-sync-and-translate-menu-options.patch
 Hide-passwords-manager-link.patch
 Disable-Omaha-update-checks.patch
 Disable-update-scheduler.patch
@@ -106,15 +101,12 @@ Disable-previews-by-default.patch
 Use-4-tile-rows-never-show-logo.patch
 Disable-metrics-collection-for-NTP-tiles.patch
 Enable-site-per-process-isolation-for-devices-with-enough-memory.patch
-Use-64-bit-WebView-processes.patch
 Add-option-to-use-home-page-as-NTP.patch
-Enable-night-mode-menu-entry-by-default.patch
 Disable-dynamic-module-loading.patch
 prefs-disable-signinallowed-by-default.patch
 prefs-always-prompt-for-download-directory-by-default.patch
 Disable-offline-pages-in-the-downloads-home-to-be-opened-in-CCT-by-default.patch
 Enable-changing-default-downloads-storage-location-by-default.patch
-Enable-download-rename-option-by-default.patch
 disable-payment-support-by-default.patch
 disable-background-sync-by-default.patch
 disable-sensors-access-site-setting-by-default.patch
@@ -139,9 +131,9 @@ Disable-password-reuse-detection-on-android.patch
 Allow-building-without-feed-support.patch
 Disable-addresses-autofill-by-default.patch
 Always-show-site-settings-for-cookies-javascript-and-ads.patch
-Automated-domain-substitution.patch
 Do-not-enable-QUIC-by-default.patch
 Restore-enable-horizontal-tab-switcher-flag.patch
 Use-a-minimum-DoH-timeout-of-400ms.patch
 Disable-DRM-media-origin-IDs-preprovisioning.patch
 Disable-smart-selection-by-default.patch
+Automated-domain-substitution.patch

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

@@ -25,7 +25,7 @@ Report AV1 as playable on Android
 diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
 --- a/media/base/mime_util_internal.cc
 +++ b/media/base/mime_util_internal.cc
-@@ -564,9 +564,13 @@ bool MimeUtil::IsCodecSupportedOnAndroid(
+@@ -560,9 +560,13 @@ bool MimeUtil::IsCodecSupportedOnAndroid(
      case THEORA:
        return false;
  

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

@@ -36,7 +36,7 @@ Offer auto-complete for the proxy page URL.
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
 +++ b/chrome/android/java/res/values/values.xml
-@@ -78,6 +78,9 @@
+@@ -77,6 +77,9 @@
      <integer name="list_item_level_selected">1</integer>
      <integer name="list_item_level_incognito">2</integer>
  
@@ -53,17 +53,17 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
  <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
  
-+    <org.chromium.chrome.browser.preferences.HyperlinkPreference
++    <org.chromium.chrome.browser.settings.HyperlinkPreference
 +        android:key="proxy"
 +        android:title="@string/proxy_title"
 +        app:url="@string/proxy_url" />
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+     <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
          android:key="search_suggestions"
          android:title="@string/search_suggestions_title"
 diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
-@@ -256,6 +256,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
+@@ -257,6 +257,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
    std::vector<base::string16> builtins_to_provide;
    builtins_to_provide.push_back(
        base::ASCIIToUTF16(chrome::kChromeUIFlagsURL));
@@ -75,7 +75,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
-@@ -202,6 +202,12 @@
+@@ -148,6 +148,12 @@
          <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
        </if>
  
@@ -86,8 +86,8 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou
 +      </if>
 +
        <!-- App Management. -->
-       <if expr="not is_android">
-         <include name="IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS" file="${root_gen_dir}\skia\public\mojom\bitmap.mojom-lite.js" use_base_dir="false" type="BINDATA" />
+       <if expr="chromeos">
+         <include name="IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS" file="${root_gen_dir}\skia\public\mojom\bitmap.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" />
 diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc
 --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc
 +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc
@@ -509,7 +509,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
-@@ -263,6 +263,8 @@ jumbo_static_library("ui") {
+@@ -260,6 +260,8 @@ jumbo_static_library("ui") {
      "webui/metrics_handler.h",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.h",
@@ -529,7 +529,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
  #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
  #include "chrome/browser/ui/webui/settings/settings_ui.h"
  #include "chrome/browser/ui/webui/settings_utils.h"
-@@ -376,6 +377,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -400,6 +401,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
@@ -979,7 +979,7 @@ new file mode 100644
 diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
 --- a/chrome/common/webui_url_constants.cc
 +++ b/chrome/common/webui_url_constants.cc
-@@ -182,6 +182,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
+@@ -184,6 +184,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
  const char kChromeUINativeScheme[] = "chrome-native";
  const char kChromeUIOfflineInternalsHost[] = "offline-internals";
  const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics";
@@ -988,7 +988,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
  const char kChromeUISnippetsInternalsHost[] = "snippets-internals";
  const char kChromeUIWebApksHost[] = "webapks";
  #endif
-@@ -461,6 +463,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) {
+@@ -467,6 +469,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) {
        kResetSubPage,
        kSmartLockSettingsSubPage,
        kSmbSharesSubPage,
@@ -996,7 +996,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
        kStorageSubPage,
        kStylusSubPage,
        kSwitchAccessSubPage,
-@@ -561,6 +564,7 @@ const char* const kChromeHostURLs[] = {
+@@ -568,6 +571,7 @@ const char* const kChromeHostURLs[] = {
  #if !defined(OS_ANDROID)
  #if !defined(OS_CHROMEOS)
      kChromeUIAppLauncherPageHost,

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

@@ -8,14 +8,15 @@ Make sure initial incognito status is correctly recognized.
 ---
  chrome/android/chrome_java_sources.gni        |  1 +
  .../java/res/xml/privacy_preferences.xml      |  5 ++
- .../AlwaysIncognitoLinkInterceptor.java       | 73 +++++++++++++++++++
+ .../AlwaysIncognitoLinkInterceptor.java       | 74 +++++++++++++++++++
  .../chrome/browser/ChromeActivity.java        |  4 +
  .../chrome/browser/ChromeTabbedActivity.java  |  6 +-
- .../browser/appmenu/AppMenuHandlerImpl.java   |  9 +++
+ .../AppMenuPropertiesDelegateImpl.java        |  6 ++
  .../ChromeContextMenuPopulator.java           |  9 ++-
  .../browser/tabmodel/ChromeTabCreator.java    | 20 ++++-
- .../java/strings/android_chrome_strings.grd   |  8 ++
- 9 files changed, 131 insertions(+), 4 deletions(-)
+ .../ui/appmenu/AppMenuHandlerImpl.java        |  1 +
+ .../strings/android_chrome_strings.grd        |  8 ++
+ 10 files changed, 130 insertions(+), 4 deletions(-)
  create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
 
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
@@ -36,19 +37,19 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
          android:title="@string/preload_pages_title"
          android:summary="@string/preload_pages_summary"
          android:persistent="false" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
++    <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
 +        android:key="always_incognito"
 +        android:title="@string/always_incognito_title"
 +        android:summary="@string/always_incognito_summary"
 +        android:defaultValue="false" />
      <Preference
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
+         android:fragment="org.chromium.chrome.browser.settings.privacy.DoNotTrackPreference"
          android:key="do_not_track"
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
 new file mode 100644
 --- /dev/null
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
-@@ -0,0 +1,73 @@
+@@ -0,0 +1,74 @@
 +/* This Source Code Form is subject to the terms of the Mozilla Public
 + * License, v. 2.0. If a copy of the MPL was not distributed with this
 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@@ -59,6 +60,7 @@ new file mode 100644
 +
 +import org.chromium.chrome.browser.tab.EmptyTabObserver;
 +import org.chromium.chrome.browser.tab.Tab;
++import org.chromium.chrome.browser.tab.TabImpl;
 +import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
 +import org.chromium.chrome.browser.tabmodel.TabLaunchType;
 +import org.chromium.chrome.browser.tabmodel.TabModel;
@@ -112,7 +114,7 @@ new file mode 100644
 +            return;
 +        }
 +
-+        tab.getActivity().getTabCreator(true).createNewTab(new LoadUrlParams(url), TabLaunchType.FROM_LINK, tab);
++        ((TabImpl) tab).getActivity().getTabCreator(true).createNewTab(new LoadUrlParams(url), TabLaunchType.FROM_LINK, tab);
 +
 +        if ((url.equals(lastUrl)) || (!tab.canGoBack())) {
 +            // this call was triggered by a reload
@@ -125,15 +127,15 @@ new file mode 100644
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
-@@ -55,6 +55,7 @@ import org.chromium.base.annotations.UsedByReflection;
+@@ -54,6 +54,7 @@ import org.chromium.base.annotations.UsedByReflection;
  import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.metrics.RecordUserAction;
  import org.chromium.chrome.R;
 +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
  import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
  import org.chromium.chrome.browser.IntentHandler.TabOpenType;
- import org.chromium.chrome.browser.appmenu.AppMenuBlocker;
-@@ -1706,6 +1707,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+ import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegateImpl;
+@@ -1680,6 +1681,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }
@@ -146,7 +148,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
 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
-@@ -49,6 +49,7 @@ import org.chromium.base.metrics.RecordHistogram;
+@@ -50,6 +50,7 @@ import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.metrics.RecordUserAction;
  import org.chromium.base.task.PostTask;
  import org.chromium.chrome.R;
@@ -154,7 +156,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;
-@@ -1652,8 +1653,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
+@@ -1609,8 +1610,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
          Bundle savedInstanceState = getSavedInstanceState();
  
          // We determine the model as soon as possible so every systems get initialized coherently.
@@ -166,39 +168,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
          int index = savedInstanceState != null ? savedInstanceState.getInt(WINDOW_INDEX, 0) : 0;
  
          mTabModelSelectorImpl = (TabModelSelectorImpl)
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
-@@ -20,8 +20,10 @@ import android.widget.PopupMenu;
- 
- import org.chromium.base.Callback;
- import org.chromium.base.VisibleForTesting;
-+import org.chromium.base.ContextUtils;
- import org.chromium.base.metrics.RecordUserAction;
- import org.chromium.chrome.R;
-+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
- import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
- import org.chromium.chrome.browser.lifecycle.ConfigurationChangedObserver;
- import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
-@@ -208,6 +210,13 @@ class AppMenuHandlerImpl
-         if (mDelegate.shouldShowHeader(appRect.height())) {
-             headerResourceId = mDelegate.getHeaderResourceId();
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
+@@ -289,6 +289,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+                             ChromeSwitches.ENABLE_VR_SHELL_DEV));
          }
-+
-+        if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
-+            final MenuItem newTabOption = mAppMenu.getMenu().findItem(R.id.new_tab_menu_id);
+ 
++        if (ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
++            final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id);
 +            if (newTabOption != null)
 +                newTabOption.setVisible(false);
 +        }
 +
-         mAppMenu.show(wrapper, anchorView, isByPermanentButton, rotation, appRect, pt.y,
-                 footerResourceId, headerResourceId, mHighlightMenuId, mCircleHighlight,
-                 showFromBottom);
+         // We have to iterate all menu items since same menu item ID may be associated with more
+         // than one menu items.
+         boolean isMenuGroupTabsVisible = FeatureUtilities.isTabGroupsAndroidUiImprovementsEnabled()
 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
-@@ -16,7 +16,9 @@ import androidx.annotation.IntDef;
- 
+@@ -17,7 +17,9 @@ import androidx.annotation.IntDef;
+ import org.chromium.base.Supplier;
  import org.chromium.base.library_loader.LibraryProcessType;
  import org.chromium.base.metrics.RecordHistogram;
 +import org.chromium.base.ContextUtils;
@@ -207,7 +197,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
  import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabPanel;
  import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
-@@ -301,7 +303,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -308,7 +310,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
              if (FirstRunStatus.getFirstRunFlowComplete() && mMode == ContextMenuMode.NORMAL
                      && !isEmptyUrl(params.getUrl())
                      && UrlUtilities.isAcceptedScheme(params.getUrl())) {
@@ -224,10 +214,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
 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
-@@ -9,8 +9,10 @@ import android.text.TextUtils;
- 
+@@ -10,8 +10,10 @@ import android.text.TextUtils;
  import androidx.annotation.Nullable;
  
+ import org.chromium.base.Supplier;
 +import org.chromium.base.ContextUtils;
  import org.chromium.base.SysUtils;
  import org.chromium.base.TraceEvent;
@@ -235,7 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  import org.chromium.chrome.browser.ChromeActivity;
  import org.chromium.chrome.browser.IntentHandler;
  import org.chromium.chrome.browser.ServiceTabLauncher;
-@@ -19,6 +21,7 @@ import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
+@@ -20,6 +22,7 @@ import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.tab.TabAssociatedApp;
  import org.chromium.chrome.browser.tab.TabBuilder;
@@ -243,7 +233,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  import org.chromium.chrome.browser.tab.TabDelegateFactory;
  import org.chromium.chrome.browser.tab.TabParentIntent;
  import org.chromium.chrome.browser.tab.TabRedirectHandler;
-@@ -40,6 +43,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -41,6 +44,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
      private final ChromeActivity mActivity;
      private final StartupTabPreloader mStartupTabPreloader;
      private final boolean mIncognito;
@@ -251,9 +241,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  
      private WindowAndroid mNativeWindow;
      private TabModel mTabModel;
-@@ -51,6 +55,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
-         mStartupTabPreloader = startupTabPreloader;
+@@ -55,6 +59,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
          mNativeWindow = nativeWindow;
+         mTabDelegateFactorySupplier = tabDelegateFactory;
          mIncognito = incognito;
 +        if (!mIncognito)
 +            mExtraLogic = new AlwaysIncognitoLinkInterceptor(ContextUtils.getAppSharedPreferences());
@@ -262,7 +252,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
      }
  
      @Override
-@@ -186,6 +194,9 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -190,6 +198,9 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                          tab.getWebContents());
              }
  
@@ -272,7 +262,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
              mTabModel.addTab(tab, position, type);
              return tab;
          } finally {
-@@ -217,6 +228,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -221,6 +232,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                            .setDelegateFactory(delegateFactory)
                            .setInitiallyHidden(!openInForeground)
                            .build();
@@ -283,7 +273,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          mTabModel.addTab(tab, position, type);
          return true;
      }
-@@ -259,7 +274,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -263,7 +278,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
       */
      public Tab launchUrlFromExternalApp(String url, String referer, String headers,
              String appId, boolean forceNewTab, Intent intent, long intentTimestamp) {
@@ -291,7 +281,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
  
          // If an external app sends an intent for a Weblite URL and the Data Reduction Proxy is
-@@ -326,6 +340,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -330,6 +344,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                            .setTabState(state)
                            .build();
          assert state.isIncognito() == mIncognito;
@@ -302,10 +292,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          mTabModel.addTab(tab, index, TabLaunchType.FROM_RESTORE);
          return tab;
      }
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -669,6 +669,14 @@ CHAR-LIMIT guidelines:
+diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java
+--- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java
++++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java
+@@ -212,6 +212,7 @@ class AppMenuHandlerImpl
+         if (mDelegate.shouldShowHeader(appRect.height())) {
+             headerResourceId = mDelegate.getHeaderResourceId();
+         }
++
+         mAppMenu.show(wrapper, anchorView, isByPermanentButton, rotation, appRect, pt.y,
+                 footerResourceId, headerResourceId, mHighlightMenuId, mCircleHighlight,
+                 showFromBottom, mDelegate.getCustomViewBinders());
+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
+@@ -699,6 +699,14 @@ CHAR-LIMIT guidelines:
          Search and site suggestions disabled
        </message>
  

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

@@ -14,21 +14,21 @@ Completely remove contacts picker permission from the file dialog
  .../browser/bookmarks/BookmarkDelegate.java   |  10 +
  .../browser/bookmarks/BookmarkManager.java    |  20 ++
  .../browser/bookmarks/BookmarkPage.java       |   1 +
- .../java/strings/android_chrome_strings.grd   |   6 +
  chrome/browser/BUILD.gn                       |   8 +-
- .../android/bookmarks/bookmark_bridge.cc      | 215 ++++++++++++++++++
+ .../android/bookmarks/bookmark_bridge.cc      | 217 ++++++++++++++++++
  .../android/bookmarks/bookmark_bridge.h       |  20 +-
  chrome/browser/importer/profile_writer.cc     |  12 +
  chrome/browser/importer/profile_writer.h      |   6 +
+ .../strings/android_chrome_strings.grd        |   6 +
  chrome/common/BUILD.gn                        |   3 +
  chrome/utility/BUILD.gn                       |   7 +-
  .../utility/importer/bookmark_html_reader.cc  |  27 ++-
- .../utility/importer/bookmark_html_reader.h   |   9 +
+ .../utility/importer/bookmark_html_reader.h   |   8 +
  .../chromium/ui/base/SelectFileDialog.java    |  18 +-
  ui/shell_dialogs/select_file_dialog.h         |   2 +
  .../select_file_dialog_android.cc             |   6 +
  ui/shell_dialogs/select_file_dialog_android.h |   2 +
- 22 files changed, 447 insertions(+), 14 deletions(-)
+ 22 files changed, 448 insertions(+), 14 deletions(-)
 
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
@@ -111,7 +111,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/BookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java
-@@ -12,6 +12,7 @@ import org.chromium.base.VisibleForTesting;
+@@ -13,6 +13,7 @@ import androidx.annotation.VisibleForTesting;
  import org.chromium.chrome.browser.SnackbarActivity;
  import org.chromium.chrome.browser.util.UrlConstants;
  import org.chromium.components.bookmarks.BookmarkId;
@@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  
  /**
   * The activity that displays the bookmark UI on the phone. It keeps a {@link BookmarkManager}
-@@ -21,6 +22,7 @@ import org.chromium.components.bookmarks.BookmarkId;
+@@ -22,6 +23,7 @@ import org.chromium.components.bookmarks.BookmarkId;
  public class BookmarkActivity extends SnackbarActivity {
  
      private BookmarkManager mBookmarkManager;
@@ -127,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      static final int EDIT_BOOKMARK_REQUEST_CODE = 14;
      public static final String INTENT_VISIT_BOOKMARK_ID = "BookmarkEditActivity.VisitBookmarkId";
  
-@@ -32,6 +34,18 @@ public class BookmarkActivity extends SnackbarActivity {
+@@ -33,6 +35,18 @@ public class BookmarkActivity extends SnackbarActivity {
          if (TextUtils.isEmpty(url)) url = UrlConstants.BOOKMARKS_URL;
          mBookmarkManager.updateForUrl(url);
          setContentView(mBookmarkManager.getView());
@@ -146,7 +146,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      }
  
      @Override
-@@ -48,6 +62,7 @@ public class BookmarkActivity extends SnackbarActivity {
+@@ -49,6 +63,7 @@ public class BookmarkActivity extends SnackbarActivity {
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
@@ -169,7 +169,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  import android.support.annotation.Nullable;
  import android.text.TextUtils;
  import android.util.Pair;
-@@ -23,6 +27,11 @@ import org.chromium.components.bookmarks.BookmarkType;
+@@ -25,6 +29,11 @@ import org.chromium.components.bookmarks.BookmarkType;
  import org.chromium.components.url_formatter.UrlFormatter;
  import org.chromium.content_public.browser.WebContents;
  
@@ -181,7 +181,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  import java.util.ArrayList;
  import java.util.List;
  
-@@ -553,6 +562,24 @@ public class BookmarkBridge {
+@@ -572,6 +581,24 @@ public class BookmarkBridge {
                  mNativeBookmarkBridge, BookmarkBridge.this, id.getId(), id.getType());
      }
  
@@ -206,7 +206,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.
-@@ -914,6 +941,24 @@ public class BookmarkBridge {
+@@ -952,6 +979,24 @@ public class BookmarkBridge {
          depthList.add(depth);
      }
  
@@ -231,7 +231,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++) {
-@@ -982,6 +1027,8 @@ public class BookmarkBridge {
+@@ -1020,6 +1065,8 @@ public class BookmarkBridge {
          int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type);
          void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type,
                  boolean getFolders, boolean getBookmarks, List<BookmarkId> bookmarksList);
@@ -263,7 +263,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/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
-@@ -23,6 +23,7 @@ import org.chromium.chrome.R;
+@@ -24,6 +24,7 @@ import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
@@ -271,7 +271,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  import org.chromium.chrome.browser.favicon.LargeIconBridge;
  import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
  import org.chromium.chrome.browser.native_page.BasicNativePage;
-@@ -35,6 +36,7 @@ import org.chromium.chrome.browser.widget.selection.SelectableListLayout;
+@@ -36,6 +37,7 @@ import org.chromium.chrome.browser.widget.selection.SelectableListLayout;
  import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.SearchDelegate;
  import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
  import org.chromium.components.bookmarks.BookmarkId;
@@ -279,7 +279,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  
  import java.util.Stack;
  
-@@ -59,6 +61,7 @@ public class BookmarkManager
+@@ -60,6 +62,7 @@ public class BookmarkManager
      private Activity mActivity;
      private ViewGroup mMainView;
      private BookmarkModel mBookmarkModel;
@@ -287,7 +287,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private BookmarkUndoController mUndoController;
      private final ObserverList<BookmarkUIObserver> mUIObservers = new ObserverList<>();
      private BasicNativePage mNativePage;
-@@ -374,6 +377,13 @@ public class BookmarkManager
+@@ -375,6 +378,13 @@ public class BookmarkManager
          mSelectableListLayout.setHistoryNavigationDelegate(delegate);
      }
  
@@ -301,7 +301,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      /**
       * @return Current URL representing the UI state of bookmark manager. If no state has been shown
       *         yet in this session, on phone return last used state stored in preference; on tablet
-@@ -547,6 +557,16 @@ public class BookmarkManager
+@@ -548,6 +558,16 @@ public class BookmarkManager
          }
      }
  
@@ -321,7 +321,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/BookmarkPage.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java
-@@ -35,6 +35,7 @@ public class BookmarkPage extends BasicNativePage {
+@@ -36,6 +36,7 @@ public class BookmarkPage extends BasicNativePage {
          mManager = new BookmarkManager(
                  activity, false, ((SnackbarManageable) activity).getSnackbarManager());
          mManager.setBasicNativePage(this);
@@ -329,26 +329,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          mManager.setHistoryNavigationDelegate(host.createHistoryNavigationDelegate());
          mTitle = activity.getString(R.string.bookmarks);
      }
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -230,6 +230,12 @@ CHAR-LIMIT guidelines:
-       <message name="IDS_SEARCH" desc="The label for a search button.">
-         Search
-       </message>
-+      <message name="IDS_IMPORT_BOOKMARKS" desc="The label for the import bookmarks button.">
-+        Import
-+      </message>
-+      <message name="IDS_EXPORT_BOOKMARKS" desc="The label for an export bookmarks button.">
-+        Export
-+      </message>
-       <message name="IDS_SHOW_INFO" desc="The label for a info button to show info.">
-         Show Info
-       </message>
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -163,6 +163,10 @@ jumbo_static_library("browser") {
+@@ -170,6 +170,10 @@ jumbo_static_library("browser") {
      "bitmap_fetcher/bitmap_fetcher_service.h",
      "bitmap_fetcher/bitmap_fetcher_service_factory.cc",
      "bitmap_fetcher/bitmap_fetcher_service_factory.h",
@@ -359,16 +343,16 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
      "bookmarks/bookmark_model_factory.cc",
      "bookmarks/bookmark_model_factory.h",
      "bookmarks/chrome_bookmark_client.cc",
-@@ -2953,8 +2957,6 @@ jumbo_static_library("browser") {
-       "badging/badge_manager_factory.h",
-       "banners/app_banner_manager_desktop.cc",
-       "banners/app_banner_manager_desktop.h",
+@@ -3063,8 +3067,6 @@ jumbo_static_library("browser") {
+       "bluetooth/bluetooth_chooser_context.h",
+       "bluetooth/bluetooth_chooser_context_factory.cc",
+       "bluetooth/bluetooth_chooser_context_factory.h",
 -      "bookmarks/bookmark_html_writer.cc",
 -      "bookmarks/bookmark_html_writer.h",
        "certificate_viewer.h",
        "chrome_browser_field_trials_desktop.cc",
        "chrome_browser_field_trials_desktop.h",
-@@ -3059,8 +3061,6 @@ jumbo_static_library("browser") {
+@@ -3174,8 +3176,6 @@ jumbo_static_library("browser") {
        "importer/importer_uma.h",
        "importer/in_process_importer_bridge.cc",
        "importer/in_process_importer_bridge.h",
@@ -380,7 +364,15 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc
 --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
 +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
-@@ -43,6 +43,21 @@
+@@ -34,6 +34,7 @@
+ #include "components/bookmarks/common/android/bookmark_type.h"
+ #include "components/bookmarks/common/bookmark_pref_names.h"
+ #include "components/bookmarks/managed/managed_bookmark_service.h"
++#include "components/favicon_base/favicon_usage_data.h"
+ #include "components/dom_distiller/core/url_utils.h"
+ #include "components/prefs/pref_service.h"
+ #include "components/query_parser/query_parser.h"
+@@ -43,6 +44,21 @@
  #include "content/public/browser/browser_thread.h"
  #include "content/public/browser/web_contents.h"
  
@@ -402,7 +394,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  using base::android::AttachCurrentThread;
  using base::android::ConvertUTF8ToJavaString;
  using base::android::ConvertUTF16ToJavaString;
-@@ -60,6 +75,56 @@ using bookmarks::BookmarkPermanentNode;
+@@ -60,6 +76,56 @@ using bookmarks::BookmarkPermanentNode;
  using bookmarks::BookmarkType;
  using content::BrowserThread;
  
@@ -459,7 +451,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  namespace {
  
  const int kInvalidId = -1;
-@@ -138,6 +203,10 @@ BookmarkBridge::~BookmarkBridge() {
+@@ -138,6 +204,10 @@ BookmarkBridge::~BookmarkBridge() {
    bookmark_model_->RemoveObserver(this);
    if (partner_bookmarks_shim_)
      partner_bookmarks_shim_->RemoveObserver(this);
@@ -470,7 +462,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  }
  
  void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) {
-@@ -524,6 +593,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
+@@ -542,6 +612,153 @@ jint BookmarkBridge::GetTotalBookmarkCount(
    return count;
  }
  
@@ -585,14 +577,15 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
 +  // the following import logic comes from BookmarksFileImporter class
 +  std::vector<ImportedBookmarkEntry> bookmarks;
 +  std::vector<importer::SearchEngineInfo> search_engines;
++  favicon_base::FaviconUsageDataList favicons;
 +
 +  bookmark_html_reader::ImportBookmarksFile(
 +      base::Callback<bool(void)>(),
-+      base::Bind(internal::CanImportURL),
++      base::BindRepeating(internal::CanImportURL),
 +      contents,
 +      &bookmarks,
 +      &search_engines,
-+      nullptr);
++      &favicons);
 +
 +  auto *writer = new ProfileWriter(profile_);
 +
@@ -745,10 +738,26 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/
    virtual void AddFavicons(const favicon_base::FaviconUsageDataList& favicons);
  
    // Adds the TemplateURLs in |template_urls| to the local store.
+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
+@@ -257,6 +257,12 @@ CHAR-LIMIT guidelines:
+       <message name="IDS_SEARCH" desc="The label for a search button.">
+         Search
+       </message>
++      <message name="IDS_IMPORT_BOOKMARKS" desc="The label for the import bookmarks button.">
++        Import
++      </message>
++      <message name="IDS_EXPORT_BOOKMARKS" desc="The label for an export bookmarks button.">
++        Export
++      </message>
+       <message name="IDS_SHOW_INFO" desc="The label for a info button to show info.">
+         Show Info
+       </message>
 diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
 --- a/chrome/common/BUILD.gn
 +++ b/chrome/common/BUILD.gn
-@@ -445,6 +445,9 @@ static_library("common") {
+@@ -426,6 +426,9 @@ static_library("common") {
      sources += [
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.h",
@@ -761,7 +770,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
 diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
 --- a/chrome/utility/BUILD.gn
 +++ b/chrome/utility/BUILD.gn
-@@ -66,8 +66,6 @@ static_library("utility") {
+@@ -70,8 +70,6 @@ static_library("utility") {
  
    if (!is_android) {
      sources += [
@@ -770,7 +779,7 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
        "importer/bookmarks_file_importer.cc",
        "importer/bookmarks_file_importer.h",
        "importer/edge_database_reader_win.cc",
-@@ -164,6 +162,11 @@ static_library("utility") {
+@@ -167,6 +165,11 @@ static_library("utility") {
      }
    }
  
@@ -811,21 +820,39 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im
  
  }  // namespace
  
-@@ -108,12 +112,10 @@ static std::string stripDt(const std::string& lineDt) {
+@@ -106,14 +110,28 @@ static std::string stripDt(const std::string& lineDt) {
+ }
+ 
  void ImportBookmarksFile(
-     const base::Callback<bool(void)>& cancellation_callback,
-     const base::Callback<bool(const GURL&)>& valid_url_callback,
--    const base::FilePath& file_path,
-+    const std::string& content,
+-    base::RepeatingCallback<bool(void)> cancellation_callback,
+-    base::RepeatingCallback<bool(const GURL&)> valid_url_callback,
++    const base::RepeatingCallback<bool(void)> cancellation_callback,
++    const base::RepeatingCallback<bool(const GURL&)> valid_url_callback,
+     const base::FilePath& file_path,
      std::vector<ImportedBookmarkEntry>* bookmarks,
      std::vector<importer::SearchEngineInfo>* search_engines,
      favicon_base::FaviconUsageDataList* favicons) {
--  std::string content;
+   std::string content;
 -  base::ReadFileToString(file_path, &content);
++  if (!base::ReadFileToString(file_path, &content)) {
++     LOG(ERROR) << "Could not directly read bookmarks import file";
++     return;
++  }
++
++  ImportBookmarksFile(cancellation_callback, valid_url_callback, content, bookmarks, search_engines, favicons);
++}
++
++void ImportBookmarksFile(
++    base::RepeatingCallback<bool(void)> cancellation_callback,
++    base::RepeatingCallback<bool(const GURL&)> valid_url_callback,
++    const std::string& content,
++    std::vector<ImportedBookmarkEntry>* bookmarks,
++    std::vector<importer::SearchEngineInfo>* search_engines,
++    favicon_base::FaviconUsageDataList* favicons) {
    std::vector<std::string> lines = base::SplitString(
        content, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
  
-@@ -126,6 +128,7 @@ void ImportBookmarksFile(
+@@ -126,6 +144,7 @@ void ImportBookmarksFile(
    std::vector<base::string16> path;
    size_t toolbar_folder_index = 0;
    std::string charset = "UTF-8";  // If no charset is specified, assume utf-8.
@@ -833,7 +860,7 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im
    for (size_t i = 0;
         i < lines.size() &&
             (cancellation_callback.is_null() || !cancellation_callback.Run());
-@@ -218,10 +221,12 @@ void ImportBookmarksFile(
+@@ -218,10 +237,12 @@ void ImportBookmarksFile(
        }
        bookmarks->push_back(entry);
  
@@ -846,44 +873,20 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im
  
        continue;
      }
-@@ -278,6 +283,22 @@ void ImportBookmarksFile(
-   }
- }
- 
-+void ImportBookmarksFile(
-+    const base::Callback<bool(void)>& cancellation_callback,
-+    const base::Callback<bool(const GURL&)>& valid_url_callback,
-+    const base::FilePath& file_path,
-+    std::vector<ImportedBookmarkEntry>* bookmarks,
-+    std::vector<importer::SearchEngineInfo>* search_engines,
-+    favicon_base::FaviconUsageDataList* favicons) {
-+  std::string content;
-+  if (!base::ReadFileToString(file_path, &content)) {
-+     LOG(ERROR) << "Could not directly read bookmarks import file";
-+     return;
-+  }
-+
-+  ImportBookmarksFile(cancellation_callback, valid_url_callback, content, bookmarks, search_engines, favicons);
-+}
-+
- bool CanImportURLAsSearchEngine(const GURL& url,
-                                 std::string* search_engine_url) {
-   std::string url_spec = url.possibly_invalid_spec();
 diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h
 --- a/chrome/utility/importer/bookmark_html_reader.h
 +++ b/chrome/utility/importer/bookmark_html_reader.h
-@@ -51,6 +51,15 @@ void ImportBookmarksFile(
+@@ -51,6 +51,14 @@ void ImportBookmarksFile(
      std::vector<importer::SearchEngineInfo>* search_engines,
      favicon_base::FaviconUsageDataList* favicons);
  
 +void ImportBookmarksFile(
-+    const base::Callback<bool(void)>& cancellation_callback,
-+    const base::Callback<bool(const GURL&)>& valid_url_callback,
++    const base::RepeatingCallback<bool(void)> cancellation_callback,
++    const base::RepeatingCallback<bool(const GURL&)> valid_url_callback,
 +    const std::string& content,
 +    std::vector<ImportedBookmarkEntry>* bookmarks,
 +    std::vector<importer::SearchEngineInfo>* search_engines,
 +    favicon_base::FaviconUsageDataList* favicons);
-+
 +
  // Returns true if |url| should be imported as a search engine, i.e. because it
  // has replacement terms. Chrome treats such bookmarks as search engines rather
@@ -891,7 +894,7 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/imp
 diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
 --- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
 +++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
-@@ -34,6 +34,7 @@ import org.chromium.base.task.PostTask;
+@@ -35,6 +35,7 @@ import org.chromium.base.task.PostTask;
  import org.chromium.base.task.TaskTraits;
  import org.chromium.ui.PhotoPickerListener;
  import org.chromium.ui.R;
@@ -899,7 +902,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
  import org.chromium.ui.UiUtils;
  
  import java.io.File;
-@@ -53,6 +54,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -54,6 +55,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
      private static final String IMAGE_TYPE = "image/";
      private static final String VIDEO_TYPE = "video/";
      private static final String AUDIO_TYPE = "audio/";
@@ -907,7 +910,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
      private static final String ALL_IMAGE_TYPES = IMAGE_TYPE + "*";
      private static final String ALL_VIDEO_TYPES = VIDEO_TYPE + "*";
      private static final String ALL_AUDIO_TYPES = AUDIO_TYPE + "*";
-@@ -131,6 +133,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -132,6 +134,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          mFileTypes = fileTypes;
      }
  
@@ -919,7 +922,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
      /**
       * Creates and starts an intent based on the passed fileTypes and capture value.
       * @param fileTypes MIME types requested (i.e. "image/*")
-@@ -158,7 +165,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -159,7 +166,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          List<String> missingPermissions = new ArrayList<>();
          String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE;
          boolean shouldUsePhotoPicker = shouldUsePhotoPicker();
@@ -928,7 +931,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
              if (!window.hasPermission(storagePermission)) missingPermissions.add(storagePermission);
          } else {
              if (((mSupportsImageCapture && shouldShowImageTypes())
-@@ -186,7 +193,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -187,7 +194,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
                          }
  
                          // TODO(finnur): Remove once we figure out the cause of crbug.com/950024.
@@ -937,7 +940,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
                              if (permissions.length != requestPermissions.length) {
                                  throw new RuntimeException(
                                          String.format("Permissions arrays misaligned: %d != %d",
-@@ -200,7 +207,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -201,7 +208,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
                              }
                          }
  
@@ -946,7 +949,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
                              onFileNotSelected();
                              return;
                          }
-@@ -349,6 +356,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -350,6 +357,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
              }
              if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType);
          }
@@ -954,7 +957,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
          return mimeTypes;
      }
  
-@@ -626,6 +634,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -627,6 +635,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          return countAcceptTypesFor(specificType) > 0;
      }
  
@@ -968,7 +971,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
 diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_file_dialog.h
 --- a/ui/shell_dialogs/select_file_dialog.h
 +++ b/ui/shell_dialogs/select_file_dialog.h
-@@ -192,6 +192,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
+@@ -191,6 +191,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
                    void* params);
    bool HasMultipleFileTypeChoices();
  

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

@@ -6,8 +6,8 @@ Subject: Add custom tab intents privacy option
  chrome/android/java/res/values/values.xml             |  3 +++
  chrome/android/java/res/xml/privacy_preferences.xml   |  5 +++++
  .../chrome/browser/LaunchIntentDispatcher.java        |  3 +++
- .../preferences/privacy/PrivacyPreferences.java       | 11 +++++++++++
- .../android/java/strings/android_chrome_strings.grd   |  7 +++++++
+ .../browser/settings/privacy/PrivacyPreferences.java  | 11 +++++++++++
+ .../ui/android/strings/android_chrome_strings.grd     |  7 +++++++
  5 files changed, 29 insertions(+)
 
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
@@ -27,10 +27,10 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/chrome/android/java/res/xml/privacy_preferences.xml
 @@ -29,6 +29,11 @@
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
+         android:fragment="org.chromium.chrome.browser.settings.privacy.DoNotTrackPreference"
          android:key="do_not_track"
          android:title="@string/do_not_track_title" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
++    <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
 +        android:key="allow_custom_tab_intents"
 +        android:title="@string/allow_custom_tab_intents_title"
 +        android:summary="@string/allow_custom_tab_intents_summary"
@@ -45,7 +45,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
  import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
  import org.chromium.chrome.browser.searchwidget.SearchActivity;
  import org.chromium.chrome.browser.tab.Tab;
-+import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferences;
++import org.chromium.chrome.browser.settings.privacy.PrivacyPreferences;
  import org.chromium.chrome.browser.util.IntentUtils;
  import org.chromium.chrome.browser.util.UrlConstants;
  import org.chromium.chrome.browser.vr.VrModuleProvider;
@@ -58,9 +58,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
          if (CustomTabsIntent.shouldAlwaysUseBrowserUI(intent)
                  || !intent.hasExtra(CustomTabsIntent.EXTRA_SESSION)) {
              return false;
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
 @@ -41,6 +41,8 @@ public class PrivacyPreferences
  
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
@@ -69,18 +69,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-         PreferenceUtils.addPreferencesFromResource(this, R.xml.privacy_preferences);
-@@ -75,6 +77,10 @@ public class PrivacyPreferences
-             PrefServiceBridge.getInstance().setSearchSuggestEnabled((boolean) newValue);
+         SettingsUtils.addPreferencesFromResource(this, R.xml.privacy_preferences);
+@@ -76,6 +78,10 @@ public class PrivacyPreferences
+                     Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
-             PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
+             PrivacyPreferencesManager.getInstance().setNetworkPredictionEnabled((boolean) newValue);
 +        } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
 +            sharedPreferencesEditor.apply();
-         } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
-             PrefServiceBridge.getInstance().setBoolean(
-                     Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
+         } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
+             PrefServiceBridge.getInstance().setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
+         }
 @@ -111,6 +117,11 @@ public class PrivacyPreferences
                      prefServiceBridge.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
          }
@@ -92,13 +92,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +
          Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
          if (doNotTrackPref != null) {
-             doNotTrackPref.setSummary(
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -3965,6 +3965,13 @@ The site does NOT gain access to the camera. The camera images are only visible
-               'Installing Extra ICU for Chrome…').">
-         Extra ICU
+             doNotTrackPref.setSummary(prefServiceBridge.getBoolean(Pref.ENABLE_DO_NOT_TRACK)
+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
+@@ -3975,6 +3975,13 @@ The site does NOT gain access to the camera. The camera images are only visible
+       <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>
 +      <!-- Allow custom tab intents -->
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
@@ -108,8 +108,8 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
 +        Allow applications to open custom tab intents, similar to webview.
 +      </message>
  
-     </messages>
-   </release>
+       <!-- Autofill Assistant preferences -->
+       <message name="IDS_PREFS_AUTOFILL_ASSISTANT_TITLE" desc="Title for the Autofill Assistant preferences screen. [CHAR-LIMIT=32]">
 -- 
 2.17.1
 

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

@@ -7,13 +7,13 @@ Corrected Exit functionality
  chrome/android/java/res/menu/main_menu.xml                  | 2 ++
  .../src/org/chromium/chrome/browser/ChromeActivity.java     | 2 ++
  .../chrome/browser/init/ChromeLifetimeController.java       | 6 +++++-
- chrome/android/java/strings/android_chrome_strings.grd      | 3 +++
+ .../browser/ui/android/strings/android_chrome_strings.grd   | 3 +++
  4 files changed, 12 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
-@@ -80,6 +80,8 @@
+@@ -85,6 +85,8 @@
              android:title="@string/menu_help" />
          <item android:id="@+id/enter_vr_id"
              android:title="@string/enter_vr" />
@@ -25,9 +25,9 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
-@@ -2204,6 +2204,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
-                     new AddToHomescreenManager(this, currentTab);
-             addToHomescreenManager.start();
+@@ -2177,6 +2177,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+             AddToHomescreenCoordinator.showForAppMenu(
+                     this, getWindowAndroid(), getModalDialogManager(), currentTab.getWebContents());
              RecordUserAction.record("MobileMenuAddToHomescreen");
 +        } else if (id == R.id.exit_id) {
 +            ApplicationLifetime.terminate(false);
@@ -50,10 +50,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife
      }
  
      @Override
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -2860,6 +2860,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+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
+@@ -2903,6 +2903,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_MENU_PREFERENCES" desc="Menu item for opening browser preferences. [CHAR-LIMIT=27]">
          Settings
        </message>

+ 8 - 8
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
-@@ -668,6 +668,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+@@ -706,6 +706,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 ==
-@@ -2633,6 +2638,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2663,6 +2668,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kPassiveDocumentEventListenersName,
       flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kPassiveDocumentEventListeners)},
@@ -44,9 +44,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
-@@ -1275,6 +1275,10 @@ const char kLookalikeUrlNavigationSuggestionsDescription[] =
- const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure";
- const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
+@@ -1279,6 +1279,10 @@ extern const char kMediaInspectorLoggingDescription[] =
+     "project; #enable-devtools-experiments must also be enabled as well on "
+     "desktop platforms";
  
 +const char kMaxConnectionsPerHostName[] = "Maximum connections per host";
 +const char kMaxConnectionsPerHostDescription[] =
@@ -58,9 +58,9 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -776,6 +776,9 @@ extern const char kMarkHttpAsWarning[];
- extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[];
- extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
+@@ -775,6 +775,9 @@ extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
+ extern const char kMediaInspectorLoggingName[];
+ extern const char kMediaInspectorLoggingDescription[];
  
 +extern const char kMaxConnectionsPerHostName[];
 +extern const char kMaxConnectionsPerHostDescription[];

+ 4 - 4
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
-@@ -1670,6 +1670,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1688,6 +1688,10 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-webassembly-threads", flag_descriptions::kEnableWasmThreadsName,
       flag_descriptions::kEnableWasmThreadsDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kWebAssemblyThreads)},
@@ -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
-@@ -904,6 +904,11 @@ const char kMemlogStackModeNative[] = "Native";
+@@ -894,6 +894,11 @@ const char kMemlogStackModeNative[] = "Native";
  const char kMemlogStackModeNativeWithThreadNames[] = "Native with thread names";
  const char kMemlogStackModePseudo[] = "Trace events";
  
@@ -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
-@@ -532,6 +532,9 @@ extern const char kEnablePortalsDescription[];
+@@ -525,6 +525,9 @@ extern const char kEnablePortalsDescription[];
  extern const char kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  
@@ -55,7 +55,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -216,11 +216,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
+@@ -231,11 +231,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
  // when in background.
  const base::Feature kResumeBackgroundVideo {
    "resume-background-video",

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

@@ -3,20 +3,20 @@ Date: Sun, 18 Nov 2018 13:06:49 +0100
 Subject: Add flag to disable IPv6 probes
 
 ---
- chrome/browser/about_flags.cc                          |  5 +++++
- chrome/browser/flag_descriptions.cc                    |  4 ++++
- chrome/browser/flag_descriptions.h                     |  3 +++
- components/subresource_filter/tools/BUILD.gn           |  6 ++++++
- .../url_formatter/spoof_checks/top_domains/BUILD.gn    |  3 ++-
- net/dns/host_resolver_manager.cc                       | 10 ++++++++--
- services/network/public/cpp/features.cc                |  4 ++++
- services/network/public/cpp/features.h                 |  2 ++
- 8 files changed, 34 insertions(+), 3 deletions(-)
+ chrome/browser/about_flags.cc                            | 5 +++++
+ chrome/browser/flag_descriptions.cc                      | 4 ++++
+ chrome/browser/flag_descriptions.h                       | 3 +++
+ components/subresource_filter/tools/BUILD.gn             | 6 ++++++
+ .../url_formatter/spoof_checks/top_domains/BUILD.gn      | 3 ++-
+ net/dns/host_resolver_manager.cc                         | 9 ++++++++-
+ services/network/public/cpp/features.cc                  | 4 ++++
+ services/network/public/cpp/features.h                   | 2 ++
+ 8 files changed, 34 insertions(+), 2 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
-@@ -3281,6 +3281,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3303,6 +3303,11 @@ const FeatureEntry kFeatureEntries[] = {
           kMarkHttpAsFeatureVariations,
           "HTTPReallyBadFinal")},
  
@@ -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
-@@ -2512,6 +2512,10 @@ const char kContextualSearchSimplifiedServerDescription[] =
+@@ -2520,6 +2520,10 @@ const char kContextualSearchSimplifiedServerDescription[] =
  
  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
-@@ -535,6 +535,9 @@ extern const char kEnableNewDownloadBackendDescription[];
+@@ -528,6 +528,9 @@ extern const char kEnableNewDownloadBackendDescription[];
  extern const char kEnablePortalsName[];
  extern const char kEnablePortalsDescription[];
  
@@ -101,7 +101,7 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/net/dns/host_resolver_manager.cc
-@@ -87,6 +87,7 @@
+@@ -92,6 +92,7 @@
  #include "net/socket/client_socket_factory.h"
  #include "net/socket/datagram_client_socket.h"
  #include "net/url_request/url_request_context.h"
@@ -109,22 +109,22 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
  #include "url/url_canon_ip.h"
  
  #if BUILDFLAG(ENABLE_MDNS)
-@@ -3269,8 +3270,13 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
+@@ -3564,8 +3565,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
    bool cached = true;
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
        kIPv6ProbePeriodMs) {
--    last_ipv6_probe_result_ =
--        IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log);
+-    SetLastIPv6ProbeResult(
++
 +    if (!base::FeatureList::IsEnabled(network::features::kIPv6Probing)) {
 +      // pretend IPv6 connectivy probe is successful when probing is disabled
-+      last_ipv6_probe_result_ = true;
++      SetLastIPv6ProbeResult(true);
 +    } else {
-+      last_ipv6_probe_result_ =
-+          IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log);
++      SetLastIPv6ProbeResult(
+         IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log));
 +    }
-     last_ipv6_probe_time_ = tick_clock_->NowTicks();
      cached = false;
    }
+   net_log.AddEvent(
 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

+ 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
-@@ -1462,6 +1462,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1476,6 +1476,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
-@@ -426,6 +426,10 @@ const char kDisableAudioForDesktopShareDescription[] =
+@@ -446,6 +446,10 @@ const char kDisableAudioForDesktopShareDescription[] =
      "With this flag on, desktop share picker window will not let the user "
      "choose whether to share audio.";
  
@@ -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
-@@ -274,6 +274,9 @@ extern const char kDevtoolsExperimentsDescription[];
+@@ -287,6 +287,9 @@ extern const char kDevtoolsExperimentsDescription[];
  extern const char kDisableAudioForDesktopShareName[];
  extern const char kDisableAudioForDesktopShareDescription[];
  

+ 10 - 10
build/patches/Add-flags-to-disable-device-motion-and-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
-@@ -1696,6 +1696,12 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1714,6 +1714,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
-@@ -674,6 +674,14 @@ const char kWinrtSensorsImplementationDescription[] =
+@@ -667,6 +667,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
-@@ -410,6 +410,12 @@ extern const char kWinrtGeolocationImplementationDescription[];
+@@ -409,6 +409,12 @@ extern const char kWinrtGeolocationImplementationDescription[];
  extern const char kWinrtSensorsImplementationName[];
  extern const char kWinrtSensorsImplementationDescription[];
  
@@ -70,7 +70,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
 --- a/content/child/runtime_features.cc
 +++ b/content/child/runtime_features.cc
-@@ -85,6 +85,9 @@ void SetRuntimeFeatureDefaultsForPlatform(
+@@ -87,6 +87,9 @@ void SetRuntimeFeatureDefaultsForPlatform(
        command_line.HasSwitch(
            switches::kEnableGpuMemoryBufferCompositorResources) &&
        !command_line.HasSwitch(switches::kDisableWebGLImageChromium) &&
@@ -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
-@@ -688,6 +688,16 @@ const base::Feature kExperimentalProductivityFeatures{
+@@ -690,6 +690,16 @@ const base::Feature kExperimentalProductivityFeatures{
  // TODO(rouslan): Remove this.
  const base::Feature kWebPayments{"WebPayments",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
@@ -103,9 +103,9 @@ 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
-@@ -156,6 +156,8 @@ CONTENT_EXPORT extern const base::Feature kScriptStreamingOnPreload;
- CONTENT_EXPORT extern const base::Feature kTrustedDOMTypes;
- CONTENT_EXPORT extern const base::Feature kBrowserUseDisplayThreadPriority;
+@@ -157,6 +157,8 @@ CONTENT_EXPORT extern const base::Feature kBrowserUseDisplayThreadPriority;
+ CONTENT_EXPORT extern const base::Feature kFeaturePolicyForClientHints;
+ CONTENT_EXPORT extern const base::Feature kVideoPlaybackQuality;
  
 +CONTENT_EXPORT extern const base::Feature kDeviceMotion, kDeviceOrientation;
 +
@@ -146,7 +146,7 @@ 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
-@@ -172,6 +172,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
+@@ -173,6 +173,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
    RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable);
  }
  
@@ -164,7 +164,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
-@@ -1132,6 +1132,14 @@
+@@ -1162,6 +1162,14 @@
        name: "OffscreenCanvasCommit",
        status: "experimental",
      },

+ 73 - 86
build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch

@@ -7,36 +7,36 @@ Subject: Add option to configure the ad blocker filters URL
  .../java/res/layout/adblock_editor.xml        | 65 +++++++++++++
  chrome/android/java/res/values/values.xml     |  2 +
  .../java/res/xml/adblock_preferences.xml      | 25 +++++
- .../android/java/res/xml/main_preferences.xml | 11 ++-
- .../browser/preferences/AdBlockEditor.java    | 91 +++++++++++++++++++
- .../preferences/AdBlockPreferences.java       | 53 +++++++++++
- .../java/strings/android_chrome_strings.grd   | 14 +++
+ .../android/java/res/xml/main_preferences.xml |  5 +
+ .../browser/settings/AdBlockEditor.java       | 92 +++++++++++++++++++
+ .../browser/settings/AdBlockPreferences.java  | 56 +++++++++++
  chrome/app/generated_resources.grd            | 10 ++
  chrome/browser/android/feature_utilities.cc   |  8 ++
  chrome/browser/browser_process_impl.cc        |  3 +-
  .../net/system_network_context_manager.cc     |  3 +
+ .../strings/android_chrome_strings.grd        | 14 +++
  chrome/common/pref_names.cc                   |  3 +
  chrome/common/pref_names.h                    |  1 +
  .../adblock_updater_service.cc                |  6 +-
  .../adblock_updater_service.h                 |  3 +-
- 16 files changed, 292 insertions(+), 8 deletions(-)
+ 16 files changed, 293 insertions(+), 5 deletions(-)
  create mode 100644 chrome/android/java/res/layout/adblock_editor.xml
  create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml
- create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockEditor.java
- create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockPreferences.java
+ create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java
+ create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java
 
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/chrome/android/chrome_java_sources.gni
 @@ -1277,6 +1277,8 @@ chrome_java_sources = [
-   "java/src/org/chromium/chrome/browser/preferences/PreferenceUtils.java",
-   "java/src/org/chromium/chrome/browser/preferences/Preferences.java",
-   "java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java",
-+  "java/src/org/chromium/chrome/browser/preferences/AdBlockEditor.java",
-+  "java/src/org/chromium/chrome/browser/preferences/AdBlockPreferences.java",
-   "java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java",
-   "java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java",
-   "java/src/org/chromium/chrome/browser/preferences/SearchUtils.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java",
++  "java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java",
++  "java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/FileEnumWorkerTask.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialog.java",
+   "java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerToolbar.java",
 diff --git a/chrome/android/java/res/layout/adblock_editor.xml b/chrome/android/java/res/layout/adblock_editor.xml
 new file mode 100644
 --- /dev/null
@@ -110,7 +110,7 @@ new file mode 100644
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
 +++ b/chrome/android/java/res/values/values.xml
-@@ -70,6 +70,8 @@
+@@ -69,6 +69,8 @@
      <!-- Our manage space activity. Default pre-KitKat to be nothing. -->
      <string name="manage_space_activity"></string>
  
@@ -133,12 +133,12 @@ new file mode 100644
 +    xmlns:android="http://schemas.android.com/apk/res/android"
 +    xmlns:app="http://schemas.android.com/apk/res-auto">
 +
-+    <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
++    <org.chromium.chrome.browser.settings.ChromeSwitchPreference
 +        android:key="adblock_switch"
 +        android:summaryOn="@string/text_on"
 +        android:summaryOff="@string/text_off" />
 +
-+    <org.chromium.chrome.browser.preferences.HyperlinkPreference
++    <org.chromium.chrome.browser.settings.HyperlinkPreference
 +        android:key="adblock_help"
 +        android:title="@string/adblock_help"
 +        app:url="@string/adblock_help_url" />
@@ -146,51 +146,34 @@ new file mode 100644
 +    <Preference
 +        android:key="adblock_edit"
 +        android:title="@string/options_adblock_edit_label"
-+        android:fragment="org.chromium.chrome.browser.preferences.AdBlockEditor" />
++        android:fragment="org.chromium.chrome.browser.settings.AdBlockEditor" />
 +
 +</PreferenceScreen>
 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
-@@ -60,20 +60,25 @@
+@@ -60,6 +60,11 @@
          android:key="privacy"
          android:order="13"
          android:title="@string/prefs_privacy"/>
 +    <Preference
-+        android:fragment="org.chromium.chrome.browser.preferences.AdBlockPreferences"
++        android:fragment="org.chromium.chrome.browser.settings.AdBlockPreferences"
 +        android:key="adblock"
-+        android:order="14"
++        android:order="13"
 +        android:title="@string/prefs_adblock"/>
      <Preference
-         android:fragment="org.chromium.chrome.browser.preferences.AccessibilityPreferences"
+         android:fragment="org.chromium.chrome.browser.settings.accessibility.AccessibilitySettings"
          android:key="accessibility"
--        android:order="14"
-+        android:order="15"
-         android:title="@string/prefs_accessibility"/>
-     <Preference
-         android:fragment="org.chromium.chrome.browser.preferences.website.SiteSettingsPreferences"
-         android:key="content_settings"
--        android:order="15"
-+        android:order="16"
-         android:title="@string/prefs_site_settings"/>
-     <Preference
-         android:fragment="org.chromium.chrome.browser.preferences.languages.LanguagesPreferences"
-         android:key="languages"
--        android:order="16"
-+        android:order="17"
-         android:title="@string/prefs_languages"/>
-     <org.chromium.chrome.browser.preferences.ChromeBasePreference
-         android:fragment="org.chromium.chrome.browser.preferences.download.DownloadPreferences"
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockEditor.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java
 new file mode 100644
 --- /dev/null
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockEditor.java
-@@ -0,0 +1,91 @@
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java
+@@ -0,0 +1,92 @@
 +// Copyright 2015 The Chromium Authors. All rights reserved.
 +// Use of this source code is governed by a BSD-style license that can be
 +// found in the LICENSE file.
 +
-+package org.chromium.chrome.browser.preferences;
++package org.chromium.chrome.browser.settings;
 +
 +import android.os.Bundle;
 +import android.support.v4.app.Fragment;
@@ -202,12 +185,13 @@ new file mode 100644
 +import android.widget.Button;
 +import android.widget.EditText;
 +
-+import org.chromium.chrome.browser.util.FeatureUtilities;
++import org.chromium.chrome.browser.settings.SettingsUtils;
++import org.chromium.chrome.browser.flags.FeatureUtilities;
 +import org.chromium.chrome.R;
 +import org.chromium.components.url_formatter.UrlFormatter;
 +
 +/**
-+ * Provides the Java-UI for editing the DNS-over-HTTPS (AdBlock) preference.
++ * Provides the Java-UI for editing AdBlock preferences.
 + */
 +public class AdBlockEditor extends Fragment implements TextWatcher {
 +    private EditText mAdBlockFiltersUrlEdit;
@@ -223,7 +207,7 @@ new file mode 100644
 +        View v = inflater.inflate(R.layout.adblock_editor, container, false);
 +        View scrollView = v.findViewById(R.id.scroll_view);
 +        scrollView.getViewTreeObserver().addOnScrollChangedListener(
-+                PreferenceUtils.getShowShadowOnScrollListener(v, v.findViewById(R.id.shadow)));
++                SettingsUtils.getShowShadowOnScrollListener(v, v.findViewById(R.id.shadow)));
 +        mAdBlockFiltersUrlEdit = (EditText) v.findViewById(R.id.adblock_url_edit);
 +        mAdBlockFiltersUrlEdit.setText(FeatureUtilities.getAdBlockFiltersURL());
 +        mAdBlockFiltersUrlEdit.addTextChangedListener(this);
@@ -277,24 +261,27 @@ new file mode 100644
 +        });
 +    }
 +}
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockPreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java
 new file mode 100644
 --- /dev/null
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/AdBlockPreferences.java
-@@ -0,0 +1,53 @@
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java
+@@ -0,0 +1,56 @@
 +// Copyright 2015 The Chromium Authors. All rights reserved.
 +// Use of this source code is governed by a BSD-style license that can be
 +// found in the LICENSE file.
 +
-+package org.chromium.chrome.browser.preferences;
++package org.chromium.chrome.browser.settings;
 +
 +import android.os.Bundle;
 +import android.support.v7.preference.Preference;
 +import android.support.v7.preference.PreferenceFragmentCompat;
++import org.chromium.chrome.browser.settings.ChromeSwitchPreference;
 +
++import org.chromium.chrome.browser.settings.website.WebsitePreferenceBridge;
 +import org.chromium.chrome.browser.ContentSettingsType;
-+import org.chromium.chrome.browser.util.FeatureUtilities;
-+import org.chromium.base.VisibleForTesting;
++import org.chromium.chrome.browser.settings.SettingsUtils;
++import org.chromium.chrome.browser.flags.FeatureUtilities;
++import androidx.annotation.VisibleForTesting;
 +import org.chromium.chrome.R;
 +
 +/**
@@ -310,14 +297,14 @@ new file mode 100644
 +    @Override
 +    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
 +        getActivity().setTitle(R.string.options_adblock_title);
-+        PreferenceUtils.addPreferencesFromResource(this, R.xml.adblock_preferences);
++        SettingsUtils.addPreferencesFromResource(this, R.xml.adblock_preferences);
 +
 +        ChromeSwitchPreference mAdBlockSwitch =
 +                (ChromeSwitchPreference) findPreference(PREF_ADBLOCK_SWITCH);
-+        boolean isAdBlockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
++        boolean isAdBlockEnabled = !WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.ADS);
 +        mAdBlockSwitch.setChecked(isAdBlockEnabled);
 +        mAdBlockSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
-+            PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS, !(boolean) newValue);
++            WebsitePreferenceBridge.setCategoryEnabled(ContentSettingsType.ADS, !(boolean) newValue);
 +            return true;
 +        });
 +
@@ -335,34 +322,10 @@ new file mode 100644
 +        updateCurrentAdBlockUrl();
 +    }
 +}
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -870,6 +870,20 @@ Your Google account may have other forms of browsing history like searches and a
-         Captions
-       </message>
- 
-+      <!-- AdBlock settings -->
-+      <message name="IDS_PREFS_ADBLOCK" desc="Title of the AdBlock Settings screen. [CHAR-LIMIT=32]">
-+        AdBlock settings
-+      </message>
-+      <message name="IDS_OPTIONS_ADBLOCK_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that is used to fetch the ad blocker filters.">
-+        Edit filters URL
-+      </message>
-+      <message name="IDS_OPTIONS_ADBLOCK_EDIT_LABEL" desc="The label for the edit text field that allows the user to change the URL that is used to fetch the ad blocker filters.">
-+        Filters URL
-+      </message>
-+      <message name="IDS_ADBLOCK_HELP" desc="The title of the hyperlink that allows users to visit the web page with instructions for custom ad blocker filters.">
-+        Visit help page
-+      </message>
-+
-       <!-- Site settings -->
-       <message name="IDS_PREFS_SITE_SETTINGS" desc="Title of the Website Settings screen. [CHAR-LIMIT=32]">
-         Site settings
 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
-@@ -9603,6 +9603,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -9734,6 +9734,16 @@ Please help our engineers fix this problem. Tell us what happened right before y
        Never show this again.
      </message>
  
@@ -382,7 +345,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
 diff --git a/chrome/browser/android/feature_utilities.cc b/chrome/browser/android/feature_utilities.cc
 --- a/chrome/browser/android/feature_utilities.cc
 +++ b/chrome/browser/android/feature_utilities.cc
-@@ -50,6 +50,14 @@ std::string GetReachedCodeProfilerTrialGroup() {
+@@ -56,6 +56,14 @@ std::string GetReachedCodeProfilerTrialGroup() {
  } // namespace android
  } // namespace chrome
  
@@ -400,7 +363,7 @@ diff --git a/chrome/browser/android/feature_utilities.cc b/chrome/browser/androi
 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
-@@ -1028,7 +1028,8 @@ BrowserProcessImpl::adblock_updater() {
+@@ -1030,7 +1030,8 @@ BrowserProcessImpl::adblock_updater() {
    adblock_updater_ = std::make_unique<adblock_updater::AdBlockUpdaterService>(
            g_browser_process->system_network_context_manager()->GetSharedURLLoaderFactory(),
            std::move(scheduler),
@@ -413,7 +376,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro
 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
-@@ -405,6 +405,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -409,6 +409,8 @@ SystemNetworkContextManager::SystemNetworkContextManager(
        ssl_config_service_manager_(
            SSLConfigServiceManager::CreateDefaultManager(local_state_)),
        proxy_config_monitor_(local_state_) {
@@ -422,7 +385,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 =
-@@ -508,6 +510,7 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
+@@ -512,6 +514,7 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
  }
  
  void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) {
@@ -430,10 +393,34 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
    // Register the DnsClient and DoH preferences. The feature list has not been
    // initialized yet, so setting the preference defaults here to reflect the
    // corresponding features will only cause the preference defaults to reflect
+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
+@@ -893,6 +893,20 @@ Your Google account may have other forms of browsing history like searches and a
+         Captions
+       </message>
+ 
++      <!-- AdBlock settings -->
++      <message name="IDS_PREFS_ADBLOCK" desc="Title of the AdBlock Settings screen. [CHAR-LIMIT=32]">
++        AdBlock settings
++      </message>
++      <message name="IDS_OPTIONS_ADBLOCK_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that is used to fetch the ad blocker filters.">
++        Edit filters URL
++      </message>
++      <message name="IDS_OPTIONS_ADBLOCK_EDIT_LABEL" desc="The label for the edit text field that allows the user to change the URL that is used to fetch the ad blocker filters.">
++        Filters URL
++      </message>
++      <message name="IDS_ADBLOCK_HELP" desc="The title of the hyperlink that allows users to visit the web page with instructions for custom ad blocker filters.">
++        Visit help page
++      </message>
++
+       <!-- Site settings -->
+       <message name="IDS_PREFS_SITE_SETTINGS" desc="Title of the Website Settings screen. [CHAR-LIMIT=32]">
+         Site settings
 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
-@@ -1925,6 +1925,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
+@@ -1974,6 +1974,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
  // capture devices without prompt.
  const char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls";
  

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

@@ -6,14 +6,14 @@ Subject: Add option to not persist tabs across sessions
  chrome/android/java/res/values/values.xml            |  3 +++
  chrome/android/java/res/xml/privacy_preferences.xml  |  5 +++++
  .../chrome/browser/ChromeTabbedActivity.java         |  4 +++-
- .../preferences/privacy/PrivacyPreferences.java      | 12 ++++++++++++
- .../android/java/strings/android_chrome_strings.grd  |  6 ++++++
+ .../browser/settings/privacy/PrivacyPreferences.java | 12 ++++++++++++
+ .../ui/android/strings/android_chrome_strings.grd    |  6 ++++++
  5 files changed, 29 insertions(+), 1 deletion(-)
 
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
 +++ b/chrome/android/java/res/values/values.xml
-@@ -64,6 +64,9 @@
+@@ -63,6 +63,9 @@
      <!-- TODO(peconn): Add help section. -->
      <!-- <string name="help_context_suggestions">mobile_content_suggestions</string> -->
  
@@ -30,7 +30,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
          android:title="@string/allow_custom_tab_intents_title"
          android:summary="@string/allow_custom_tab_intents_summary"
          android:defaultValue="false" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
++    <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
 +        android:key="close_tabs_on_exit"
 +        android:title="@string/close_tabs_on_exit_title"
 +        android:summary="@string/close_tabs_on_exit_summary"
@@ -41,7 +41,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
-@@ -1174,8 +1174,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
+@@ -1144,8 +1144,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -53,12 +53,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
              if (noRestoreState) {
                  // Clear the state files because they are inconsistent and useless from now on.
                  mTabModelSelectorImpl.clearState();
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
 @@ -4,6 +4,7 @@
  
- package org.chromium.chrome.browser.preferences.privacy;
+ package org.chromium.chrome.browser.settings.privacy;
  
 +import android.content.SharedPreferences;
  import android.os.Bundle;
@@ -81,9 +81,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
      private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
  
 @@ -84,6 +87,10 @@ public class PrivacyPreferences
-         } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
-             PrefServiceBridge.getInstance().setBoolean(
-                     Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
+             sharedPreferencesEditor.apply();
+         } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
+             PrefServiceBridge.getInstance().setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
 +        } else if (PREF_CLOSE_TABS_ON_EXIT.equals(key)) {
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean)newValue);
@@ -91,9 +91,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          }
  
          return true;
-@@ -127,6 +134,11 @@ public class PrivacyPreferences
-             doNotTrackPref.setSummary(
-                     prefServiceBridge.isDoNotTrackEnabled() ? R.string.text_on : R.string.text_off);
+@@ -128,6 +135,11 @@ public class PrivacyPreferences
+                             ? R.string.text_on
+                             : R.string.text_off);
          }
 +
 +        ChromeBaseCheckBoxPreference closeTabsOnExitPref =
@@ -103,10 +103,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
      }
  
      private ManagedPreferenceDelegate createManagedPreferenceDelegate() {
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -3677,6 +3677,12 @@ The site does NOT gain access to the camera. The camera images are only visible
+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
+@@ -3733,6 +3733,12 @@ The site does NOT gain access to the camera. The camera images are only visible
        <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>

+ 15 - 15
build/patches/Add-option-to-use-home-page-as-NTP.patch

@@ -6,9 +6,9 @@ Use about:blank as default homepage
 ---
  .../java/res/xml/homepage_preferences.xml     |  5 ++++
  .../HomepageManager.java                      | 24 +++++++++++++++++--
- .../preferences/HomepagePreferences.java      | 10 ++++++++
+ .../browser/settings/HomepagePreferences.java | 10 ++++++++
  .../browser/tabmodel/TabCreatorManager.java   | 11 +++++++--
- .../java/strings/android_chrome_strings.grd   |  3 +++
+ .../strings/android_chrome_strings.grd        |  3 +++
  chrome/browser/ui/browser_ui_prefs.cc         |  2 ++
  chrome/common/pref_names.cc                   |  4 ++++
  chrome/common/pref_names.h                    |  1 +
@@ -26,7 +26,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro
 +        android:summaryOn="@string/options_ntp_is_homepage_label"
 +        android:summaryOff="@string/options_ntp_is_homepage_label" />
 +
-     <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
+     <org.chromium.chrome.browser.settings.ChromeSwitchPreference
          android:key="homepage_switch"
          android:summaryOn="@string/text_on"
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
@@ -91,10 +91,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomiz
      /**
       * @return User specified homepage custom URI string.
       */
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
-@@ -19,6 +19,7 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/HomepagePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/HomepagePreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/HomepagePreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/HomepagePreferences.java
+@@ -21,6 +21,7 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
      @VisibleForTesting
      public static final String PREF_HOMEPAGE_SWITCH = "homepage_switch";
      private static final String PREF_HOMEPAGE_EDIT = "homepage_edit";
@@ -102,9 +102,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Hom
  
      private HomepageManager mHomepageManager;
      private Preference mHomepageEdit;
-@@ -39,6 +40,15 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
-             return true;
-         });
+@@ -46,6 +47,15 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
+             });
+         }
  
 +        ChromeSwitchPreference mNTPIsHomepageSwitch =
 +                (ChromeSwitchPreference) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
@@ -150,10 +150,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCre
              } finally {
                  TraceEvent.end("TabCreator.launchNTP");
              }
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -668,6 +668,9 @@ CHAR-LIMIT guidelines:
+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
+@@ -698,6 +698,9 @@ CHAR-LIMIT guidelines:
        <message name="IDS_NOTIFICATIONS_CONTENT_SUGGESTIONS_SUMMARY_DISABLED" desc="Summary for the disabled preference to turn on/off content suggestions notifications when search and site suggestions are disabled.">
          Search and site suggestions disabled
        </message>
@@ -192,7 +192,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
 --- a/chrome/common/pref_names.h
 +++ b/chrome/common/pref_names.h
-@@ -322,6 +322,7 @@ extern const char kSettingsShowOSBanner[];
+@@ -323,6 +323,7 @@ extern const char kSettingsShowOSBanner[];
  extern const char kDeviceLoginScreenWebUsbAllowDevicesForUrls[];
  #endif  // defined(OS_CHROMEOS)
  extern const char kShowHomeButton[];

+ 107 - 103
build/patches/Add-site-settings-option-for-session-only-cookies.patch

@@ -3,13 +3,13 @@ Date: Tue, 28 Aug 2018 23:27:23 +0200
 Subject: Add site settings option for session-only cookies
 
 ---
- chrome/android/java/res/values/values.xml     |  3 +++
- .../java/res/xml/website_preferences.xml      |  7 ++++++
- .../preferences/PrefServiceBridge.java        | 10 ++++++++
- .../website/SingleCategoryPreferences.java    | 21 +++++++++++++++-
- .../java/strings/android_chrome_strings.grd   |  6 +++++
- .../preferences/pref_service_bridge.cc        | 25 +++++++++++++++++++
- 6 files changed, 71 insertions(+), 1 deletion(-)
+ chrome/android/java/res/values/values.xml     |  3 ++
+ .../java/res/xml/website_preferences.xml      |  7 +++++
+ .../website/SingleCategoryPreferences.java    | 21 ++++++++++++-
+ .../preferences/pref_service_bridge.cc        | 31 +++++++++++++++++++
+ .../preferences/PrefServiceBridge.java        | 10 ++++++
+ .../strings/android_chrome_strings.grd        |  6 ++++
+ 6 files changed, 77 insertions(+), 1 deletion(-)
 
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
@@ -27,100 +27,66 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res
 diff --git a/chrome/android/java/res/xml/website_preferences.xml b/chrome/android/java/res/xml/website_preferences.xml
 --- a/chrome/android/java/res/xml/website_preferences.xml
 +++ b/chrome/android/java/res/xml/website_preferences.xml
-@@ -26,6 +26,13 @@
-         android:summary="@string/block_third_party_cookies_summary"
-         android:defaultValue="true"
+@@ -32,6 +32,13 @@
+         android:title="@string/website_settings_category_notifications_quiet"
+         android:defaultValue="false"
          android:persistent="false" />
 +    <!-- A toggle for cookies to be saved only until session exit, only shown for the Cookies category. -->
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
++    <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
 +        android:key="cookies_session_only"
 +        android:title="@string/allow_cookies_session_only_title"
 +        android:summary="@string/allow_cookies_session_only_summary"
 +        android:defaultValue="true"
 +        android:persistent="false" />
      <!-- A toggle for enabling vibration in notifications. -->
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+     <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
          android:key="notifications_vibrate"
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
-@@ -265,6 +265,10 @@ public class PrefServiceBridge {
-         return PrefServiceBridgeJni.get().getBlockThirdPartyCookiesEnabled(PrefServiceBridge.this);
-     }
- 
-+    public boolean isCookiesSessionOnlyEnabled() {
-+        return PrefServiceBridgeJni.get().getCookiesSessionOnlyEnabled(PrefServiceBridge.this);
-+    }
-+
-     /**
-      * @return Whether third-party cookie blocking is configured by policy
-      */
-@@ -668,6 +672,10 @@ public class PrefServiceBridge {
-                 PrefServiceBridge.this, enabled);
-     }
- 
-+    public void setCookiesSessionOnlyEnabled(boolean enabled) {
-+        PrefServiceBridgeJni.get().setCookiesSessionOnlyEnabled(PrefServiceBridge.this, enabled);
-+    }
-+
-     public void setDoNotTrackEnabled(boolean enabled) {
-         PrefServiceBridgeJni.get().setDoNotTrackEnabled(PrefServiceBridge.this, enabled);
-     }
-@@ -1138,6 +1146,8 @@ public class PrefServiceBridge {
- 
-     @NativeMethods
-     public interface Natives {
-+        boolean getCookiesSessionOnlyEnabled(PrefServiceBridge caller);
-+        void setCookiesSessionOnlyEnabled(PrefServiceBridge caller, boolean enabled);
-         boolean isContentSettingEnabled(PrefServiceBridge caller, int contentSettingType);
-         boolean isContentSettingManaged(PrefServiceBridge caller, int contentSettingType);
-         void setContentSettingEnabled(
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
-@@ -127,6 +127,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleCategoryPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleCategoryPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleCategoryPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleCategoryPreferences.java
+@@ -130,6 +130,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
  
      // Keys for category-specific preferences (toggle, link, button etc.), dynamically shown.
      public static final String THIRD_PARTY_COOKIES_TOGGLE_KEY = "third_party_cookies";
 +    public static final String COOKIES_SESSION_ONLY_TOGGLE_KEY = "cookies_session_only";
      public static final String NOTIFICATIONS_VIBRATE_TOGGLE_KEY = "notifications_vibrate";
+     public static final String NOTIFICATIONS_QUIET_UI_TOGGLE_KEY = "notifications_quiet_ui";
      public static final String EXPLAIN_PROTECTED_MEDIA_KEY = "protected_content_learn_more";
-     private static final String ADD_EXCEPTION_KEY = "add_exception";
-@@ -477,6 +478,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+@@ -479,6 +480,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
  
                  if (type == SiteSettingsCategory.Type.COOKIES) {
                      updateThirdPartyCookiesCheckBox();
 +                    updateCookiesSessionOnlyCheckBox();
                  } else if (type == SiteSettingsCategory.Type.NOTIFICATIONS) {
-                     updateNotificationsVibrateCheckBox();
+                     updateNotificationsSecondaryControls();
                  }
-@@ -516,6 +518,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+@@ -517,6 +519,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              int setting = (int) newValue;
-             prefServiceBridge.setContentSetting(mCategory.getContentSettingsType(), setting);
+             WebsitePreferenceBridge.setContentSetting(mCategory.getContentSettingsType(), setting);
              getInfoForOrigins();
 +        } else if (COOKIES_SESSION_ONLY_TOGGLE_KEY.equals(preference.getKey())) {
-+            prefServiceBridge.setCookiesSessionOnlyEnabled((boolean) newValue);
++            PrefServiceBridge.getInstance().setCookiesSessionOnlyEnabled((boolean) newValue);
          } else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) {
-             prefServiceBridge.setBlockThirdPartyCookiesEnabled(((boolean) newValue));
-         } else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) {
-@@ -833,6 +837,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+             PrefServiceBridge.getInstance().setBoolean(
+                     Pref.BLOCK_THIRD_PARTY_COOKIES, ((boolean) newValue));
+@@ -828,6 +832,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
          TriStateSiteSettingsPreference triStateToggle =
                  (TriStateSiteSettingsPreference) screen.findPreference(TRI_STATE_TOGGLE_KEY);
          Preference thirdPartyCookies = screen.findPreference(THIRD_PARTY_COOKIES_TOGGLE_KEY);
 +        Preference cookiesSessionOnly = getPreferenceScreen().findPreference(
 +                COOKIES_SESSION_ONLY_TOGGLE_KEY);
          Preference notificationsVibrate = screen.findPreference(NOTIFICATIONS_VIBRATE_TOGGLE_KEY);
+         Preference notificationsQuietUi = screen.findPreference(NOTIFICATIONS_QUIET_UI_TOGGLE_KEY);
          Preference explainProtectedMediaKey = screen.findPreference(EXPLAIN_PROTECTED_MEDIA_KEY);
-         PreferenceGroup allowedGroup = (PreferenceGroup) screen.findPreference(ALLOWED_GROUP);
-@@ -864,6 +870,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+@@ -860,6 +866,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
  
          if (hideSecondaryToggles) {
              screen.removePreference(thirdPartyCookies);
 +            screen.removePreference(cookiesSessionOnly);
              screen.removePreference(notificationsVibrate);
+             screen.removePreference(notificationsQuietUi);
              screen.removePreference(explainProtectedMediaKey);
-             screen.removePreference(allowedGroup);
-@@ -874,12 +881,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+@@ -871,12 +878,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              return;
          }
  
@@ -136,9 +102,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +            screen.removePreference(cookiesSessionOnly);
          }
  
-         // Configure/hide the notifications vibrate toggle, as needed.
-@@ -994,6 +1004,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
-                 preference -> PrefServiceBridge.getInstance().isBlockThirdPartyCookiesManaged());
+         // Configure/hide the notifications secondary controls, as needed.
+@@ -990,6 +1000,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+         }
      }
  
 +    private void updateCookiesSessionOnlyCheckBox() {
@@ -146,57 +112,52 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +                getPreferenceScreen().findPreference(COOKIES_SESSION_ONLY_TOGGLE_KEY);
 +        cookiesSessionOnlyPref.setChecked(
 +                PrefServiceBridge.getInstance().isCookiesSessionOnlyEnabled());
-+        cookiesSessionOnlyPref.setEnabled(PrefServiceBridge.getInstance().isCategoryEnabled(
-+                ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES));
++        cookiesSessionOnlyPref.setEnabled(WebsitePreferenceBridge.isCategoryEnabled(
++                ContentSettingsType.COOKIES));
 +    }
 +
-     private void updateNotificationsVibrateCheckBox() {
-         ChromeBaseCheckBoxPreference preference =
+     private void updateThirdPartyCookiesCheckBox() {
+         ChromeBaseCheckBoxPreference thirdPartyCookiesPref =
                  (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -878,6 +878,12 @@ Your Google account may have other forms of browsing history like searches and a
-       <message name="IDS_BLOCK_THIRD_PARTY_COOKIES_SUMMARY" desc="Summary text for Block Third Party Cookies preference">
-         Prevent third-party websites from saving and reading cookie data
-       </message>
-+      <message name="IDS_ALLOW_COOKIES_SESSION_ONLY_TITLE" desc="Title for Allow Cookies Session Only preference">
-+        Keep cookies only until you quit your browser
-+      </message>
-+      <message name="IDS_ALLOW_COOKIES_SESSION_ONLY_SUMMARY" desc="Summary text for Allow Session Only Cookies preference">
-+        When enabled, all cookies will be erased when the browsing session is over
-+      </message>
-       <message name="IDS_JAVASCRIPT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR-LIMIT=32]">
-         JavaScript
-       </message>
 diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
 --- a/chrome/browser/android/preferences/pref_service_bridge.cc
 +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
-@@ -330,6 +330,17 @@ static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesEnabled(
-   return GetPrefService()->GetBoolean(prefs::kBlockThirdPartyCookies);
- }
+@@ -13,10 +13,17 @@
+ #include "chrome/browser/android/preferences/prefs.h"
+ #include "chrome/browser/preferences/jni_headers/PrefServiceBridge_jni.h"
+ #include "chrome/browser/profiles/profile_manager.h"
++#include "components/content_settings/core/browser/host_content_settings_map.h"
++#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
++//#include "components/content_settings/core/common/content_settings_types.h"
+ #include "components/prefs/pref_service.h"
+ 
+ namespace {
  
++Profile* GetOriginalProfile() {
++  return ProfileManager::GetActiveUserProfile()->GetOriginalProfile();
++}
++
+ PrefService* GetPrefService() {
+   return ProfileManager::GetActiveUserProfile()
+       ->GetOriginalProfile()
+@@ -84,3 +91,27 @@ static jboolean JNI_PrefServiceBridge_IsManagedPreference(
+   return GetPrefService()->IsManagedPreference(
+       PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+ }
 +static jboolean JNI_PrefServiceBridge_GetCookiesSessionOnlyEnabled(
 +    JNIEnv* env,
-+    const JavaParamRef<jobject>& obj) {
++    const base::android::JavaParamRef<jobject>& obj) {
 +  HostContentSettingsMap* host_content_settings_map =
 +      HostContentSettingsMapFactory::GetForProfile(GetOriginalProfile());
-+  auto value = host_content_settings_map->GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_COOKIES, nullptr);
++  auto value = host_content_settings_map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr);
 +  auto enabled = CONTENT_SETTING_SESSION_ONLY == value;
 +  LOG(INFO) << "GetCookiesSessionOnly := " << enabled << " (raw_value = " << value << ")";
 +  return enabled;
 +}
 +
- static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesManaged(
-     JNIEnv* env,
-     const JavaParamRef<jobject>& obj) {
-@@ -801,6 +812,20 @@ static void JNI_PrefServiceBridge_SetBlockThirdPartyCookiesEnabled(
-   GetPrefService()->SetBoolean(prefs::kBlockThirdPartyCookies, enabled);
- }
- 
 +static void JNI_PrefServiceBridge_SetCookiesSessionOnlyEnabled(
 +    JNIEnv* env,
-+    const JavaParamRef<jobject>& obj,
++    const base::android::JavaParamRef<jobject>& obj,
 +    jboolean enabled) {
 +  HostContentSettingsMap* host_content_settings_map =
 +      HostContentSettingsMapFactory::GetForProfile(GetOriginalProfile());
@@ -204,13 +165,56 @@ diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/
 +           "; false -> setting_allow: " << CONTENT_SETTING_ALLOW <<
 +           "; true -> session_only: "   << CONTENT_SETTING_SESSION_ONLY;
 +  host_content_settings_map->SetDefaultContentSetting(
-+      CONTENT_SETTINGS_TYPE_COOKIES,
++      ContentSettingsType::COOKIES,
 +      enabled ? CONTENT_SETTING_SESSION_ONLY : CONTENT_SETTING_ALLOW);
 +}
+diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
+--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
+@@ -82,6 +82,13 @@ public class PrefServiceBridge {
+         PrefServiceBridgeJni.get().setString(preference, value);
+     }
+ 
++    public boolean isCookiesSessionOnlyEnabled() {
++        return PrefServiceBridgeJni.get().getCookiesSessionOnlyEnabled(PrefServiceBridge.this);
++    }
++    public void setCookiesSessionOnlyEnabled(boolean enabled) {
++        PrefServiceBridgeJni.get().setCookiesSessionOnlyEnabled(PrefServiceBridge.this, enabled);
++    }
 +
- static void JNI_PrefServiceBridge_SetRememberPasswordsEnabled(
-     JNIEnv* env,
-     const JavaParamRef<jobject>& obj,
+     /**
+      * @param preference The name of the preference.
+      * @return Whether the specified preference is managed.
+@@ -97,6 +104,8 @@ public class PrefServiceBridge {
+ 
+     @NativeMethods
+     interface Natives {
++        boolean getCookiesSessionOnlyEnabled(PrefServiceBridge caller);
++        void setCookiesSessionOnlyEnabled(PrefServiceBridge caller, boolean enabled);
+         boolean getBoolean(int preference);
+         void setBoolean(int preference, boolean value);
+         int getInteger(int preference);
+@@ -106,3 +115,4 @@ public class PrefServiceBridge {
+         boolean isManagedPreference(int preference);
+     }
+ }
++
+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
+@@ -898,6 +898,12 @@ Your Google account may have other forms of browsing history like searches and a
+       <message name="IDS_BLOCK_THIRD_PARTY_COOKIES_SUMMARY" desc="Summary text for Block Third Party Cookies preference">
+         Prevent third-party websites from saving and reading cookie data
+       </message>
++      <message name="IDS_ALLOW_COOKIES_SESSION_ONLY_TITLE" desc="Title for Allow Cookies Session Only preference">
++        Keep cookies only until you quit your browser
++      </message>
++      <message name="IDS_ALLOW_COOKIES_SESSION_ONLY_SUMMARY" desc="Summary text for Allow Session Only Cookies preference">
++        When enabled, all cookies will be erased when the browsing session is over
++      </message>
+       <message name="IDS_JAVASCRIPT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR-LIMIT=32]">
+         JavaScript
+       </message>
 -- 
 2.17.1
 

+ 105 - 103
build/patches/Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch

@@ -8,33 +8,32 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL
  chrome/android/java/res/values/values.xml     |  2 +
  .../android/java/res/xml/doh_preferences.xml  | 25 +++++
  .../java/res/xml/privacy_preferences.xml      |  5 +
- .../chrome/browser/preferences/DoHEditor.java | 91 +++++++++++++++++++
- .../browser/preferences/DoHPreferences.java   | 52 +++++++++++
- .../chrome/browser/util/FeatureUtilities.java | 24 +++++
- .../java/strings/android_chrome_strings.grd   | 11 +++
+ .../browser/flags/FeatureUtilities.java       | 24 +++++
+ .../chrome/browser/settings/DoHEditor.java    | 92 +++++++++++++++++++
+ .../browser/settings/DoHPreferences.java      | 54 +++++++++++
  chrome/app/generated_resources.grd            |  6 ++
  chrome/browser/android/feature_utilities.cc   | 23 +++++
  .../net/system_network_context_manager.cc     | 46 +++-------
+ .../strings/android_chrome_strings.grd        | 11 +++
  chrome/common/chrome_features.cc              |  4 +-
- 13 files changed, 319 insertions(+), 37 deletions(-)
+ 13 files changed, 322 insertions(+), 37 deletions(-)
  create mode 100644 chrome/android/java/res/layout/doh_editor.xml
  create mode 100644 chrome/android/java/res/xml/doh_preferences.xml
- create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHEditor.java
- create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHPreferences.java
+ create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java
+ create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java
 
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/chrome/android/chrome_java_sources.gni
-@@ -1263,7 +1263,9 @@ chrome_java_sources = [
-   "java/src/org/chromium/chrome/browser/preferences/ClearBrowsingDataCheckBoxPreference.java",
-   "java/src/org/chromium/chrome/browser/preferences/ExpandablePreferenceGroup.java",
-   "java/src/org/chromium/chrome/browser/preferences/HomepageEditor.java",
-+  "java/src/org/chromium/chrome/browser/preferences/DoHEditor.java",
-   "java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java",
-+  "java/src/org/chromium/chrome/browser/preferences/DoHPreferences.java",
-   "java/src/org/chromium/chrome/browser/preferences/HyperlinkPreference.java",
-   "java/src/org/chromium/chrome/browser/preferences/LearnMorePreference.java",
-   "java/src/org/chromium/chrome/browser/preferences/LegalInformationPreferences.java",
+@@ -1335,6 +1335,8 @@ chrome_java_sources = [
+   "java/src/org/chromium/chrome/browser/settings/ChromeSwitchPreference.java",
+   "java/src/org/chromium/chrome/browser/settings/ClearBrowsingDataCheckBoxPreference.java",
+   "java/src/org/chromium/chrome/browser/settings/ExpandablePreferenceGroup.java",
++  "java/src/org/chromium/chrome/browser/settings/DoHEditor.java",
++  "java/src/org/chromium/chrome/browser/settings/DoHPreferences.java",
+   "java/src/org/chromium/chrome/browser/settings/HomepageEditor.java",
+   "java/src/org/chromium/chrome/browser/settings/HomepagePreferences.java",
+   "java/src/org/chromium/chrome/browser/settings/HyperlinkPreference.java",
 diff --git a/chrome/android/java/res/layout/doh_editor.xml b/chrome/android/java/res/layout/doh_editor.xml
 new file mode 100644
 --- /dev/null
@@ -108,7 +107,7 @@ new file mode 100644
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
 +++ b/chrome/android/java/res/values/values.xml
-@@ -92,6 +92,8 @@
+@@ -91,6 +91,8 @@
      <integer name="download_infobar_bar_fill_in_delay">400</integer>
      <integer name="download_infobar_bar_fill_out_delay">200</integer>
  
@@ -131,12 +130,12 @@ new file mode 100644
 +    xmlns:android="http://schemas.android.com/apk/res/android"
 +    xmlns:app="http://schemas.android.com/apk/res-auto">
 +
-+    <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
++    <org.chromium.chrome.browser.settings.ChromeSwitchPreference
 +        android:key="doh_switch"
 +        android:summaryOn="@string/text_on"
 +        android:summaryOff="@string/text_off" />
 +
-+    <org.chromium.chrome.browser.preferences.HyperlinkPreference
++    <org.chromium.chrome.browser.settings.HyperlinkPreference
 +        android:key="doh_help"
 +        android:title="@string/doh_help"
 +        app:url="@string/doh_help_url" />
@@ -144,7 +143,7 @@ new file mode 100644
 +    <Preference
 +        android:key="doh_edit"
 +        android:title="@string/options_doh_edit_label"
-+        android:fragment="org.chromium.chrome.browser.preferences.DoHEditor" />
++        android:fragment="org.chromium.chrome.browser.settings.DoHEditor" />
 +
 +</PreferenceScreen>
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -155,23 +154,64 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
          android:title="@string/can_make_payment_title"
          android:summary="@string/settings_can_make_payment_toggle_label" />
 +    <Preference
-+        android:fragment="org.chromium.chrome.browser.preferences.DoHPreferences"
++        android:fragment="org.chromium.chrome.browser.settings.DoHPreferences"
 +        android:key="doh"
 +        android:title="@string/options_doh_title"
 +        android:summary="@string/options_doh_summary" />
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+     <org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference
          android:key="preload_pages"
          android:title="@string/preload_pages_title"
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHEditor.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
+@@ -95,6 +95,26 @@ public class FeatureUtilities {
+         FeatureUtilitiesJni.get().setCustomTabVisible(visible);
+     }
+ 
++     /**
++     * Records whether custom URL for DoH is enabled with native-side feature utilities.
++     * @param url Whether custom URL is enabled or not.
++     */
++     public static void setDoHEnabled(boolean enabled) {
++         FeatureUtilitiesJni.get().setDoHEnabled(enabled);
++     }
++
++     public static boolean getDoHEnabled() {
++         return FeatureUtilitiesJni.get().getDoHEnabled();
++     }
++
++     public static void setDoHTemplates(String t) {
++         FeatureUtilitiesJni.get().setDoHTemplates(t);
++     }
++
++     public static String getDoHTemplates() {
++         return FeatureUtilitiesJni.get().getDoHTemplates();
++     }
++
+     /**
+      * Records whether the activity is in multi-window mode with native-side feature utilities.
+      * @param isInMultiWindowMode Whether the activity is in Android N multi-window mode.
+@@ -736,6 +756,10 @@ public class FeatureUtilities {
+         void setCustomTabVisible(boolean visible);
+         void setActivityType(@ActivityType int type);
+         void setIsInMultiWindowMode(boolean isInMultiWindowMode);
++        void setDoHEnabled(boolean enabled);
++        boolean getDoHEnabled();
++        void setDoHTemplates(String templates);
++        String getDoHTemplates();
+         boolean isNetworkServiceWarmUpEnabled();
+         void setAdBlockFiltersURL(String url);
+         String getAdBlockFiltersURL();
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java
 new file mode 100644
 --- /dev/null
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHEditor.java
-@@ -0,0 +1,91 @@
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java
+@@ -0,0 +1,92 @@
 +// Copyright 2015 The Chromium Authors. All rights reserved.
 +// Use of this source code is governed by a BSD-style license that can be
 +// found in the LICENSE file.
 +
-+package org.chromium.chrome.browser.preferences;
++package org.chromium.chrome.browser.settings;
 +
 +import android.os.Bundle;
 +import android.support.v4.app.Fragment;
@@ -183,7 +223,8 @@ new file mode 100644
 +import android.widget.Button;
 +import android.widget.EditText;
 +
-+import org.chromium.chrome.browser.util.FeatureUtilities;
++import org.chromium.chrome.browser.settings.SettingsUtils;
++import org.chromium.chrome.browser.flags.FeatureUtilities;
 +import org.chromium.chrome.R;
 +import org.chromium.components.url_formatter.UrlFormatter;
 +
@@ -204,7 +245,7 @@ new file mode 100644
 +        View v = inflater.inflate(R.layout.doh_editor, container, false);
 +        View scrollView = v.findViewById(R.id.scroll_view);
 +        scrollView.getViewTreeObserver().addOnScrollChangedListener(
-+                PreferenceUtils.getShowShadowOnScrollListener(v, v.findViewById(R.id.shadow)));
++                SettingsUtils.getShowShadowOnScrollListener(v, v.findViewById(R.id.shadow)));
 +        mDoHUrlEdit = (EditText) v.findViewById(R.id.doh_url_edit);
 +        mDoHUrlEdit.setText(FeatureUtilities.getDoHTemplates());
 +        mDoHUrlEdit.addTextChangedListener(this);
@@ -258,23 +299,25 @@ new file mode 100644
 +        });
 +    }
 +}
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHPreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java
 new file mode 100644
 --- /dev/null
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DoHPreferences.java
-@@ -0,0 +1,52 @@
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java
+@@ -0,0 +1,54 @@
 +// Copyright 2015 The Chromium Authors. All rights reserved.
 +// Use of this source code is governed by a BSD-style license that can be
 +// found in the LICENSE file.
 +
-+package org.chromium.chrome.browser.preferences;
++package org.chromium.chrome.browser.settings;
 +
 +import android.os.Bundle;
 +import android.support.v7.preference.Preference;
 +import android.support.v7.preference.PreferenceFragmentCompat;
++import org.chromium.chrome.browser.settings.ChromeSwitchPreference;
 +
-+import org.chromium.chrome.browser.util.FeatureUtilities;
-+import org.chromium.base.VisibleForTesting;
++import org.chromium.chrome.browser.settings.SettingsUtils;
++import org.chromium.chrome.browser.flags.FeatureUtilities;
++import androidx.annotation.VisibleForTesting;
 +import org.chromium.chrome.R;
 +
 +/**
@@ -290,7 +333,7 @@ new file mode 100644
 +    @Override
 +    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
 +        getActivity().setTitle(R.string.options_doh_title);
-+        PreferenceUtils.addPreferencesFromResource(this, R.xml.doh_preferences);
++        SettingsUtils.addPreferencesFromResource(this, R.xml.doh_preferences);
 +
 +        ChromeSwitchPreference mDoHSwitch =
 +                (ChromeSwitchPreference) findPreference(PREF_DOH_SWITCH);
@@ -315,72 +358,10 @@ new file mode 100644
 +        updateCurrentDoHUrl();
 +    }
 +}
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
-@@ -224,6 +224,26 @@ public class FeatureUtilities {
-         FeatureUtilitiesJni.get().setCustomTabVisible(visible);
-     }
- 
-+     /**
-+     * Records whether custom URL for DoH is enabled with native-side feature utilities.
-+     * @param url Whether custom URL is enabled or not.
-+     */
-+     public static void setDoHEnabled(boolean enabled) {
-+         FeatureUtilitiesJni.get().setDoHEnabled(enabled);
-+     }
-+
-+     public static boolean getDoHEnabled() {
-+         return FeatureUtilitiesJni.get().getDoHEnabled();
-+     }
-+
-+     public static void setDoHTemplates(String t) {
-+         FeatureUtilitiesJni.get().setDoHTemplates(t);
-+     }
-+
-+     public static String getDoHTemplates() {
-+         return FeatureUtilitiesJni.get().getDoHTemplates();
-+     }
-+
-     /**
-      * Records whether the activity is in multi-window mode with native-side feature utilities.
-      * @param isInMultiWindowMode Whether the activity is in Android N multi-window mode.
-@@ -878,6 +898,10 @@ public class FeatureUtilities {
-     interface Natives {
-         void setCustomTabVisible(boolean visible);
-         void setIsInMultiWindowMode(boolean isInMultiWindowMode);
-+        void setDoHEnabled(boolean enabled);
-+        boolean getDoHEnabled();
-+        void setDoHTemplates(String templates);
-+        String getDoHTemplates();
-         boolean isNetworkServiceWarmUpEnabled();
-         void setAdBlockFiltersURL(String url);
-         String getAdBlockFiltersURL();
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -644,6 +644,17 @@ CHAR-LIMIT guidelines:
-         Chrome Passwords
-       </message>
- 
-+      <!-- DoH preferences -->
-+      <message name="IDS_OPTIONS_DOH_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that is used for DNS-over-HTTPS queries.">
-+        Edit DoH template URLs
-+      </message>
-+      <message name="IDS_OPTIONS_DOH_EDIT_LABEL" desc="The label for the edit text field that allows the user to change the URL that is used for DNS-over-HTTPS queries.">
-+        DoH template URLs
-+      </message>
-+      <message name="IDS_DOH_HELP" desc="The title of the hyperlink that allows users to visit the wiki page with instructions for DNS-over-HTTPS configuration.">
-+        Visit help page
-+      </message>
-+
-       <!-- Homepage preferences -->
-       <message name="IDS_OPTIONS_HOMEPAGE_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that opens when they tap on the home page button in the omnibox.">
-         Edit home page
 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
-@@ -6558,6 +6558,12 @@ the Bookmarks menu.">
+@@ -6699,6 +6699,12 @@ the Bookmarks menu.">
          <message name="IDS_OPTIONS_HOMEPAGE_TITLE" desc="The title of the home page overlay on Android" formatter_data="android_java">
            Home page
          </message>
@@ -406,7 +387,7 @@ diff --git a/chrome/browser/android/feature_utilities.cc b/chrome/browser/androi
  #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h"
  #include "chrome/browser/profiles/profile_manager.h"
  #include "components/ntp_snippets/content_suggestions_service.h"
-@@ -76,3 +79,23 @@ static jboolean JNI_FeatureUtilities_IsNetworkServiceWarmUpEnabled(
+@@ -87,3 +90,23 @@ static jboolean JNI_FeatureUtilities_IsNetworkServiceWarmUpEnabled(
    return content::IsOutOfProcessNetworkService() &&
           base::FeatureList::IsEnabled(features::kWarmUpNetworkProcess);
  }
@@ -433,7 +414,7 @@ diff --git a/chrome/browser/android/feature_utilities.cc b/chrome/browser/androi
 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
-@@ -137,9 +137,14 @@ void GetStubResolverConfig(
+@@ -139,9 +139,14 @@ void GetStubResolverConfig(
  
    std::string doh_templates =
        local_state->GetString(prefs::kDnsOverHttpsTemplates);
@@ -451,7 +432,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
      for (const std::string& server_template :
           SplitString(doh_templates, " ", base::TRIM_WHITESPACE,
                       base::SPLIT_WANT_NONEMPTY)) {
-@@ -425,40 +430,11 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -429,40 +434,11 @@ SystemNetworkContextManager::SystemNetworkContextManager(
    // features before registering change callbacks for these preferences.
    local_state_->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled,
                                      base::Value(ShouldEnableAsyncDns()));
@@ -495,10 +476,31 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
  
    PrefChangeRegistrar::NamedChangeCallback dns_pref_callback =
        base::BindRepeating(&OnStubResolverConfigChanged,
+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
+@@ -674,6 +674,17 @@ CHAR-LIMIT guidelines:
+         Chrome Passwords
+       </message>
+ 
++      <!-- DoH preferences -->
++      <message name="IDS_OPTIONS_DOH_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that is used for DNS-over-HTTPS queries.">
++        Edit DoH template URLs
++      </message>
++      <message name="IDS_OPTIONS_DOH_EDIT_LABEL" desc="The label for the edit text field that allows the user to change the URL that is used for DNS-over-HTTPS queries.">
++        DoH template URLs
++      </message>
++      <message name="IDS_DOH_HELP" desc="The title of the hyperlink that allows users to visit the wiki page with instructions for DNS-over-HTTPS configuration.">
++        Visit help page
++      </message>
++
+       <!-- Homepage preferences -->
+       <message name="IDS_OPTIONS_HOMEPAGE_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that opens when they tap on the home page button in the omnibox.">
+         Edit home page
 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
-@@ -294,12 +294,12 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
+@@ -303,12 +303,12 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
  
  // Enable DNS over HTTPS (DoH).
  const base::Feature kDnsOverHttps{"DnsOverHttps",

+ 12 - 36
build/patches/Allow-building-without-feed-support.patch

@@ -3,15 +3,14 @@ Date: Thu, 19 Dec 2019 22:52:53 +0100
 Subject: Allow building without feed support
 
 ---
- .../start_surface/StartSurfaceCoordinator.java   |  5 -----
- .../start_surface/StartSurfaceMediator.java      | 16 ----------------
- .../browser/ntp/cards/ExploreOfflineCard.java    |  5 +----
- 3 files changed, 1 insertion(+), 25 deletions(-)
+ .../start_surface/StartSurfaceCoordinator.java    |  5 -----
+ .../start_surface/StartSurfaceMediator.java       | 15 ---------------
+ 2 files changed, 20 deletions(-)
 
 diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java
 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java
 +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java
-@@ -198,11 +198,6 @@ public class StartSurfaceCoordinator implements StartSurface {
+@@ -211,11 +211,6 @@ public class StartSurfaceCoordinator implements StartSurface {
              mBottomBarCoordinator = new BottomBarCoordinator(
                      mActivity, mActivity.getCompositorViewHolder(), mPropertyModel);
          }
@@ -26,9 +25,9 @@ diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromiu
 diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
 +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
-@@ -253,15 +253,6 @@ class StartSurfaceMediator
-                 RecordUserAction.record("StartSurface.TasksOnly");
-             }
+@@ -403,14 +403,6 @@ class StartSurfaceMediator
+             assert (isShownState(shownState));
+             setOverviewState(shownState);
  
 -            // Make sure FeedSurfaceCoordinator is built before the explore surface is showing by
 -            // default.
@@ -38,11 +37,10 @@ diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromiu
 -                        mFeedSurfaceCreator.createFeedSurfaceCoordinator(
 -                                mNightModeStateProvider.isInNightMode()));
 -            }
--
-             mPropertyModel.set(IS_SHOWING_OVERVIEW, true);
-             mFakeboxDelegate.addUrlFocusChangeListener(mUrlFocusChangeListener);
-         }
-@@ -361,13 +352,6 @@ class StartSurfaceMediator
+             mTabModelSelector.addObserver(mTabModelSelectorObserver);
+ 
+             if (mFullScreenListener != null) {
+@@ -523,13 +515,6 @@ class StartSurfaceMediator
      private void setExploreSurfaceVisibility(boolean isVisible) {
          if (isVisible == mPropertyModel.get(IS_EXPLORE_SURFACE_VISIBLE)) return;
  
@@ -55,29 +53,7 @@ diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromiu
 -
          mPropertyModel.set(IS_EXPLORE_SURFACE_VISIBLE, isVisible);
  
-         if (mSurfaceMode == SurfaceMode.TWO_PANES) {
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/ExploreOfflineCard.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/ExploreOfflineCard.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/ExploreOfflineCard.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/ExploreOfflineCard.java
-@@ -13,7 +13,6 @@ import org.chromium.base.ApiCompatibilityUtils;
- import org.chromium.chrome.R;
- import org.chromium.chrome.browser.ChromeFeatureList;
- import org.chromium.chrome.browser.download.DownloadUtils;
--import org.chromium.chrome.browser.feed.FeedConfiguration;
- import org.chromium.net.NetworkChangeNotifier;
- import org.chromium.ui.text.SpanApplier;
- 
-@@ -73,9 +72,7 @@ public class ExploreOfflineCard {
- 
-         View imageView = cardView.findViewById(R.id.explore_offline_image);
-         imageView.setBackground(imageView.getContext().getResources().getDrawable(
--                FeedConfiguration.getFeedUiEnabled()
--                        ? R.drawable.card_background_rounded_right_half_with_border
--                        : R.drawable.card_background_rounded_right_half_no_border));
-+                        R.drawable.card_background_rounded_right_half_no_border));
- 
-         cardView.setOnClickListener(v -> mOpenDownloadHomeCallback.run());
-         return cardView;
+         if (mOverviewModeState == OverviewModeState.SHOWN_TABSWITCHER_TWO_PANES) {
 -- 
 2.17.1
 

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

@@ -10,7 +10,7 @@ Subject: Allow playing audio in background
 diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
 --- a/media/blink/webmediaplayer_impl.cc
 +++ b/media/blink/webmediaplayer_impl.cc
-@@ -989,6 +989,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
+@@ -962,6 +962,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
    return pipeline_metadata_.has_audio;
  }
  
@@ -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());
-@@ -3298,7 +3304,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
+@@ -3283,7 +3289,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
-@@ -143,6 +143,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
+@@ -145,6 +145,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
-@@ -152,7 +152,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
+@@ -120,7 +120,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
    registry->RegisterBooleanPref(prefs::kAccountConsistencyMirrorRequired,
                                  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
-@@ -245,7 +245,7 @@ void OnAuthPrefsChanged(PrefService* local_state,
+@@ -247,7 +247,7 @@ void OnAuthPrefsChanged(PrefService* local_state,
  // Android this includes checking the Android version in the field trial.
  bool ShouldEnableAsyncDns() {
    bool feature_can_be_enabled = true;
@@ -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
-@@ -573,7 +573,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
+@@ -564,7 +564,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
          effective_experimental_options->Remove(it.key(), nullptr);
          continue;
        }

+ 17 - 17
build/patches/Always-show-site-settings-for-cookies-javascript-and-ads.patch

@@ -5,12 +5,12 @@ Subject: Always show site settings for cookies, javascript and ads
 Avoid displaying info about intrusive ads
 ---
  .../website/SingleWebsitePreferences.java     | 46 +++++++++----------
- .../browser/preferences/website/Website.java  | 20 ++++++++
+ .../browser/settings/website/Website.java     | 20 ++++++++
  2 files changed, 42 insertions(+), 24 deletions(-)
 
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleWebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleWebsitePreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleWebsitePreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/SingleWebsitePreferences.java
 @@ -46,6 +46,7 @@ import java.util.Set;
   */
  public class SingleWebsitePreferences extends PreferenceFragmentCompat
@@ -31,13 +31,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +                    // initialize cookie and javascript with the category global defaults
 +                    if (permission == null) {
 +                       if (i == ContentSettingException.Type.COOKIE)
-+                          permission = PrefServiceBridge.getInstance().isCategoryEnabled(
-+                                 ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES)
++                          permission = WebsitePreferenceBridge.isCategoryEnabled(
++                                 ContentSettingsType.COOKIES)
 +                                 ? ContentSettingValues.ALLOW
 +                                 : ContentSettingValues.BLOCK;
 +                       else if (i == ContentSettingException.Type.JAVASCRIPT)
-+                          permission = PrefServiceBridge.getInstance().isCategoryEnabled(
-+                                 ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT)
++                          permission = WebsitePreferenceBridge.isCategoryEnabled(
++                                 ContentSettingsType.JAVASCRIPT)
 +                                 ? ContentSettingValues.ALLOW
 +                                 : ContentSettingValues.BLOCK;
 +                    }
@@ -45,7 +45,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
                  }
                  return;
              }
-@@ -626,17 +644,8 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
+@@ -640,17 +658,8 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
      }
  
      private void setUpAdsInformationalBanner() {
@@ -65,7 +65,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
      }
  
      private SiteSettingsCategory getWarningCategory() {
-@@ -711,6 +720,7 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
+@@ -725,6 +734,7 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
          // 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);
@@ -73,7 +73,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
          listPreference.setValueIndex(index);
          listPreference.setOnPreferenceChangeListener(this);
          listPreference.setSummary("%s");
-@@ -782,22 +792,10 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
+@@ -794,22 +804,10 @@ public class SingleWebsitePreferences extends PreferenceFragmentCompat
              setUpListPreference(preference, null);
              return;
          }
@@ -96,11 +96,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
          // However, if the blocking is activated, we still want to show the permission, even if it
          // is in the default state.
          if (permission == null) {
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/Website.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/Website.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/Website.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/Website.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/Website.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/Website.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/website/Website.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/website/Website.java
 @@ -166,6 +166,26 @@ public class Website implements Serializable {
-                         new ContentSettingException(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS,
+                         new ContentSettingException(ContentSettingsType.ADS,
                                  getAddress().getOrigin(), ContentSettingValues.BLOCK, "");
              }
 +        } else if (type == ContentSettingException.Type.COOKIE) {
@@ -110,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +            // permission.
 +            if (mContentSettingException[type] == null) {
 +                mContentSettingException[type] =
-+                        new ContentSettingException(ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES,
++                        new ContentSettingException(ContentSettingsType.COOKIES,
 +                                getAddress().getOrigin(), ContentSettingValues.ALLOW, "");
 +            }
 +        } else if (type == ContentSettingException.Type.JAVASCRIPT) {
@@ -120,7 +120,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +            // permission.
 +            if (mContentSettingException[type] == null) {
 +                mContentSettingException[type] =
-+                        new ContentSettingException(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT,
++                        new ContentSettingException(ContentSettingsType.JAVASCRIPT,
 +                                getAddress().getOrigin(), ContentSettingValues.ALLOW, "");
 +            }
          } else if (type == ContentSettingException.Type.SOUND) {

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


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

@@ -63,15 +63,15 @@ diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_t
 diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc
 --- a/chromecast/browser/url_request_context_factory.cc
 +++ b/chromecast/browser/url_request_context_factory.cc
-@@ -39,6 +39,7 @@
- #include "net/http/http_stream_factory.h"
+@@ -40,6 +40,7 @@
  #include "net/proxy_resolution/proxy_resolution_service.h"
+ #include "net/quic/quic_context.h"
  #include "net/ssl/ssl_config_service_defaults.h"
 +#include "net/url_request/trk_protocol_handler.h"
  #include "net/url_request/url_request_context.h"
  #include "net/url_request/url_request_context_builder.h"
  #include "net/url_request/url_request_context_getter.h"
-@@ -245,13 +246,17 @@ void URLRequestContextFactory::InitializeMainContextDependencies(
+@@ -248,13 +249,17 @@ void URLRequestContextFactory::InitializeMainContextDependencies(
        new net::URLRequestJobFactoryImpl());
    // Keep ProtocolHandlers added in sync with
    // CastContentBrowserClient::IsHandledURL().
@@ -131,8 +131,8 @@ 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
-@@ -513,6 +513,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() {
-   RegisterWebSafeScheme(url::kHttpsScheme);
+@@ -617,6 +617,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() {
+ #endif  // BUILDFLAG(ENABLE_WEBSOCKETS)
    RegisterWebSafeScheme(url::kFtpScheme);
    RegisterWebSafeScheme(url::kDataScheme);
 +  RegisterWebSafeScheme(url::kTraceScheme);
@@ -142,7 +142,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
-@@ -1801,6 +1801,8 @@ component("net") {
+@@ -1662,6 +1662,8 @@ component("net") {
        "url_request/report_sender.h",
        "url_request/static_http_user_agent_settings.cc",
        "url_request/static_http_user_agent_settings.h",
@@ -239,7 +239,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
  
  using base::Time;
  using std::string;
-@@ -592,6 +594,12 @@ URLRequest::URLRequest(const GURL& url,
+@@ -579,6 +581,12 @@ URLRequest::URLRequest(const GURL& url,
    // Sanity check out environment.
    DCHECK(base::ThreadTaskRunnerHandle::IsSet());
  
@@ -256,14 +256,14 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur
 --- a/net/url_request/url_request_context_builder.cc
 +++ b/net/url_request/url_request_context_builder.cc
 @@ -40,6 +40,7 @@
+ #include "net/quic/quic_stream_factory.h"
  #include "net/ssl/ssl_config_service_defaults.h"
- #include "net/url_request/data_protocol_handler.h"
  #include "net/url_request/static_http_user_agent_settings.h"
 +#include "net/url_request/trk_protocol_handler.h"
  #include "net/url_request/url_request_context.h"
  #include "net/url_request/url_request_context_storage.h"
  #include "net/url_request/url_request_intercepting_job_factory.h"
-@@ -641,6 +642,9 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
+@@ -649,6 +650,9 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
      }
      url_request_interceptors_.clear();
    }
@@ -276,9 +276,9 @@ 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
-@@ -26,6 +26,7 @@ const char kHttpsScheme[] = "https";
- const char kJavaScriptScheme[] = "javascript";
- const char kMailToScheme[] = "mailto";
+@@ -28,6 +28,7 @@ const char kMailToScheme[] = "mailto";
+ // See also: https://www.iana.org/assignments/uri-schemes/prov/quic-transport
+ const char kQuicTransportScheme[] = "quic-transport";
  const char kTelScheme[] = "tel";
 +const char kTraceScheme[] = "trk";
  const char kWsScheme[] = "ws";
@@ -287,9 +287,9 @@ 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 kHttpsScheme[];
- COMPONENT_EXPORT(URL) extern const char kJavaScriptScheme[];
+@@ -32,6 +32,7 @@ COMPONENT_EXPORT(URL) extern const char kJavaScriptScheme[];
  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 kTraceScheme[];
  COMPONENT_EXPORT(URL) extern const char kWsScheme[];
@@ -298,15 +298,15 @@ diff --git a/url/url_constants.h b/url/url_constants.h
 diff --git a/url/url_util.cc b/url/url_util.cc
 --- a/url/url_util.cc
 +++ b/url/url_util.cc
-@@ -52,6 +52,7 @@ struct SchemeRegistry {
-       kHttpsScheme,
-       kAboutScheme,
-       kDataScheme,
-+      kTraceScheme,
-       kWssScheme,
-   };
- 
-@@ -67,6 +68,7 @@ struct SchemeRegistry {
+@@ -27,6 +27,7 @@ struct SchemeRegistry {
+   std::vector<SchemeWithType> standard_schemes = {
+       {kHttpsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
+       {kHttpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
++      {kTraceScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
+       // Yes, file URLs can have a hostname, so file URLs should be handled as
+       // "standard". File URLs never have a port as specified by the SchemeType
+       // field.  Unlike other SCHEME_WITH_HOST schemes, the 'host' in a file
+@@ -64,6 +65,7 @@ struct SchemeRegistry {
        kAboutScheme,
        kJavaScriptScheme,
        kDataScheme,

+ 32 - 41
build/patches/Bromite-AdBlockUpdaterService.patch

@@ -7,18 +7,18 @@ Do not use experiments to enable/disable presets
 Always enable ad filtering
 Download filters by checking Last-Modified header first
 ---
- .../chrome/browser/util/FeatureUtilities.java |  10 +
+ .../browser/flags/FeatureUtilities.java       |  10 +
  chrome/browser/after_startup_task_utils.cc    |   5 +
  chrome/browser/browser_process.h              |   7 +
  chrome/browser/browser_process_impl.cc        |  28 ++
  chrome/browser/browser_process_impl.h         |   3 +
  chrome/browser/chrome_browser_main.cc         |   5 +-
- .../browser/chrome_content_browser_client.cc  |  17 --
+ .../browser/chrome_content_browser_client.cc  |  16 --
  components/component_updater/BUILD.gn         |   6 +
  .../adblock_updater_service.cc                | 249 ++++++++++++++++++
  .../adblock_updater_service.h                 |  99 +++++++
- .../download_filters_task.cc                  | 228 ++++++++++++++++
- .../component_updater/download_filters_task.h | 131 +++++++++
+ .../download_filters_task.cc                  | 221 ++++++++++++++++
+ .../component_updater/download_filters_task.h | 129 +++++++++
  ...ent_subresource_filter_throttle_manager.cc |  11 +
  .../content/browser/ruleset_service.cc        |  33 ++-
  .../content/browser/ruleset_service.h         |   7 +-
@@ -28,16 +28,16 @@ Download filters by checking Last-Modified header first
  .../browser/subresource_filter_features.cc    | 113 +-------
  .../core/common/common_features.cc            |   2 +-
  .../frame_host/navigation_throttle_runner.cc  |  10 -
- 21 files changed, 827 insertions(+), 145 deletions(-)
+ 21 files changed, 818 insertions(+), 144 deletions(-)
  create mode 100644 components/component_updater/adblock_updater_service.cc
  create mode 100644 components/component_updater/adblock_updater_service.h
  create mode 100644 components/component_updater/download_filters_task.cc
  create mode 100644 components/component_updater/download_filters_task.h
 
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
-@@ -278,6 +278,14 @@ public class FeatureUtilities {
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
+@@ -156,6 +156,14 @@ public class FeatureUtilities {
          cacheServiceManagerForBackgroundPrefetch();
      }
  
@@ -52,8 +52,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUti
      /**
       * @return True if tab model merging for Android N+ is enabled.
       */
-@@ -871,5 +879,7 @@ public class FeatureUtilities {
-         void setCustomTabVisible(boolean visible);
+@@ -729,5 +737,7 @@ public class FeatureUtilities {
+         void setActivityType(@ActivityType int type);
          void setIsInMultiWindowMode(boolean isInMultiWindowMode);
          boolean isNetworkServiceWarmUpEnabled();
 +        void setAdBlockFiltersURL(String url);
@@ -116,7 +116,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
-@@ -1005,6 +1005,34 @@ BrowserProcessImpl::component_updater() {
+@@ -1007,6 +1007,34 @@ BrowserProcessImpl::component_updater() {
    return component_updater_.get();
  }
  
@@ -174,13 +174,14 @@ 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
-@@ -1715,8 +1715,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
+@@ -1727,9 +1727,12 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
  
    PreBrowserStart();
  
 -  if (!parsed_command_line().HasSwitch(switches::kDisableComponentUpdate))
 +  if (!parsed_command_line().HasSwitch(switches::kDisableComponentUpdate)) {
-     RegisterComponentsForUpdate(profile_->GetPrefs());
+     RegisterComponentsForUpdate(profile_->IsOffTheRecord(),
+                                 profile_->GetPrefs());
 +    // force initialisation
 +    g_browser_process->adblock_updater();
 +  }
@@ -191,14 +192,14 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
 @@ -63,7 +63,6 @@
+ #include "chrome/browser/gpu/chrome_browser_main_extra_parts_gpu.h"
  #include "chrome/browser/hid/chrome_hid_delegate.h"
- #include "chrome/browser/language/translate_frame_binder.h"
  #include "chrome/browser/lifetime/browser_shutdown.h"
 -#include "chrome/browser/lookalikes/lookalike_url_navigation_throttle.h"
  #include "chrome/browser/media/router/media_router_feature.h"
  #include "chrome/browser/media/router/presentation/presentation_service_delegate_impl.h"
  #include "chrome/browser/media/router/presentation/receiver_presentation_service_delegate_impl.h"
-@@ -207,7 +206,6 @@
+@@ -208,7 +207,6 @@
  #include "components/nacl/common/buildflags.h"
  #include "components/nacl/common/nacl_constants.h"
  #include "components/net_log/chrome_net_log.h"
@@ -206,7 +207,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
  #include "components/page_load_metrics/browser/page_load_metrics_util.h"
  #include "components/payments/content/payment_request_display_manager.h"
-@@ -3798,16 +3796,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -3802,16 +3800,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
      content::NavigationHandle* handle) {
    std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
  
@@ -223,14 +224,13 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #if BUILDFLAG(ENABLE_PLUGINS)
    MaybeAddThrottle(&throttles,
                     FlashDownloadInterception::MaybeCreateThrottleFor(handle));
-@@ -3914,11 +3902,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -3926,10 +3914,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
                     safe_browsing::MaybeCreateNavigationThrottle(handle));
  #endif
  
 -  MaybeAddThrottle(
 -      &throttles,
--      lookalikes::LookalikeUrlNavigationThrottle::MaybeCreateNavigationThrottle(
--          handle));
+-      LookalikeUrlNavigationThrottle::MaybeCreateNavigationThrottle(handle));
 -
    MaybeAddThrottle(&throttles,
                     PDFIFrameNavigationThrottle::MaybeCreateThrottleFor(handle));
@@ -613,7 +613,7 @@ diff --git a/components/component_updater/download_filters_task.cc b/components/
 new file mode 100644
 --- /dev/null
 +++ b/components/component_updater/download_filters_task.cc
-@@ -0,0 +1,228 @@
+@@ -0,0 +1,221 @@
 +/*
 +    This file is part of Bromite.
 +
@@ -732,23 +732,14 @@ new file mode 100644
 +void DownloadFiltersTask::internalDownload() {
 +  simple_url_loader_->DownloadToTempFile(
 +      shared_url_network_factory_.get(),
-+      base::BindOnce(
-+          [](const network::SimpleURLLoader* simple_url_loader,
-+             update_client::NetworkFetcher::DownloadToFileCompleteCallback download_to_file_complete_callback,
-+             base::FilePath file_path) {
-+            std::move(download_to_file_complete_callback)
-+                .Run(file_path, simple_url_loader->NetError(),
-+                     simple_url_loader->GetContentSize());
-+          },
-+          simple_url_loader_.get(),
-+          base::BindOnce(&DownloadFiltersTask::OnDownloadComplete, base::Unretained(this))
-+      ), kMaxBodySize);
++      base::BindOnce(&DownloadFiltersTask::OnDownloadComplete, base::Unretained(this)),
++      kMaxBodySize);
 +}
 +
 +void DownloadFiltersTask::OnHeadersDownloadComplete(scoped_refptr<net::HttpResponseHeaders> headers) {
 +  // something went wrong
 +  if (headers == nullptr) {
-+    OnDownloadComplete(base::FilePath(), simple_url_loader_->NetError(), simple_url_loader_->GetContentSize() /* 0 */);
++    OnDownloadComplete(base::FilePath());
 +    return;
 +  }
 +
@@ -780,8 +771,10 @@ new file mode 100644
 +    LOG(INFO) << "DownloadFiltersTask: fetching URL '" << final_url.spec() << "' with method " << (min_last_modified_.is_null() ? "GET" : "HEAD");
 +}
 +
-+void DownloadFiltersTask::OnDownloadComplete(base::FilePath file_path, int net_error, int64_t content_size) {
++void DownloadFiltersTask::OnDownloadComplete(base::FilePath file_path) {
 +  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
++  int net_error = simple_url_loader_->NetError();
++  int64_t content_size = simple_url_loader_->GetContentSize();
 +
 +  const base::TimeTicks download_end_time(base::TimeTicks::Now());
 +  const base::TimeDelta download_time =
@@ -846,7 +839,7 @@ diff --git a/components/component_updater/download_filters_task.h b/components/c
 new file mode 100644
 --- /dev/null
 +++ b/components/component_updater/download_filters_task.h
-@@ -0,0 +1,131 @@
+@@ -0,0 +1,129 @@
 +/*
 +    This file is part of Bromite.
 +
@@ -947,9 +940,7 @@ new file mode 100644
 +  void OnDownloadProgress(uint64_t current);
 +  void OnResponseStarted(const GURL& final_url,
 +                         const network::mojom::URLResponseHead& response_head);
-+  void OnDownloadComplete(base::FilePath file_path,
-+                                                    int net_error,
-+                                                    int64_t content_size);
++  void OnDownloadComplete(base::FilePath file_path);
 +  void OnHeadersDownloadComplete(scoped_refptr<net::HttpResponseHeaders> headers);
 +  void createSimpleURLLoader(bool);
 +  void internalDownload();
@@ -1353,14 +1344,14 @@ diff --git a/content/browser/frame_host/navigation_throttle_runner.cc b/content/
  #include "content/browser/frame_host/mixed_content_navigation_throttle.h"
  #include "content/browser/frame_host/navigation_request.h"
  #include "content/browser/frame_host/navigator_delegate.h"
-@@ -120,15 +119,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
-        devtools_instrumentation::CreateNavigationThrottles(handle_)) {
+@@ -128,15 +127,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
+        devtools_instrumentation::CreateNavigationThrottles(request)) {
      AddThrottle(std::move(throttle));
    }
 -
 -  // Delay navigation for an ablation study (if needed).
 -  AddThrottle(HistoryNavigationAblationStudyNavigationThrottle::
--                  MaybeCreateForNavigation(handle_));
+-                  MaybeCreateForNavigation(request));
 -
 -  // Insert all testing NavigationThrottles last.
 -  throttles_.insert(throttles_.end(),

+ 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
-@@ -442,7 +442,7 @@ const base::Feature kMediaDrmPersistentLicense{
+@@ -476,7 +476,7 @@ const base::Feature kMediaDrmPersistentLicense{
  // MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs
  // which will trigger provisioning process after MediaDrmBridge is created.
  const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",

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

@@ -24,7 +24,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
-@@ -42,7 +42,7 @@ public class VersionNumberGetter {
+@@ -43,7 +43,7 @@ public class VersionNumberGetter {
      private static VersionNumberGetter sInstanceForTests;
  
      /** If false, OmahaClient will never report that a newer version is available. */
@@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNu
 diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -458,7 +458,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
+@@ -464,7 +464,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
      base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kJellyBeanSupported{"JellyBeanSupported",

+ 4 - 4
build/patches/Disable-addresses-autofill-by-default.patch

@@ -10,7 +10,7 @@ Subject: Disable addresses autofill by default
 diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
 +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
-@@ -25,7 +25,7 @@ class AutofillAssistantPreferencesUtil {
+@@ -26,7 +26,7 @@ class AutofillAssistantPreferencesUtil {
      /** Checks whether the Autofill Assistant switch preference in settings is on. */
      static boolean isAutofillAssistantSwitchOn() {
          return ContextUtils.getAppSharedPreferences().getBoolean(
@@ -19,9 +19,9 @@ diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chro
      }
  
      /** Checks whether the Autofill Assistant onboarding has been accepted. */
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill_assistant/AutofillAssistantPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill_assistant/AutofillAssistantPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill_assistant/AutofillAssistantPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill_assistant/AutofillAssistantPreferences.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill_assistant/AutofillAssistantPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill_assistant/AutofillAssistantPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill_assistant/AutofillAssistantPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill_assistant/AutofillAssistantPreferences.java
 @@ -48,7 +48,7 @@ public class AutofillAssistantPreferences extends PreferenceFragmentCompat {
          // (e.g. the switch will say "On" when it is really turned off), so .setChecked() should be
          // called after .addPreference()

+ 23 - 40
build/patches/Disable-all-promo-dialogs.patch

@@ -3,49 +3,32 @@ Date: Tue, 12 Jun 2018 15:09:26 +0200
 Subject: Disable all promo dialogs
 
 ---
- .../chrome/browser/ChromeTabbedActivity.java  | 30 +------------------
- 1 file changed, 1 insertion(+), 29 deletions(-)
+ .../chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
-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
-@@ -801,35 +801,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
-         try (TraceEvent e = TraceEvent.scoped(
-                      "ChromeTabbedActivity.createToolbarButtonInProductHelpController")) {
-             ChromePreferenceManager preferenceManager = ChromePreferenceManager.getInstance();
--            // Promos can only be shown when we start with ACTION_MAIN intent and
--            // after FRE is complete. Native initialization can finish before the FRE flow is
--            // complete, and this will only show promos on the second opportunity. This is
--            // because the FRE is shown on the first opportunity, and we don't want to show such
--            // content back to back.
--            //
--            // TODO(tedchoc): Unify promo dialog logic as the search engine promo dialog checks
--            //                might not have completed at this point and we could show multiple
--            //                promos.
--            boolean isShowingPromo = mLocaleManager.hasShownSearchEnginePromoThisSession();
--            // Promo dialogs in multiwindow mode are broken on some devices:
--            // http://crbug.com/354696
--            boolean isLegacyMultiWindow = MultiWindowUtils.getInstance().isLegacyMultiWindow(this);
--            if (!isShowingPromo && !mIntentWithEffect && FirstRunStatus.getFirstRunFlowComplete()
--                    && preferenceManager.readBoolean(
--                            ChromePreferenceManager.PROMOS_SKIPPED_ON_FIRST_START, false)
--                    && !VrModuleProvider.getDelegate().isInVr()
--                    // VrModuleProvider.getDelegate().isInVr may not return true at this point
--                    // even though Chrome is about to enter VR, so we need to also check whether
--                    // we're launching into VR.
--                    && !VrModuleProvider.getIntentDelegate().isLaunchingIntoVr(this, getIntent())
--                    && !isLegacyMultiWindow) {
--                isShowingPromo = maybeShowPromo();
--            } else {
--                preferenceManager.writeBoolean(
--                        ChromePreferenceManager.PROMOS_SKIPPED_ON_FIRST_START, true);
--            }
--
--            ToolbarButtonInProductHelpController.create(this, isShowingPromo);
-+            ToolbarButtonInProductHelpController.create(this, false);
-         }
+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
+@@ -183,7 +183,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator implements Native
+      * displayed.
+      */
+     private boolean triggerPromo() {
+-        try (TraceEvent e = TraceEvent.scoped("TabbedRootUiCoordinator.triggerPromo")) {
++        /*try (TraceEvent e = TraceEvent.scoped("TabbedRootUiCoordinator.triggerPromo")) {
+             SharedPreferencesManager preferenceManager = SharedPreferencesManager.getInstance();
+             // Promos can only be shown when we start with ACTION_MAIN intent and
+             // after FRE is complete. Native initialization can finish before the FRE flow is
+@@ -214,8 +214,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator implements Native
+                 preferenceManager.writeBoolean(
+                         ChromePreferenceKeys.PROMOS_SKIPPED_ON_FIRST_START, true);
+             }
+-            return isShowingPromo;
+-        }
++            return isShowingPromo;        } */
++            return false;
      }
  
+     private boolean maybeShowPromo() {
 -- 
 2.17.1
 

+ 22 - 22
build/patches/Disable-dynamic-module-loading.patch

@@ -14,7 +14,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/chrome/android/chrome_java_sources.gni
 @@ -426,19 +426,6 @@ chrome_java_sources = [
-   "java/src/org/chromium/chrome/browser/customtabs/content/TabCreationMode.java",
+   "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/BaseCustomTabActivityComponent.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityModule.java",
 -  "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ActivityDelegate.java",
@@ -36,25 +36,25 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
-@@ -51,7 +51,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.Int
+@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.Int
  import org.chromium.chrome.browser.customtabs.content.TabCreationMode;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityComponent;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityModule;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
  import org.chromium.chrome.browser.customtabs.features.CustomTabNavigationBarController;
- import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
-@@ -94,9 +93,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+ import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor;
+@@ -79,9 +78,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
  
      private final CustomTabsConnection mConnection = CustomTabsConnection.getInstance();
  
 -    @Nullable
 -    private DynamicModuleCoordinator mDynamicModuleCoordinator;
 -
-     private CustomTabTaskDescriptionHelper mTaskDescriptionHelper;
- 
      private CustomTabNightModeStateController mNightModeStateController;
-@@ -233,12 +229,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+ 
+     /**
+@@ -217,12 +213,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
      public void finishNativeInitialization() {
          if (!mIntentDataProvider.isInfoPage()) FirstRunSignInProcessor.start(this);
  
@@ -66,8 +66,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 -
          mConnection.showSignInToastIfNecessary(mSession, getIntent());
  
-         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && useSeparateTask()) {
-@@ -280,10 +270,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+         if (isTaskRoot() && UsageStatsService.isEnabled()) {
+@@ -259,10 +249,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
          WebContents webContents = tab == null ? null : tab.getWebContents();
          mConnection.resetPostMessageHandlerForSession(
                  mIntentDataProvider.getSession(), webContents);
@@ -78,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      }
  
      @Override
-@@ -595,10 +581,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -503,10 +489,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
          if (mIntentDataProvider.isTrustedWebActivity()) {
              component.resolveTrustedWebActivityCoordinator();
          }
@@ -92,15 +92,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
-@@ -44,7 +44,6 @@ import org.chromium.chrome.browser.ChromeFeatureList;
+@@ -45,7 +45,6 @@ import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.ChromeVersionInfo;
  import org.chromium.chrome.browser.IntentHandler;
  import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
  import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
  import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
- import org.chromium.chrome.browser.ui.widget.TintedDrawable;
-@@ -459,20 +458,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
+ import org.chromium.chrome.browser.ui.styles.ChromeColors;
+@@ -824,20 +823,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
          // even receive the extras for using the feature.
          if (componentName == null) return false;
  
@@ -122,7 +122,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 +        return false;
      }
  
-     @NonNull
+     @Override
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -135,7 +135,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
  import org.chromium.chrome.browser.device.DeviceClassManager;
  import org.chromium.chrome.browser.init.ChainedTasks;
  import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
-@@ -218,7 +216,6 @@ public class CustomTabsConnection {
+@@ -220,7 +218,6 @@ public class CustomTabsConnection {
  
      private volatile ChainedTasks mWarmupTasks;
  
@@ -143,7 +143,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      /**
       * <strong>DO NOT CALL</strong>
       * Public to be instanciable from {@link ChromeApplication}. This is however
-@@ -1382,7 +1379,6 @@ public class CustomTabsConnection {
+@@ -1388,7 +1385,6 @@ public class CustomTabsConnection {
          if (ChromeApplication.isSevereMemorySignal(level)) {
              getInstance().mClientManager.cleanupUnusedSessions();
          }
@@ -151,7 +151,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      }
  
      @VisibleForTesting
-@@ -1519,32 +1515,6 @@ public class CustomTabsConnection {
+@@ -1524,32 +1520,6 @@ public class CustomTabsConnection {
          recordSpeculationStatusOnSwap(SPECULATION_STATUS_ON_SWAP_BACKGROUND_TAB_NOT_MATCHED);
      }
  
@@ -187,18 +187,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java
-@@ -18,8 +18,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabContro
+@@ -17,8 +17,6 @@ import org.chromium.chrome.browser.customtabs.ReparentingTaskProvider;
+ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabController;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactory;
- import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
  import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController;
  import org.chromium.chrome.browser.customtabs.features.ImmersiveModeController;
- import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
+ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarColorController;
  import org.chromium.chrome.browser.dependency_injection.ActivityScope;
-@@ -36,8 +34,6 @@ import dagger.Subcomponent;
+@@ -34,8 +32,6 @@ import dagger.Subcomponent;
  @ActivityScope
- public interface CustomTabActivityComponent extends ChromeActivityComponent {
+ public interface CustomTabActivityComponent extends BaseCustomTabActivityComponent {
      TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator();
 -    DynamicModuleToolbarController resolveDynamicModuleToolbarController();
 -    DynamicModuleCoordinator resolveDynamicModuleCoordinator();

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

@@ -10,7 +10,7 @@ Subject: Disable fetching of all field trials
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
-@@ -107,10 +107,7 @@ public abstract class ChromeFeatureList {
+@@ -108,10 +108,7 @@ public abstract class ChromeFeatureList {
       */
      public static int getFieldTrialParamByFeatureAsInt(
              String featureName, String paramName, int defaultValue) {
@@ -22,7 +22,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureLi
      }
  
      /**
-@@ -127,10 +124,7 @@ public abstract class ChromeFeatureList {
+@@ -128,10 +125,7 @@ public abstract class ChromeFeatureList {
       */
      public static double getFieldTrialParamByFeatureAsDouble(
              String featureName, String paramName, double defaultValue) {
@@ -34,7 +34,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureLi
      }
  
      /**
-@@ -147,10 +141,7 @@ public abstract class ChromeFeatureList {
+@@ -148,10 +142,7 @@ public abstract class ChromeFeatureList {
       */
      public static boolean getFieldTrialParamByFeatureAsBoolean(
              String featureName, String paramName, boolean defaultValue) {

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

@@ -11,7 +11,7 @@ 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
-@@ -57,17 +57,16 @@ const PrefService::Preference* GetMediaRouterPref(
+@@ -51,17 +51,16 @@ const PrefService::Preference* GetMediaRouterPref(
  
  bool MediaRouterEnabled(content::BrowserContext* context) {
  #if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
@@ -40,7 +40,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
-@@ -226,7 +226,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -232,7 +232,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kMediaRouterFirstRunFlowAcknowledged,
        false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
@@ -52,7 +52,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
-@@ -422,7 +422,7 @@ void ProfileImpl::RegisterProfilePrefs(
+@@ -401,7 +401,7 @@ void ProfileImpl::RegisterProfilePrefs(
    registry->RegisterStringPref(
        prefs::kPrintPreviewDefaultDestinationSelectionRules, std::string());
    registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false);

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

@@ -3,9 +3,9 @@ Date: Wed, 20 Feb 2019 21:41:26 +0100
 Subject: Disable metrics collection for NTP tiles
 
 ---
- .../android/ntp/most_visited_sites_bridge.cc  | 21 -------------------
- components/ntp_tiles/BUILD.gn                 |  3 ---
- 2 files changed, 24 deletions(-)
+ .../browser/android/ntp/most_visited_sites_bridge.cc  | 11 ++---------
+ components/ntp_tiles/BUILD.gn                         |  3 ---
+ 2 files changed, 2 insertions(+), 12 deletions(-)
 
 diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
 --- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
@@ -17,8 +17,8 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
 -#include "components/ntp_tiles/metrics.h"
  #include "components/ntp_tiles/most_visited_sites.h"
  #include "components/ntp_tiles/section_type.h"
- #include "components/rappor/rappor_service_impl.h"
-@@ -45,7 +44,6 @@ using ntp_tiles::NTPTilesVector;
+ #include "ui/gfx/android/java_bitmap.h"
+@@ -44,7 +43,6 @@ using ntp_tiles::NTPTilesVector;
  using ntp_tiles::SectionType;
  using ntp_tiles::TileTitleSource;
  using ntp_tiles::TileSource;
@@ -26,7 +26,7 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
  
  namespace {
  
-@@ -236,7 +234,6 @@ void MostVisitedSitesBridge::RecordPageImpression(
+@@ -235,7 +233,6 @@ void MostVisitedSitesBridge::RecordPageImpression(
      JNIEnv* env,
      const JavaParamRef<jobject>& obj,
      jint jtiles_count) {
@@ -34,26 +34,23 @@ diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/br
  }
  
  void MostVisitedSitesBridge::RecordTileImpression(
-@@ -249,18 +246,6 @@ void MostVisitedSitesBridge::RecordTileImpression(
+@@ -248,6 +245,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
      jint jsource,
      jlong jdata_generation_time_ms,
      const JavaParamRef<jstring>& jurl) {
--  GURL url(ConvertJavaStringToUTF8(env, jurl));
--  TileTitleSource title_source = static_cast<TileTitleSource>(jtitle_source);
--  TileSource source = static_cast<TileSource>(jsource);
--  TileVisualType visual_type = static_cast<TileVisualType>(jvisual_type);
--  favicon_base::IconType icon_type =
--      static_cast<favicon_base::IconType>(jicon_type);
--
--  ntp_tiles::metrics::RecordTileImpression(
--      ntp_tiles::NTPTileImpression(
--          jindex, source, title_source, visual_type, icon_type,
--          base::Time::FromJavaTime(jdata_generation_time_ms), url),
--      g_browser_process->rappor_service());
++#if 0
+   GURL url(ConvertJavaStringToUTF8(env, jurl));
+   TileTitleSource title_source = static_cast<TileTitleSource>(jtitle_source);
+   TileSource source = static_cast<TileSource>(jsource);
+@@ -258,6 +256,7 @@ void MostVisitedSitesBridge::RecordTileImpression(
+   ntp_tiles::metrics::RecordTileImpression(ntp_tiles::NTPTileImpression(
+       jindex, source, title_source, visual_type, icon_type,
+       base::Time::FromJavaTime(jdata_generation_time_ms), url));
++#endif
  }
  
  void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
-@@ -271,12 +256,6 @@ void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
+@@ -268,12 +267,6 @@ void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
      jint title_source,
      jint source,
      jlong jdata_generation_time_ms) {
@@ -78,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",
-@@ -78,7 +76,6 @@ source_set("unit_tests") {
+@@ -79,7 +77,6 @@ source_set("unit_tests") {
      "custom_links_manager_impl_unittest.cc",
      "custom_links_store_unittest.cc",
      "icon_cacher_impl_unittest.cc",

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

@@ -10,7 +10,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
-@@ -905,7 +905,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -907,7 +907,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
  #endif  // defined(OS_CHROMEOS)
  
    registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled,
@@ -22,7 +22,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro
 diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
 --- a/chrome/browser/profiles/profile_io_data.cc
 +++ b/chrome/browser/profiles/profile_io_data.cc
-@@ -47,8 +47,6 @@
+@@ -48,8 +48,6 @@
  #include "components/content_settings/core/browser/host_content_settings_map.h"
  #include "components/cookie_config/cookie_store_util.h"
  #include "components/dom_distiller/core/url_constants.h"

+ 1 - 1
build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch

@@ -11,7 +11,7 @@ a corresponding user option to individually disable their usage.
 diff --git a/components/url_formatter/url_formatter.cc b/components/url_formatter/url_formatter.cc
 --- a/components/url_formatter/url_formatter.cc
 +++ b/components/url_formatter/url_formatter.cc
-@@ -433,13 +433,13 @@ bool IDNToUnicodeOneComponent(const base::char16* comp,
+@@ -460,13 +460,13 @@ bool IDNToUnicodeOneComponent(const base::char16* comp,
  }  // namespace
  
  const FormatUrlType kFormatUrlOmitNothing = 0;

+ 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
-@@ -1169,10 +1169,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
+@@ -1177,10 +1177,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
  }
  
  PluginData* LocalFrame::GetPluginData() const {

+ 19 - 19
build/patches/Disable-promos-displayed-in-bookmarks-manager.patch

@@ -7,9 +7,9 @@ bookmarks, never reach signin thresholds.
 ---
  ...rsonalized_signin_promo_view_bookmarks.xml | 30 -----------
  .../bookmarks/BookmarkItemsAdapter.java       | 23 +-------
- .../bookmarks/BookmarkPromoHeader.java        | 54 +------------------
+ .../bookmarks/BookmarkPromoHeader.java        | 52 +------------------
  .../ReorderBookmarkItemsAdapter.java          | 19 +------
- .../browser/signin/SigninPromoController.java | 19 +------
+ .../browser/signin/SigninPromoController.java | 21 +-------
  5 files changed, 7 insertions(+), 138 deletions(-)
  delete mode 100644 chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
 
@@ -128,15 +128,15 @@ 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/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
-@@ -19,7 +19,6 @@ import org.chromium.base.ContextUtils;
- import org.chromium.base.VisibleForTesting;
- import org.chromium.chrome.R;
+@@ -20,7 +20,6 @@ import org.chromium.chrome.R;
+ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+ import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
  import org.chromium.chrome.browser.signin.IdentityServicesProvider;
 -import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView;
  import org.chromium.chrome.browser.signin.ProfileDataCache;
  import org.chromium.chrome.browser.signin.SigninManager;
  import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver;
-@@ -132,19 +131,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -124,19 +123,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          return mPromoState;
      }
  
@@ -156,7 +156,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      /**
       * @return Sync promo header {@link ViewHolder} instance that can be used with
       *         {@link RecyclerView}.
-@@ -157,42 +143,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -149,40 +135,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          return new ViewHolder(view) {};
      }
  
@@ -180,10 +180,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 -     * Saves that the personalized signin promo was declined and updates the UI.
 -     */
 -    private void setPersonalizedSigninPromoDeclined() {
--        SharedPreferences.Editor sharedPreferencesEditor =
--                ContextUtils.getAppSharedPreferences().edit();
--        sharedPreferencesEditor.putBoolean(PREF_PERSONALIZED_SIGNIN_PROMO_DECLINED, true);
--        sharedPreferencesEditor.apply();
+-        SharedPreferencesManager.getInstance().writeBoolean(
+-                ChromePreferenceKeys.PREF_PERSONALIZED_SIGNIN_PROMO_DECLINED, true);
 -        mPromoState = calculatePromoState();
 -        triggerPromoUpdate();
 -    }
@@ -192,14 +190,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 -     * @return Whether the user declined the personalized signin promo.
 -     */
 -    private boolean wasPersonalizedSigninPromoDeclined() {
--        return ContextUtils.getAppSharedPreferences().getBoolean(
--                PREF_PERSONALIZED_SIGNIN_PROMO_DECLINED, false);
+-        return SharedPreferencesManager.getInstance().readBoolean(
+-                ChromePreferenceKeys.PREF_PERSONALIZED_SIGNIN_PROMO_DECLINED, false);
 -    }
 -
      private @PromoState int calculatePromoState() {
          if (sPromoStateForTests != null) {
              return sPromoStateForTests;
-@@ -205,8 +155,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -195,8 +147,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          if (!ChromeSigninController.get().isSignedIn()) {
              boolean impressionLimitReached = !SigninPromoController.hasNotReachedImpressionLimit(
                      SigninAccessPoint.BOOKMARK_MANAGER);
@@ -209,7 +207,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  return PromoState.PROMO_NONE;
              }
              return PromoState.PROMO_SIGNIN_PERSONALIZED;
-@@ -254,7 +203,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -248,7 +199,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
      }
  
      private void triggerPromoUpdate() {
@@ -275,13 +273,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Reord
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
-@@ -75,23 +75,8 @@ public class SigninPromoController {
+@@ -70,25 +70,8 @@ public class SigninPromoController {
       */
      public static boolean hasNotReachedImpressionLimit(@AccessPoint int accessPoint) {
-         SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences();
+         SharedPreferencesManager preferencesManager = SharedPreferencesManager.getInstance();
 -        switch (accessPoint) {
 -            case SigninAccessPoint.BOOKMARK_MANAGER:
--                return sharedPreferences.getInt(SIGNIN_PROMO_IMPRESSIONS_COUNT_BOOKMARKS, 0)
+-                return preferencesManager.readInt(
+-                               ChromePreferenceKeys.SIGNIN_PROMO_IMPRESSIONS_COUNT_BOOKMARKS)
 -                        < MAX_IMPRESSIONS_BOOKMARKS;
 -            case SigninAccessPoint.NTP_CONTENT_SUGGESTIONS:
 -                // There is no impression limit for NTP content suggestions.
@@ -290,7 +289,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPr
 -                // There is no impression limit for Recent Tabs.
 -                return true;
 -            case SigninAccessPoint.SETTINGS:
--                return sharedPreferences.getInt(SIGNIN_PROMO_IMPRESSIONS_COUNT_SETTINGS, 0)
+-                return preferencesManager.readInt(
+-                               ChromePreferenceKeys.SIGNIN_PROMO_IMPRESSIONS_COUNT_SETTINGS)
 -                        < MAX_IMPRESSIONS_SETTINGS;
 -            default:
 -                assert false : "Unexpected value for access point: " + accessPoint;

+ 4 - 4
build/patches/Disable-references-to-fonts.googleapis.com.patch

@@ -12,7 +12,7 @@ Subject: Disable references to fonts.googleapis.com
 diff --git a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 +++ b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
-@@ -317,7 +317,7 @@ bool DomDistillerViewerSource::ShouldServiceRequest(
+@@ -295,7 +295,7 @@ bool DomDistillerViewerSource::ShouldServiceRequest(
  }
  
  std::string DomDistillerViewerSource::GetContentSecurityPolicyStyleSrc() {
@@ -36,10 +36,10 @@ diff --git a/components/dom_distiller/core/html/preview.html b/components/dom_di
 diff --git a/components/dom_distiller/core/javascript/dom_distiller_viewer.js b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
 --- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js
 +++ b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
-@@ -130,7 +130,7 @@ function maybeSetWebFont() {
-     return;
+@@ -132,7 +132,7 @@ function maybeSetWebFont() {
+   }
  
-   var e = document.createElement('link');
+   const e = document.createElement('link');
 -  e.href = 'https://fonts.googleapis.com/css?family=Roboto';
 +  e.href = 'chrome://resources/css/roboto.css';
    e.rel = 'stylesheet';

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


+ 1 - 1
build/patches/Disable-search-ready-omnibox-by-default.patch

@@ -9,7 +9,7 @@ Subject: Disable search-ready omnibox by default
 diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -518,7 +518,7 @@ const base::Feature kScrollToExpandPaymentHandler{
+@@ -521,7 +521,7 @@ const base::Feature kScrollToExpandPaymentHandler{
      "ScrollToExpandPaymentHandler", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kSearchReadyOmniboxFeature{

+ 1 - 1
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
-@@ -538,8 +538,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -545,8 +545,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;
    if (!used_testing_config) {

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

@@ -15,19 +15,19 @@ leak information through the TextClassifier set by OEM, if any
 diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -352,7 +352,7 @@ const base::Feature kChromeSharingHub{"ChromeSharingHub",
+@@ -366,7 +366,7 @@ const base::Feature kChromeSharingHub{"ChromeSharingHub",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kChromeSmartSelection{"ChromeSmartSelection",
 -                                          base::FEATURE_ENABLED_BY_DEFAULT};
 +                                          base::FEATURE_DISABLED_BY_DEFAULT};
  
- const base::Feature kClickToCallOpenDialerDirectly{
-     "ClickToCallOpenDialerDirectly", base::FEATURE_ENABLED_BY_DEFAULT};
+ const base::Feature kCommandLineOnNonRooted{"CommandLineOnNonRooted",
+                                             base::FEATURE_DISABLED_BY_DEFAULT};
 diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
 +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
-@@ -774,7 +774,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper
+@@ -775,7 +775,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper
              menu.removeItem(R.id.select_action_menu_share);
          }
  

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

+ 8 - 8
build/patches/Disable-sync-services-menu-entry.patch

@@ -4,8 +4,8 @@ Subject: Disable sync services menu entry
 
 ---
  chrome/android/java/res/xml/main_preferences.xml    | 6 ------
- chrome/android/java/res/xml/privacy_preferences.xml | 7 -------
- 2 files changed, 13 deletions(-)
+ chrome/android/java/res/xml/privacy_preferences.xml | 8 --------
+ 2 files changed, 14 deletions(-)
 
 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
@@ -14,30 +14,30 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
          android:key="sign_in"
          android:order="1"
          android:title="@string/sign_in_to_chrome"/>
--    <org.chromium.chrome.browser.preferences.ChromeBasePreference
+-    <org.chromium.chrome.browser.settings.ChromeBasePreference
 -        android:key="sync_and_services"
 -        android:order="2"
 -        android:layout="@layout/account_management_account_row"
 -        android:title="@string/prefs_sync_and_services"
--        android:fragment="org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences"/>
+-        android:fragment="org.chromium.chrome.browser.settings.sync.SyncAndServicesPreferences"/>
  
      <PreferenceCategory
          android:key="basics_section"
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/chrome/android/java/res/xml/privacy_preferences.xml
-@@ -29,12 +29,5 @@
+@@ -29,12 +29,4 @@
          android:title="@string/clear_browsing_data_title"
          android:summary="@string/clear_browsing_data_summary"
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" />
+         android:fragment="org.chromium.chrome.browser.settings.privacy.ClearBrowsingDataTabsFragment" />
 -    <android.support.v7.preference.Preference
 -        android:key="sync_and_services_link_divider"
 -        android:layout="@layout/divider_preference"
 -        android:selectable="false"/>
--    <org.chromium.chrome.browser.preferences.TextMessagePreference
+-    <org.chromium.chrome.browser.settings.TextMessagePreference
 -        android:key="sync_and_services_link"
 -        android:summary="@string/privacy_sync_and_services_link"
-         app:allowDividerBelow="false" />
+-        app:allowDividerBelow="false" />
  </PreferenceScreen>
 -- 
 2.17.1

+ 3 - 3
build/patches/Do-not-enable-QUIC-by-default.patch

@@ -12,7 +12,7 @@ For reference:
 diff --git a/components/network_session_configurator/browser/network_session_configurator.cc b/components/network_session_configurator/browser/network_session_configurator.cc
 --- a/components/network_session_configurator/browser/network_session_configurator.cc
 +++ b/components/network_session_configurator/browser/network_session_configurator.cc
-@@ -180,7 +180,7 @@ bool ShouldEnableQuic(base::StringPiece quic_trial_group,
+@@ -186,7 +186,7 @@ bool ShouldEnableQuic(base::StringPiece quic_trial_group,
    return quic_trial_group.starts_with(kQuicFieldTrialEnabledGroupName) ||
           quic_trial_group.starts_with(kQuicFieldTrialHttpsEnabledGroupName) ||
           base::LowerCaseEqualsASCII(
@@ -21,7 +21,7 @@ diff --git a/components/network_session_configurator/browser/network_session_con
  }
  
  bool ShouldEnableQuicProxiesForHttpsUrls(
-@@ -188,7 +188,7 @@ bool ShouldEnableQuicProxiesForHttpsUrls(
+@@ -194,7 +194,7 @@ bool ShouldEnableQuicProxiesForHttpsUrls(
    return base::LowerCaseEqualsASCII(
        GetVariationParam(quic_trial_params,
                          "enable_quic_proxies_for_https_urls"),
@@ -30,7 +30,7 @@ diff --git a/components/network_session_configurator/browser/network_session_con
  }
  
  bool ShouldRetryWithoutAltSvcOnQuicErrors(
-@@ -468,7 +468,6 @@ void ConfigureQuicParams(base::StringPiece quic_trial_group,
+@@ -475,7 +475,6 @@ void ConfigureQuicParams(base::StringPiece quic_trial_group,
    params->enable_quic =
        ShouldEnableQuic(quic_trial_group, quic_trial_params,
                         is_quic_force_disabled, is_quic_force_enabled);

+ 2 - 2
build/patches/Do-not-grant-notifications-to-default-search-engine.patch

@@ -47,7 +47,7 @@ diff --git a/chrome/browser/android/search_permissions/search_permissions_servic
  
      // Update the content setting with the auto-grants for the DSE.
 @@ -398,11 +392,9 @@ void SearchPermissionsService::InitializeSettingsIfNeeded() {
-         GetContentSetting(dse_origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+         GetContentSetting(dse_origin, ContentSettingsType::NOTIFICATIONS);
      ContentSetting dse_notifications_setting = notifications_setting_to_restore;
      // If the user hasn't explicitly allowed or blocked notifications for the
 -    // DSE, initialize it to allowed.
@@ -63,7 +63,7 @@ diff --git a/chrome/browser/android/search_permissions/search_permissions_servic
 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
-@@ -311,7 +311,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
+@@ -320,7 +320,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",

+ 6 - 7
build/patches/Do-not-ignore-download-location-prompt-setting.patch

@@ -6,13 +6,13 @@ Upstream has decided that it works as intended (https://bugs.chromium.org/p/chro
 but users would like to decide where to save a file even when there is no SD card available;
 do not skip the prompt in such cases.
 ---
- .../DownloadLocationDialogBridge.java         | 73 ++++++-------------
- 1 file changed, 21 insertions(+), 52 deletions(-)
+ .../DownloadLocationDialogBridge.java         | 72 ++++++-------------
+ 1 file changed, 21 insertions(+), 51 deletions(-)
 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadLocationDialogBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadLocationDialogBridge.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadLocationDialogBridge.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadLocationDialogBridge.java
-@@ -32,9 +32,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -31,9 +31,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
      private PropertyModel mDialogModel;
      private DownloadLocationCustomView mCustomView;
      private ModalDialogManager mModalDialogManager;
@@ -22,7 +22,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
      private Context mContext;
  
      private DownloadLocationDialogBridge(long nativeDownloadLocationDialogBridge) {
-@@ -67,12 +64,28 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -66,12 +63,28 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
  
          mModalDialogManager = activity.getModalDialogManager();
          mContext = activity;
@@ -56,7 +56,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
      }
  
      @Override
-@@ -105,50 +118,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -104,49 +117,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
          mCustomView = null;
      }
  
@@ -72,8 +72,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
 -            final DirectoryOption dir = dirs.get(0);
 -            if (dir.type == DirectoryOption.DownloadLocationDirectoryType.DEFAULT) {
 -                assert(!TextUtils.isEmpty(dir.location));
--                PrefServiceBridge.getInstance().setDownloadAndSaveFileDefaultDirectory(
--                        dir.location);
+-                setDownloadAndSaveFileDefaultDirectory(dir.location);
 -                DownloadLocationDialogBridgeJni.get().onComplete(
 -                        mNativeDownloadLocationDialogBridge, DownloadLocationDialogBridge.this,
 -                        mSuggestedPath);

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

@@ -9,9 +9,9 @@ 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
-@@ -155,10 +155,10 @@ void PasswordManager::RegisterProfilePrefs(
-   registry->RegisterBooleanPref(prefs::kBlacklistedCredentialsNormalized,
-                                 false);
+@@ -178,10 +178,10 @@ void AddLocallySavedPredictions(FieldInfoManager* field_info_manager,
+ void PasswordManager::RegisterProfilePrefs(
+     user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
 -      prefs::kCredentialsEnableService, true,
 +      prefs::kCredentialsEnableService, false,

+ 1 - 1
build/patches/Enable-changing-default-downloads-storage-location-by-default.patch

@@ -9,7 +9,7 @@ Subject: Enable changing default downloads storage location by default
 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
-@@ -311,7 +311,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
+@@ -320,7 +320,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",

+ 0 - 23
build/patches/Enable-download-rename-option-by-default.patch

@@ -1,23 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Thu, 30 May 2019 03:44:07 +0200
-Subject: Enable download rename option by default
-
----
- chrome/browser/android/chrome_feature_list.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
---- a/chrome/browser/android/chrome_feature_list.cc
-+++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -414,7 +414,7 @@ const base::Feature kDownloadNotificationBadge{
-     "DownloadNotificationBadge", base::FEATURE_DISABLED_BY_DEFAULT};
- 
- const base::Feature kDownloadRename{"DownloadRename",
--                                    base::FEATURE_DISABLED_BY_DEFAULT};
-+                                    base::FEATURE_ENABLED_BY_DEFAULT};
- 
- const base::Feature kDownloadTabManagementModule{
-     "DownloadTabManagementModule", base::FEATURE_DISABLED_BY_DEFAULT};
--- 
-2.17.1
-

+ 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
-@@ -297,6 +297,10 @@ config("compiler") {
+@@ -302,6 +302,10 @@ config("compiler") {
        }
      }
  

+ 0 - 23
build/patches/Enable-night-mode-menu-entry-by-default.patch

@@ -1,23 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Sun, 14 Apr 2019 12:02:57 +0200
-Subject: Enable night mode menu entry by default
-
----
- chrome/browser/android/chrome_feature_list.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
---- a/chrome/browser/android/chrome_feature_list.cc
-+++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -246,7 +246,7 @@ const base::Feature kAdjustWebApkInstallationSpace = {
-     "AdjustWebApkInstallationSpace", base::FEATURE_DISABLED_BY_DEFAULT};
- 
- const base::Feature kAndroidNightMode{"AndroidNightMode",
--                                      base::FEATURE_DISABLED_BY_DEFAULT};
-+                                      base::FEATURE_ENABLED_BY_DEFAULT};
- 
- const base::Feature kAndroidNightModeCCT{"AndroidNightModeCCT",
-                                          base::FEATURE_ENABLED_BY_DEFAULT};
--- 
-2.17.1
-

+ 2 - 2
build/patches/Enable-site-per-process-isolation-for-devices-with-enough-memory.patch

@@ -9,7 +9,7 @@ Subject: Enable site per process isolation 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
-@@ -651,11 +651,7 @@ const base::Feature kShowTrustedPublisherURL{"ShowTrustedPublisherURL",
+@@ -659,11 +659,7 @@ const base::Feature kShowTrustedPublisherURL{"ShowTrustedPublisherURL",
  // browser_features, as they are only used on the browser side.
  const base::Feature kSitePerProcess {
    "site-per-process",
@@ -21,7 +21,7 @@ diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
  };
  
  // Controls a mode for dynamically process-isolating sites where the user has
-@@ -685,7 +681,7 @@ const base::Feature kSiteIsolationForPasswordSites{
+@@ -693,7 +689,7 @@ const base::Feature kSiteIsolationForPasswordSites{
  // base::SysInfo::AmountOfPhysicalMemoryMB().
  const base::Feature kSitePerProcessOnlyForHighMemoryClients{
      "site-per-process-only-for-high-memory-clients",

+ 1 - 1
build/patches/Fix-crash-when-accessing-page-info-site-settings.patch

@@ -9,7 +9,7 @@ Subject: Fix crash when accessing page info / site settings
 diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
 --- a/chrome/browser/permissions/permission_manager.cc
 +++ b/chrome/browser/permissions/permission_manager.cc
-@@ -761,6 +761,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
+@@ -766,6 +766,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
    if (status != CONTENT_SETTING_DEFAULT)
      return PermissionResult(status, PermissionStatusSource::UNSPECIFIED);
    PermissionContextBase* context = GetPermissionContext(permission);

+ 6 - 6
build/patches/Hide-passwords-manager-link.patch

@@ -3,13 +3,13 @@ Date: Sun, 13 Aug 2017 19:33:04 -0400
 Subject: Hide passwords manager link
 
 ---
- .../preferences/password/SavePasswordsPreferences.java        | 4 ++--
+ .../browser/settings/password/SavePasswordsPreferences.java   | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/SavePasswordsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/SavePasswordsPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/SavePasswordsPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/SavePasswordsPreferences.java
-@@ -251,7 +251,7 @@ public class SavePasswordsPreferences
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/password/SavePasswordsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/password/SavePasswordsPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/password/SavePasswordsPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/password/SavePasswordsPreferences.java
+@@ -254,7 +254,7 @@ public class SavePasswordsPreferences
              return;
          }
  
@@ -18,7 +18,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pas
  
          PreferenceGroup passwordParent;
          if (mSearchQuery == null) {
-@@ -326,7 +326,7 @@ public class SavePasswordsPreferences
+@@ -329,7 +329,7 @@ public class SavePasswordsPreferences
              return;
          }
  

+ 3 - 3
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
-@@ -74,7 +74,8 @@ struct MatchGURLHash {
+@@ -75,7 +75,8 @@ struct MatchGURLHash {
  // static
  size_t AutocompleteResult::GetMaxMatches(bool is_zero_suggest) {
  #if (defined(OS_ANDROID))
@@ -20,11 +20,11 @@ diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omni
 +  constexpr size_t kDefaultMaxAutocompleteMatches = 10;
    if (is_zero_suggest)
      return kDefaultMaxAutocompleteMatches;
- #else
+ #elif defined(OS_IOS)  // !defined(OS_ANDROID)
 diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc
 --- a/components/omnibox/browser/omnibox_field_trial.cc
 +++ b/components/omnibox/browser/omnibox_field_trial.cc
-@@ -329,7 +329,8 @@ void OmniboxFieldTrial::GetDemotionsByType(
+@@ -338,7 +338,8 @@ void OmniboxFieldTrial::GetDemotionsByType(
  
  size_t OmniboxFieldTrial::GetProviderMaxMatches(
      AutocompleteProvider::Type provider) {

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

@@ -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();
-@@ -6664,8 +6667,63 @@ void Document::FinishedParsing() {
+@@ -6770,8 +6773,63 @@ void Document::FinishedParsing() {
    // Parser should have picked up all preloads by now
    fetcher_->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
  
@@ -118,7 +118,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
-@@ -1663,6 +1663,8 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1690,6 +1690,8 @@ class CORE_EXPORT Document : public ContainerNode,
    void AddAXContext(AXContext*);
    void RemoveAXContext(AXContext*);
  
@@ -152,7 +152,7 @@ new file mode 100644
 diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third_party/blink/renderer/core/html/html_script_element.cc
 --- a/third_party/blink/renderer/core/html/html_script_element.cc
 +++ b/third_party/blink/renderer/core/html/html_script_element.cc
-@@ -149,6 +149,11 @@ void HTMLScriptElement::setTextContent(
+@@ -148,6 +148,11 @@ void HTMLScriptElement::setTextContent(
    }
  }
  
@@ -162,7 +162,7 @@ diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third
 +}
 +
  void HTMLScriptElement::setAsync(bool async) {
-   SetBooleanAttribute(kAsyncAttr, async);
+   SetBooleanAttribute(html_names::kAsyncAttr, async);
    loader_->HandleAsyncAttribute();
 diff --git a/third_party/blink/renderer/core/html/html_script_element.h b/third_party/blink/renderer/core/html/html_script_element.h
 --- a/third_party/blink/renderer/core/html/html_script_element.h

+ 27 - 39
build/patches/Modify-default-preferences.patch

@@ -4,27 +4,27 @@ Subject: Modify default preferences
 
 Do not hide component extensions
 ---
- .../browser/background/background_mode_manager.cc  |  2 +-
- chrome/browser/chrome_content_browser_client.cc    |  2 +-
- chrome/browser/net/prediction_options.cc           |  2 +-
- chrome/browser/net/prediction_options.h            |  2 +-
- chrome/browser/profiles/profile.cc                 |  2 +-
- .../settings/reset_page/reset_profile_dialog.html  |  2 +-
- chrome/browser/ui/browser_ui_prefs.cc              |  4 ++--
- .../ui/navigation_correction_tab_observer.cc       |  2 +-
- .../ui/webui/local_discovery/local_discovery_ui.cc |  4 ----
- chrome/service/cloud_print/connector_settings.cc   |  2 +-
- .../autofill/core/browser/autofill_manager.cc      | 14 ++++----------
- components/autofill/core/common/autofill_prefs.cc  |  2 +-
- components/bookmarks/browser/bookmark_utils.cc     |  4 ++--
- .../safe_browsing/common/safe_browsing_prefs.cc    |  4 ++--
- extensions/common/extension.cc                     |  8 --------
- 15 files changed, 19 insertions(+), 37 deletions(-)
+ chrome/browser/background/background_mode_manager.cc     | 2 +-
+ chrome/browser/chrome_content_browser_client.cc          | 2 +-
+ chrome/browser/net/prediction_options.cc                 | 2 +-
+ chrome/browser/net/prediction_options.h                  | 2 +-
+ chrome/browser/profiles/profile.cc                       | 2 +-
+ .../settings/reset_page/reset_profile_dialog.html        | 2 +-
+ chrome/browser/ui/browser_ui_prefs.cc                    | 4 ++--
+ chrome/browser/ui/navigation_correction_tab_observer.cc  | 2 +-
+ .../ui/webui/local_discovery/local_discovery_ui.cc       | 4 ----
+ chrome/service/cloud_print/connector_settings.cc         | 2 +-
+ components/autofill/core/browser/autofill_manager.cc     | 9 +++------
+ components/autofill/core/common/autofill_prefs.cc        | 2 +-
+ components/bookmarks/browser/bookmark_utils.cc           | 4 ++--
+ components/safe_browsing/common/safe_browsing_prefs.cc   | 4 ++--
+ extensions/common/extension.cc                           | 8 --------
+ 15 files changed, 18 insertions(+), 33 deletions(-)
 
 diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
 --- a/chrome/browser/background/background_mode_manager.cc
 +++ b/chrome/browser/background/background_mode_manager.cc
-@@ -302,7 +302,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -310,7 +310,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
    registry->RegisterBooleanPref(prefs::kChromeCreatedLoginItem, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
  #endif
@@ -36,7 +36,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
-@@ -1141,7 +1141,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
+@@ -1170,7 +1170,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -79,8 +79,8 @@ diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profil
 -      true,
 +      false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-   registry->RegisterBooleanPref(prefs::kSessionExitedCleanly, true);
-   registry->RegisterStringPref(prefs::kSessionExitType, std::string());
+ #if defined(OS_ANDROID)
+   registry->RegisterStringPref(
 diff --git a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
 --- a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
 +++ b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
@@ -113,7 +113,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u
 diff --git a/chrome/browser/ui/navigation_correction_tab_observer.cc b/chrome/browser/ui/navigation_correction_tab_observer.cc
 --- a/chrome/browser/ui/navigation_correction_tab_observer.cc
 +++ b/chrome/browser/ui/navigation_correction_tab_observer.cc
-@@ -43,7 +43,7 @@ NavigationCorrectionTabObserver::~NavigationCorrectionTabObserver() {}
+@@ -57,7 +57,7 @@ void NavigationCorrectionTabObserver::SetAllowEnableCorrectionsForTesting(
  // static
  void NavigationCorrectionTabObserver::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* prefs) {
@@ -151,19 +151,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
-@@ -529,10 +529,7 @@ bool AutofillManager::ShouldParseForms(const std::vector<FormData>& forms,
-   bool enabled = IsAutofillEnabled();
-   sync_state_ = personal_data_ ? personal_data_->GetSyncSigninState()
-                                : AutofillSyncSigninState::kNumSyncStates;
--  if (!has_logged_autofill_enabled_) {
--    AutofillMetrics::LogIsAutofillEnabledAtPageLoad(enabled, sync_state_);
--    has_logged_autofill_enabled_ = true;
--  }
-+  has_logged_autofill_enabled_ = true;
- 
-   return enabled;
- }
-@@ -818,10 +815,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
+@@ -823,10 +823,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
        // suggestions available.
        // TODO(mathp): Differentiate between number of suggestions available
        // (current metric) and number shown to the user.
@@ -175,7 +163,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
      }
    }
  
-@@ -1450,8 +1444,8 @@ void AutofillManager::Reset() {
+@@ -1464,8 +1461,8 @@ void AutofillManager::Reset() {
  #if defined(OS_ANDROID) || defined(OS_IOS)
    autofill_assistant_.Reset();
  #endif
@@ -189,7 +177,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
 diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc
 --- a/components/autofill/core/common/autofill_prefs.cc
 +++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -152,7 +152,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -147,7 +147,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kAutofillLastVersionDisusedAddressesDeleted, 0,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -234,13 +222,13 @@ diff --git a/components/safe_browsing/common/safe_browsing_prefs.cc b/components
 diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc
 --- a/extensions/common/extension.cc
 +++ b/extensions/common/extension.cc
-@@ -365,14 +365,6 @@ bool Extension::ShouldDisplayInExtensionSettings() const {
-   if (is_theme())
+@@ -333,14 +333,6 @@ bool Extension::ShouldDisplayInExtensionSettings(Manifest::Type type,
+   if (type == Manifest::TYPE_THEME)
      return false;
  
 -  // Hide component extensions because they are only extensions as an
 -  // implementation detail of Chrome.
--  if (extensions::Manifest::IsComponentLocation(location()) &&
+-  if (Manifest::IsComponentLocation(location) &&
 -      !base::CommandLine::ForCurrentProcess()->HasSwitch(
 -          switches::kShowComponentExtensionOptions)) {
 -    return false;

+ 36 - 38
build/patches/Multiple-fingerprinting-mitigations-for-canvas-text-and-client-rectangles.patch

@@ -57,18 +57,18 @@ 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
-@@ -2144,6 +2144,7 @@ jumbo_static_library("browser") {
+@@ -2222,6 +2222,7 @@ jumbo_static_library("browser") {
      "//third_party/metrics_proto",
      "//third_party/re2",
      "//third_party/smhasher:cityhash",
 +    "//third_party/ungoogled:switches",
-     "//third_party/webrtc_overrides",
-     "//third_party/webrtc_overrides:init_webrtc",
+     "//third_party/webrtc_overrides:webrtc_component",
      "//third_party/widevine/cdm:buildflags",
+     "//third_party/zlib",
 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
-@@ -147,6 +147,7 @@
+@@ -149,6 +149,7 @@
  #include "third_party/blink/public/common/experiments/memory_ablation_experiment.h"
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/common/forcedark/forcedark_switches.h"
@@ -76,7 +76,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  #include "third_party/leveldatabase/leveldb_features.h"
  #include "ui/accessibility/accessibility_features.h"
  #include "ui/accessibility/accessibility_switches.h"
-@@ -1503,12 +1504,24 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1513,12 +1514,24 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName,
       flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll,
       SINGLE_VALUE_TYPE(switches::kEnableWebRtcSrtpAesGcm)},
@@ -104,18 +104,18 @@ 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
-@@ -206,6 +206,7 @@ jumbo_source_set("browser") {
+@@ -209,6 +209,7 @@ jumbo_source_set("browser") {
      "//third_party/libyuv",
      "//third_party/re2",
      "//third_party/sqlite",
 +    "//third_party/ungoogled:switches",
-     "//third_party/webrtc/modules/desktop_capture:primitives",
-     "//third_party/webrtc/rtc_base:rtc_base",
+     "//third_party/webrtc_overrides:webrtc_component",
      "//third_party/zlib",
+     "//third_party/zlib/google:zip",
 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
-@@ -220,6 +220,7 @@
+@@ -225,6 +225,7 @@
  #include "third_party/blink/public/common/page/launching_process_state.h"
  #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
  #include "third_party/blink/public/public_buildflags.h"
@@ -123,7 +123,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"
-@@ -2977,6 +2978,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
+@@ -3092,6 +3093,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
      switches::kDisablePreferCompositingToLCDText,
      switches::kDisableDatabases,
      switches::kDisableFileSystem,
@@ -136,7 +136,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
-@@ -123,6 +123,7 @@ target(link_target_type, "child") {
+@@ -125,6 +125,7 @@ target(link_target_type, "child") {
      "//third_party/blink/public/common",
      "//third_party/blink/public/strings",
      "//third_party/ced",
@@ -147,7 +147,7 @@ diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
 diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
 --- a/content/child/runtime_features.cc
 +++ b/content/child/runtime_features.cc
-@@ -23,6 +23,7 @@
+@@ -25,6 +25,7 @@
  #include "services/network/public/cpp/features.h"
  #include "services/network/public/cpp/network_switches.h"
  #include "third_party/blink/public/common/features.h"
@@ -155,9 +155,9 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.
  #include "third_party/blink/public/platform/web_runtime_features.h"
  #include "ui/accessibility/accessibility_features.h"
  #include "ui/base/ui_base_features.h"
-@@ -513,6 +514,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs(
-   if (ui::IsOverlayScrollbarEnabled())
-     WebRuntimeFeatures::EnableOverlayScrollbars(true);
+@@ -523,6 +524,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs(
+   // They're moved here to distinguish them from actual base checks
+   WebRuntimeFeatures::EnableOverlayScrollbars(ui::IsOverlayScrollbarEnabled());
  
 +  WebRuntimeFeatures::EnableFingerprintingClientRectsNoise(
 +      !command_line.HasSwitch(switches::kFingerprintingClientRectsNoise));
@@ -172,8 +172,8 @@ 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
-@@ -229,6 +229,9 @@ class WebRuntimeFeatures {
-   BLINK_PLATFORM_EXPORT static void EnableMergeBlockingNonBlockingPools(bool);
+@@ -226,6 +226,9 @@ class WebRuntimeFeatures {
+   BLINK_PLATFORM_EXPORT static void EnableTranslateService(bool);
    BLINK_PLATFORM_EXPORT static void EnableGetDisplayMedia(bool);
    BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
 +  BLINK_PLATFORM_EXPORT static void EnableFingerprintingClientRectsNoise(bool);
@@ -193,7 +193,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"
-@@ -2794,6 +2795,23 @@ void Document::UpdateStyleAndLayoutTree() {
+@@ -2875,6 +2876,23 @@ void Document::UpdateStyleAndLayoutTree() {
  #if DCHECK_IS_ON()
    AssertLayoutTreeUpdated(*this);
  #endif
@@ -220,7 +220,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
-@@ -414,6 +414,10 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -416,6 +416,10 @@ class CORE_EXPORT Document : public ContainerNode,
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -231,7 +231,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/
    String visibilityState() const;
    bool IsPageVisible() const;
    bool hidden() const;
-@@ -1936,6 +1940,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1970,6 +1974,9 @@ class CORE_EXPORT Document : public ContainerNode,
  
    base::ElapsedTimer start_time_;
  
@@ -244,7 +244,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
-@@ -1877,6 +1877,11 @@ DOMRectList* Element::getClientRects() {
+@@ -1902,6 +1902,11 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -256,7 +256,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
    return DOMRectList::Create(quads);
  }
  
-@@ -1894,6 +1899,9 @@ DOMRect* Element::getBoundingClientRect() {
+@@ -1919,6 +1924,9 @@ DOMRect* Element::getBoundingClientRect() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
@@ -335,7 +335,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/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
-@@ -818,9 +818,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+@@ -821,9 +821,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
    else
      direction = ToTextDirection(GetState().GetDirection(), canvas());
  
@@ -372,7 +372,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.
 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
-@@ -1454,7 +1454,9 @@ jumbo_component("platform") {
+@@ -1478,7 +1478,9 @@ jumbo_component("platform") {
      "//third_party/blink/renderer:non_test_config",
    ]
  
@@ -383,9 +383,9 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re
  
    public_deps = [
      ":blink_platform_public_deps",
-@@ -1487,6 +1489,7 @@ jumbo_component("platform") {
-     "//third_party/blink/public/common",
+@@ -1516,6 +1518,7 @@ jumbo_component("platform") {
      "//third_party/blink/public/mojom:embedded_frame_sink_mojo_bindings_blink",
+     "//third_party/blink/public/strings",
      "//third_party/ced",
 +    "//third_party/ungoogled:switches",
      "//third_party/emoji-segmenter",
@@ -394,7 +394,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
-@@ -704,4 +704,16 @@ void WebRuntimeFeatures::EnableAcceleratedSmallCanvases(bool enable) {
+@@ -696,4 +696,16 @@ void WebRuntimeFeatures::EnableAcceleratedSmallCanvases(bool enable) {
    RuntimeEnabledFeatures::SetAcceleratedSmallCanvasesEnabled(enable);
  }
  
@@ -414,16 +414,16 @@ diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.c
 diff --git a/third_party/blink/renderer/platform/graphics/image_data_buffer.cc b/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
 --- a/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
 +++ b/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
-@@ -35,6 +35,8 @@
- #include <memory>
+@@ -36,6 +36,8 @@
  
+ #include "base/compiler_specific.h"
  #include "base/memory/ptr_util.h"
 +#include "base/rand_util.h"
 +#include "base/logging.h"
  #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
  #include "third_party/blink/renderer/platform/image-encoders/image_encoder.h"
  #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
-@@ -127,6 +129,11 @@ bool ImageDataBuffer::EncodeImageInternal(const ImageEncodingMimeType mime_type,
+@@ -130,6 +132,11 @@ bool ImageDataBuffer::EncodeImageInternal(const ImageEncodingMimeType mime_type,
                                            const SkPixmap& pixmap) const {
    DCHECK(is_valid_);
  
@@ -447,12 +447,11 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
  #include "base/numerics/checked_math.h"
  #include "gpu/command_buffer/client/gles2_interface.h"
  #include "third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.h"
-@@ -11,12 +13,14 @@
+@@ -11,11 +13,13 @@
  #include "third_party/blink/renderer/platform/graphics/image_observer.h"
  #include "third_party/blink/renderer/platform/graphics/paint/paint_image.h"
  #include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h"
 +#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
- #include "third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h"
  #include "third_party/skia/include/core/SkCanvas.h"
  #include "third_party/skia/include/core/SkImage.h"
  #include "third_party/skia/include/core/SkPaint.h"
@@ -462,16 +461,15 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
  #include "v8/include/v8.h"
  
  namespace blink {
-@@ -141,10 +145,165 @@ bool StaticBitmapImage::ConvertToArrayBufferContents(
+@@ -117,9 +121,164 @@ bool StaticBitmapImage::CopyToByteArray(
    DCHECK(read_pixels_successful ||
           !sk_image->bounds().intersect(SkIRect::MakeXYWH(
               rect.X(), rect.Y(), info.width(), info.height())));
 +
-+  if (RuntimeEnabledFeatures::FingerprintingCanvasImageDataNoiseEnabled()) {
-+    ShuffleSubchannelColorData(result.Data(), info, rect.X(), rect.Y());
++  if (read_pixels_successful && RuntimeEnabledFeatures::FingerprintingCanvasImageDataNoiseEnabled()) {
++    ShuffleSubchannelColorData(dst.data(), info, rect.X(), rect.Y());
 +  }
 +
-   result.Transfer(dest_contents);
    return true;
  }
  
@@ -631,7 +629,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
 diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h b/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
 --- a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
 +++ b/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
-@@ -44,6 +44,8 @@ class PLATFORM_EXPORT StaticBitmapImage : public Image {
+@@ -30,6 +30,8 @@ class PLATFORM_EXPORT StaticBitmapImage : public Image {
    static scoped_refptr<StaticBitmapImage> Create(sk_sp<SkData> data,
                                                   const SkImageInfo&);
  
@@ -643,7 +641,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
-@@ -683,6 +683,15 @@
+@@ -714,6 +714,15 @@
        name: "FetchMetadataDestination",
        status: "experimental"
      },

+ 1 - 1
build/patches/Never-fetch-popular-sites.patch

@@ -9,7 +9,7 @@ Subject: Never fetch popular sites
 diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc
 --- a/components/ntp_tiles/popular_sites_impl.cc
 +++ b/components/ntp_tiles/popular_sites_impl.cc
-@@ -283,6 +283,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
+@@ -275,6 +275,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
    DCHECK(!callback_);
    callback_ = callback;
  

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

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

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

@@ -9,7 +9,7 @@ Subject: Open YouTube links in Bromite
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
-@@ -402,6 +402,7 @@ public class ExternalNavigationHandler {
+@@ -403,6 +403,7 @@ public class ExternalNavigationHandler {
                          Uri.parse(WebView.SCHEME_TEL
                                  + params.getUrl().substring(WTAI_MC_URL_PREFIX.length()))),
                  false);
@@ -17,7 +17,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/Ext
          if (DEBUG) Log.i(TAG, "wtai:// link handled");
          RecordUserAction.record("Android.PhoneIntent");
          return true;
-@@ -745,6 +746,13 @@ public class ExternalNavigationHandler {
+@@ -746,6 +747,13 @@ public class ExternalNavigationHandler {
              return OverrideUrlLoadingResult.OVERRIDE_WITH_ASYNC_ACTION;
          }
  

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

@@ -2,12 +2,11 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com>
 Date: Sat, 28 Apr 2018 08:30:26 +0200
 Subject: Reduce HTTP headers in DoH requests to bare minimum
 
-Serve DoH requests with maximum priority.
 ---
  net/base/load_flags_list.h              |  9 +++++++++
- net/dns/dns_transaction.cc              |  3 ++-
+ net/dns/dns_transaction.cc              |  1 +
  net/url_request/url_request_http_job.cc | 16 +++++++++++-----
- 3 files changed, 22 insertions(+), 6 deletions(-)
+ 3 files changed, 21 insertions(+), 5 deletions(-)
 
 diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
 --- a/net/base/load_flags_list.h
@@ -28,7 +27,7 @@ diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/net/dns/dns_transaction.cc
-@@ -403,6 +403,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
+@@ -405,6 +405,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
      // perspective to prevent the client from sending AIA requests).
      request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE |
                             LOAD_BYPASS_PROXY |
@@ -36,19 +35,10 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
                             LOAD_DISABLE_CERT_NETWORK_FETCHES);
      request_->set_allow_credentials(false);
    }
-@@ -1004,7 +1005,7 @@ class DnsTransactionImpl : public DnsTransaction,
-         had_tcp_attempt_(false),
-         first_server_index_(0),
-         url_request_context_(url_request_context),
--        request_priority_(DEFAULT_PRIORITY) {
-+        request_priority_(MAXIMUM_PRIORITY) {
-     DCHECK(session_.get());
-     DCHECK(!hostname_.empty());
-     DCHECK(!callback_.is_null());
 diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
 --- a/net/url_request/url_request_http_job.cc
 +++ b/net/url_request/url_request_http_job.cc
-@@ -354,6 +354,7 @@ void URLRequestHttpJob::Start() {
+@@ -271,6 +271,7 @@ void URLRequestHttpJob::Start() {
    // plugin could set a referrer although sending the referrer is inhibited.
    request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
  
@@ -56,7 +46,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
    // Our consumer should have made sure that this is a safe referrer. See for
    // instance WebCore::FrameLoader::HideReferrer.
    if (referrer.is_valid()) {
-@@ -369,11 +370,14 @@ void URLRequestHttpJob::Start() {
+@@ -286,11 +287,14 @@ void URLRequestHttpJob::Start() {
      request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
                                            referer_value);
    }
@@ -71,7 +61,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
  
    AddExtraHeaders();
    AddCookieHeaderAndStart();
-@@ -588,10 +592,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -505,10 +509,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
      } else {
        // Advertise "br" encoding only if transferred data is opaque to proxy.
        bool advertise_brotli = false;
@@ -88,7 +78,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
          }
        }
  
-@@ -609,7 +615,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -526,7 +532,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
      }
    }
  

+ 96 - 82
build/patches/Remove-SMS-integration.patch

@@ -3,102 +3,116 @@ Date: Sun, 3 Nov 2019 08:22:29 +0100
 Subject: Remove SMS integration
 
 ---
- content/public/android/BUILD.gn               |  2 -
- .../content/browser/sms/Wrappers.java         | 74 -------------------
- 2 files changed, 76 deletions(-)
- delete mode 100644 content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
+ .../content/browser/sms/SmsReceiver.java      | 29 +++----------------
+ .../content/browser/sms/Wrappers.java         | 11 +------
+ 2 files changed, 5 insertions(+), 35 deletions(-)
 
-diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
---- a/content/public/android/BUILD.gn
-+++ b/content/public/android/BUILD.gn
-@@ -232,8 +232,6 @@ android_library("content_java") {
-     "java/src/org/chromium/content/browser/selection/SmartSelectionClient.java",
-     "java/src/org/chromium/content/browser/selection/SmartSelectionMetricsLogger.java",
-     "java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java",
--    "java/src/org/chromium/content/browser/sms/SmsReceiver.java",
--    "java/src/org/chromium/content/browser/sms/Wrappers.java",
-     "java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java",
-     "java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java",
-     "java/src/org/chromium/content/common/ContentSwitchUtils.java",
-diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
-deleted file mode 100644
---- a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
-+++ /dev/null
-@@ -1,74 +0,0 @@
--// Copyright 2019 The Chromium Authors. All rights reserved.
--// Use of this source code is governed by a BSD-style license that can be
--// found in the LICENSE file.
+diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsReceiver.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsReceiver.java
+--- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsReceiver.java
++++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsReceiver.java
+@@ -11,11 +11,6 @@ import android.content.IntentFilter;
+ 
+ import androidx.annotation.VisibleForTesting;
+ 
+-import com.google.android.gms.auth.api.phone.SmsRetriever;
+-import com.google.android.gms.common.api.CommonStatusCodes;
+-import com.google.android.gms.common.api.Status;
+-import com.google.android.gms.tasks.Task;
 -
--package org.chromium.content.browser.sms;
+ import org.chromium.base.ContextUtils;
+ import org.chromium.base.Log;
+ import org.chromium.base.annotations.CalledByNative;
+@@ -42,18 +37,6 @@ public class SmsReceiver extends BroadcastReceiver {
+         mSmsProviderAndroid = smsProviderAndroid;
+ 
+         mContext = new Wrappers.SmsReceiverContext(ContextUtils.getApplicationContext());
 -
--import android.content.BroadcastReceiver;
--import android.content.Context;
--import android.content.ContextWrapper;
--import android.content.Intent;
--import android.content.IntentFilter;
+-        // A broadcast receiver is registered upon the creation of this class
+-        // which happens when the SMS Retriever 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.
+-        if (DEBUG) Log.d(TAG, "Registering intent filters.");
+-        IntentFilter filter = new IntentFilter();
+-        filter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);
+-        mContext.registerReceiver(this, filter);
+     }
+ 
+     @CalledByNative
+@@ -77,7 +60,7 @@ public class SmsReceiver extends BroadcastReceiver {
+             return;
+         }
+ 
+-        if (!SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
++/*        if (!SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
+             return;
+         }
+ 
+@@ -104,22 +87,18 @@ public class SmsReceiver extends BroadcastReceiver {
+                 if (DEBUG) Log.d(TAG, "Timeout");
+                 SmsReceiverJni.get().onTimeout(mSmsProviderAndroid);
+                 break;
+-        }
++        } */
+     }
+ 
+     @CalledByNative
+     private void listen() {
+-        Wrappers.SmsRetrieverClientWrapper client = getClient();
+-        Task<Void> task = client.startSmsRetriever();
 -
+-        if (DEBUG) Log.d(TAG, "Installed task");
+     }
+ 
+     private Wrappers.SmsRetrieverClientWrapper getClient() {
+-        if (mClient != null) {
++/*        if (mClient != null) {
+             return mClient;
+         }
+-        mClient = new Wrappers.SmsRetrieverClientWrapper(SmsRetriever.getClient(mContext));
++        mClient = new Wrappers.SmsRetrieverClientWrapper(SmsRetriever.getClient(mContext)); */
+         return mClient;
+     }
+ 
+diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
+--- a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
++++ b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
+@@ -10,9 +10,6 @@ import android.content.ContextWrapper;
+ import android.content.Intent;
+ import android.content.IntentFilter;
+ 
 -import com.google.android.gms.auth.api.phone.SmsRetrieverClient;
 -import com.google.android.gms.tasks.Task;
 -
--class Wrappers {
--    // Prevent instantiation.
--    private Wrappers() {}
--
--    /**
--     * Wraps com.google.android.gms.auth.api.phone.SmsRetrieverClient.
--     */
--    static class SmsRetrieverClientWrapper {
+ class Wrappers {
+     // Prevent instantiation.
+     private Wrappers() {}
+@@ -21,11 +18,9 @@ class Wrappers {
+      * Wraps com.google.android.gms.auth.api.phone.SmsRetrieverClient.
+      */
+     static class SmsRetrieverClientWrapper {
 -        private final SmsRetrieverClient mSmsRetrieverClient;
--        private SmsReceiverContext mContext;
--
+         private SmsReceiverContext mContext;
+ 
 -        public SmsRetrieverClientWrapper(SmsRetrieverClient smsRetrieverClient) {
 -            mSmsRetrieverClient = smsRetrieverClient;
--        }
--
--        public void setContext(SmsReceiverContext context) {
--            mContext = context;
--        }
--
--        public SmsReceiverContext getContext() {
--            return mContext;
--        }
++        public SmsRetrieverClientWrapper() {
+         }
+ 
+         public void setContext(SmsReceiverContext context) {
+@@ -35,10 +30,6 @@ class Wrappers {
+         public SmsReceiverContext getContext() {
+             return mContext;
+         }
 -
 -        public Task<Void> startSmsRetriever() {
 -            return mSmsRetrieverClient.startSmsRetriever();
 -        }
--    }
--
--    /**
--     * Extends android.content.ContextWrapper to store and retrieve the
--     * registered BroadcastReceiver.
--     */
--    static class SmsReceiverContext extends ContextWrapper {
--        private BroadcastReceiver mReceiver;
--
--        public SmsReceiverContext(Context context) {
--            super(context);
--        }
--
--        public BroadcastReceiver getRegisteredReceiver() {
--            return mReceiver;
--        }
--
--        // ---------------------------------------------------------------------
--        // Context overrides:
--
--        @Override
--        public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
--            mReceiver = receiver;
--            return super.registerReceiver(receiver, filter);
--        }
--
--        @Override
--        public void unregisterReceiver(BroadcastReceiver receiver) {
--            mReceiver = null;
--            super.unregisterReceiver(receiver);
--        }
--    }
--}
+     }
+ 
+     /**
 -- 
 2.17.1
 

+ 0 - 46
build/patches/Remove-background-sync-and-translate-menu-options.patch

@@ -1,46 +0,0 @@
-From: Serg <serg.zhukovsky@gmail.com>
-Date: Wed, 22 Mar 2017 19:10:30 -0400
-Subject: Remove background sync and translate menu options
-
----
- chrome/android/java/res/xml/site_settings_preferences.xml     | 4 ----
- .../browser/preferences/website/SiteSettingsPreferences.java  | 3 +--
- 2 files changed, 1 insertion(+), 6 deletions(-)
-
-diff --git a/chrome/android/java/res/xml/site_settings_preferences.xml b/chrome/android/java/res/xml/site_settings_preferences.xml
---- a/chrome/android/java/res/xml/site_settings_preferences.xml
-+++ b/chrome/android/java/res/xml/site_settings_preferences.xml
-@@ -49,10 +49,6 @@
-     <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
-         android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
-         android:key="ads" />
--    <!-- Background sync -->
--    <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
--        android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
--        android:key="background_sync" />
-     <!-- Automatic Downloads -->
-     <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
-         android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
-@@ -72,7 +72,7 @@ public class SiteSettingsPreferences
-             // The Media sub-menu only contains Protected Content and Autoplay, so remove all other
-             // menus.
-             for (@Type int i = 0; i < Type.NUM_ENTRIES; i++) {
--                if (i == Type.AUTOPLAY || i == Type.PROTECTED_MEDIA) continue;
-+                if (i == Type.AUTOPLAY || i == Type.PROTECTED_MEDIA || i == Type.BACKGROUND_SYNC) continue;
-                 getPreferenceScreen().removePreference(findPreference(i));
-             }
-             getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
-@@ -106,7 +106,6 @@ public class SiteSettingsPreferences
-                 websitePrefs.add(Type.ADS);
-             }
-             websitePrefs.add(Type.AUTOMATIC_DOWNLOADS);
--            websitePrefs.add(Type.BACKGROUND_SYNC);
-             CommandLine commandLine = CommandLine.getInstance();
-             if (commandLine.hasSwitch(ContentSwitches.ENABLE_EXPERIMENTAL_WEB_PLATFORM_FEATURES)) {
-                 websitePrefs.add(Type.BLUETOOTH_SCANNING);
--- 
-2.17.1
-

+ 8 - 8
build/patches/Remove-dependency-on-com.google.android.gms.auth.patch

@@ -16,7 +16,7 @@ Subject: Remove dependency on com.google.android.gms.auth
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -258,7 +258,6 @@ android_library("chrome_java") {
+@@ -216,7 +216,6 @@ android_library("chrome_java") {
      ":thumbnail_cache_entry_proto_java",
      ":update_proto_java",
      ":usage_stats_proto_java",
@@ -27,7 +27,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/components/signin/core/browser/android/BUILD.gn b/components/signin/core/browser/android/BUILD.gn
 --- a/components/signin/core/browser/android/BUILD.gn
 +++ b/components/signin/core/browser/android/BUILD.gn
-@@ -16,7 +16,6 @@ generate_jni("jni_headers") {
+@@ -15,7 +15,6 @@ generate_jni("jni_headers") {
  
  android_library("java") {
    deps = [
@@ -38,9 +38,9 @@ diff --git a/components/signin/core/browser/android/BUILD.gn b/components/signin
 diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
 --- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
 +++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
-@@ -4,9 +4,6 @@
+@@ -6,9 +6,6 @@ package org.chromium.components.signin;
  
- package org.chromium.components.signin;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.common.ConnectionResult;
 -import com.google.android.gms.common.GoogleApiAvailability;
@@ -48,7 +48,7 @@ diff --git a/components/signin/core/browser/android/java/src/org/chromium/compon
  import org.chromium.base.ContextUtils;
  import org.chromium.base.Log;
  import org.chromium.base.StrictModeContext;
-@@ -47,12 +44,7 @@ public class AccountIdProvider {
+@@ -48,12 +45,7 @@ public class AccountIdProvider {
       * Google Play services is available.
       */
      public boolean canBeUsed() {
@@ -97,7 +97,7 @@ diff --git a/components/signin/core/browser/android/java/src/org/chromium/compon
 diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
 --- a/content/public/android/BUILD.gn
 +++ b/content/public/android/BUILD.gn
-@@ -52,7 +52,6 @@ action("generate_sandboxed_service_srcjar") {
+@@ -53,7 +53,6 @@ action("generate_sandboxed_service_srcjar") {
  android_library("content_java") {
    deps = [
      ":content_java_resources",
@@ -108,7 +108,7 @@ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
 diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 --- a/content/test/BUILD.gn
 +++ b/content/test/BUILD.gn
-@@ -2444,7 +2444,6 @@ if (is_android) {
+@@ -2348,7 +2348,6 @@ if (is_android) {
      testonly = true
      java_files = content_java_sources_needing_jni
      deps = [
@@ -119,7 +119,7 @@ diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -802,50 +802,6 @@ android_aar_prebuilt("com_android_support_viewpager_java") {
+@@ -820,50 +820,6 @@ android_aar_prebuilt("com_android_support_viewpager_java") {
    ]
  }
  

+ 14 - 14
build/patches/Remove-dependency-on-com.google.android.gms.cast.patch

@@ -29,7 +29,7 @@ Subject: Remove dependency on com.google.android.gms.cast
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -260,8 +260,6 @@ android_library("chrome_java") {
+@@ -218,8 +218,6 @@ android_library("chrome_java") {
      ":usage_stats_proto_java",
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
@@ -38,7 +38,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "$google_play_services_package:google_play_services_tasks_java",
      "//base:base_java",
      "//base:jni_java",
-@@ -654,8 +652,6 @@ junit_binary("chrome_junit_tests") {
+@@ -618,8 +616,6 @@ junit_binary("chrome_junit_tests") {
      ":partner_location_descriptor_proto_java",
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
@@ -47,7 +47,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:base_junit_test_support",
-@@ -759,8 +755,6 @@ android_library("chrome_test_java") {
+@@ -730,8 +726,6 @@ android_library("chrome_test_java") {
      ":partner_location_descriptor_proto_java",
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
@@ -59,7 +59,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/features/media_router/BUILD.gn b/chrome/android/features/media_router/BUILD.gn
 --- a/chrome/android/features/media_router/BUILD.gn
 +++ b/chrome/android/features/media_router/BUILD.gn
-@@ -11,8 +11,6 @@ android_library("java") {
+@@ -12,8 +12,6 @@ android_library("java") {
      ":java_resources",
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
@@ -804,9 +804,9 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
 diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/caf/CafMessageHandler.java b/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/caf/CafMessageHandler.java
 --- a/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/caf/CafMessageHandler.java
 +++ b/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/caf/CafMessageHandler.java
-@@ -11,10 +11,6 @@ import android.support.v4.util.ArrayMap;
- import android.text.TextUtils;
- import android.util.SparseArray;
+@@ -13,10 +13,6 @@ import android.util.SparseArray;
+ 
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.cast.ApplicationMetadata;
 -import com.google.android.gms.common.api.PendingResult;
@@ -815,7 +815,7 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
-@@ -344,49 +340,7 @@ public class CafMessageHandler {
+@@ -345,49 +341,7 @@ public class CafMessageHandler {
              final int sequenceNumber) throws JSONException {
          if (volumeMessage == null) return false;
          if (!mSessionController.isConnected()) return false;
@@ -866,7 +866,7 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
      }
  
      @VisibleForTesting
-@@ -674,19 +628,11 @@ public class CafMessageHandler {
+@@ -675,19 +629,11 @@ public class CafMessageHandler {
          try {
              // "volume" is a part of "receiver" initialized below.
              JSONObject jsonVolume = new JSONObject();
@@ -886,7 +886,7 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
              jsonReceiver.put("displayStatus", null);
              jsonReceiver.put("receiverType", "cast");
  
-@@ -699,23 +645,14 @@ public class CafMessageHandler {
+@@ -700,23 +646,14 @@ public class CafMessageHandler {
  
              JSONObject jsonMessage = new JSONObject();
              jsonMessage.put("sessionId", mSessionController.getSessionId());
@@ -912,7 +912,7 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
  
              return jsonMessage.toString();
          } catch (JSONException e) {
-@@ -796,32 +733,6 @@ public class CafMessageHandler {
+@@ -797,32 +734,6 @@ public class CafMessageHandler {
      boolean sendStringCastMessage(
              String message, String namespace, String clientId, int sequenceNumber) {
          if (!mSessionController.isConnected()) return false;
@@ -1437,7 +1437,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <!-- Note: All activities directly or indirectly derived from ChromeActivity
               must specify android:hardwareAccelerated="false".
  
-@@ -783,16 +777,6 @@ by a child template that "extends" this file.
+@@ -784,16 +778,6 @@ by a child template that "extends" this file.
              </intent-filter>
          </activity>
  
@@ -1454,7 +1454,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <!-- This activity is used to restart the main Chrome process.  Should never be exported. -->
          <activity android:name="org.chromium.chrome.browser.BrowserRestartActivity"
              android:launchMode="singleInstance"
-@@ -1195,18 +1179,6 @@ android:value="true" />
+@@ -1217,18 +1201,6 @@ android:value="true" />
          {% endif %}
  
          {% block extra_application_definitions %}
@@ -1487,7 +1487,7 @@ diff --git a/chrome/test/android/cast_emulator/BUILD.gn b/chrome/test/android/ca
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -828,39 +828,6 @@ android_aar_prebuilt("google_play_services_basement_java") {
+@@ -846,39 +846,6 @@ android_aar_prebuilt("google_play_services_basement_java") {
    input_jars_paths = [ "$android_sdk/optional/org.apache.http.legacy.jar" ]
  }
  

+ 32 - 32
build/patches/Remove-dependency-on-com.google.android.gms.common-auth-signin-dynamic-com.google.android.gms.tasks.patch

@@ -17,7 +17,7 @@ Subject: Remove dependency on
  .../gcore/ChromeGoogleApiClientImpl.java      | 25 +-----
  .../browser/gcore/GoogleApiClientHelper.java  | 82 +------------------
  .../browser/omaha/UpdateStatusProvider.java   | 10 +--
- .../preferences/PreferencesLauncher.java      | 20 +----
+ .../PasswordManagerLauncher.java              | 20 +----
  chrome/test/android/BUILD.gn                  |  2 -
  components/background_task_scheduler/BUILD.gn | 10 ---
  .../signin/core/browser/android/BUILD.gn      |  2 -
@@ -37,7 +37,7 @@ Subject: Remove dependency on
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -258,9 +258,6 @@ android_library("chrome_java") {
+@@ -216,9 +216,6 @@ android_library("chrome_java") {
      ":thumbnail_cache_entry_proto_java",
      ":update_proto_java",
      ":usage_stats_proto_java",
@@ -47,16 +47,16 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:jni_java",
      "//chrome/android/features/keyboard_accessory:public_java",
-@@ -650,8 +647,6 @@ junit_binary("chrome_junit_tests") {
+@@ -614,8 +611,6 @@ junit_binary("chrome_junit_tests") {
+     ":chrome_app_java_resources",
      ":chrome_java",
-     ":chrome_junit_test_support",
      ":partner_location_descriptor_proto_java",
 -    "$google_play_services_package:google_play_services_base_java",
 -    "$google_play_services_package:google_play_services_basement_java",
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:base_junit_test_support",
-@@ -753,9 +748,6 @@ android_library("chrome_test_java") {
+@@ -724,9 +719,6 @@ android_library("chrome_test_java") {
      ":chrome_public_test_apk_resources",
      ":chrome_test_util_java",
      ":partner_location_descriptor_proto_java",
@@ -69,7 +69,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/features/media_router/BUILD.gn b/chrome/android/features/media_router/BUILD.gn
 --- a/chrome/android/features/media_router/BUILD.gn
 +++ b/chrome/android/features/media_router/BUILD.gn
-@@ -9,8 +9,6 @@ import("//chrome/common/features.gni")
+@@ -10,8 +10,6 @@ import("//chrome/common/features.gni")
  android_library("java") {
    deps = [
      ":java_resources",
@@ -81,9 +81,9 @@ diff --git a/chrome/android/features/media_router/BUILD.gn b/chrome/android/feat
 diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java b/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
 --- a/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
 +++ b/chrome/android/features/media_router/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
-@@ -8,9 +8,6 @@ import android.support.v7.media.MediaRouter;
- 
+@@ -9,9 +9,6 @@ import android.support.v7.media.MediaRouter;
  import androidx.annotation.Nullable;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.common.ConnectionResult;
 -import com.google.android.gms.common.GoogleApiAvailability;
@@ -105,7 +105,7 @@ diff --git a/chrome/android/features/media_router/java/src/org/chromium/chrome/b
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 +++ b/chrome/android/java/AndroidManifest.xml
-@@ -840,15 +840,6 @@ by a child template that "extends" this file.
+@@ -858,15 +858,6 @@ by a child template that "extends" this file.
              </intent-filter>
            </activity>
  
@@ -124,16 +124,16 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
-@@ -13,9 +13,6 @@ import android.view.View;
- 
+@@ -14,9 +14,6 @@ import android.view.View;
  import androidx.annotation.Nullable;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.common.ConnectionResult;
 -import com.google.android.gms.common.GoogleApiAvailability;
 -
  import org.chromium.base.Callback;
  import org.chromium.base.ContextUtils;
- import org.chromium.base.VisibleForTesting;
+ import org.chromium.base.annotations.CalledByNative;
 @@ -380,16 +377,7 @@ public abstract class AppHooks {
       * same as {@link GoogleApiAvailability#isGooglePlayServicesAvailable()}.
       */
@@ -203,8 +203,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/component_updat
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
-@@ -14,9 +14,6 @@ import android.text.TextUtils;
- 
+@@ -15,9 +15,6 @@ import android.text.TextUtils;
+ import androidx.annotation.VisibleForTesting;
  import androidx.annotation.WorkerThread;
  
 -import com.google.android.gms.common.ConnectionResult;
@@ -501,16 +501,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gcore/GoogleApi
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java
-@@ -20,8 +20,6 @@ import androidx.annotation.IntDef;
- import androidx.annotation.NonNull;
+@@ -21,8 +21,6 @@ import androidx.annotation.NonNull;
  import androidx.annotation.Nullable;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.common.GooglePlayServicesUtil;
 -
  import org.chromium.base.ActivityState;
  import org.chromium.base.ApplicationStatus;
  import org.chromium.base.ApplicationStatus.ActivityStateListener;
-@@ -464,13 +462,7 @@ public class UpdateStatusProvider implements ActivityStateListener {
+@@ -465,13 +463,7 @@ public class UpdateStatusProvider implements ActivityStateListener {
          }
  
          private boolean isGooglePlayStoreAvailable(Context context) {
@@ -525,19 +525,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateSta
          }
  
          @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
-@@ -13,8 +13,6 @@ import android.support.v4.app.Fragment;
- 
- import androidx.annotation.Nullable;
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
+@@ -7,8 +7,6 @@ package org.chromium.chrome.browser.password_manager;
+ import android.app.Activity;
+ import android.os.Build;
  
 -import com.google.android.gms.common.ConnectionResult;
 -
  import org.chromium.base.annotations.CalledByNative;
  import org.chromium.base.metrics.RecordHistogram;
- import org.chromium.base.metrics.RecordUserAction;
-@@ -190,22 +188,6 @@ public class PreferencesLauncher {
+ import org.chromium.chrome.browser.AppHooks;
+@@ -89,22 +87,6 @@ public class PasswordManagerLauncher {
      }
  
      private static boolean tryShowingTheGooglePasswordManager(Activity activity) {
@@ -564,7 +564,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
 diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn
 --- a/chrome/test/android/BUILD.gn
 +++ b/chrome/test/android/BUILD.gn
-@@ -175,8 +175,6 @@ android_library("chrome_java_test_support") {
+@@ -187,8 +187,6 @@ android_library("chrome_java_test_support") {
      "javatests/src/org/chromium/chrome/test/util/WaitForFocusHelper.java",
    ]
    deps = [
@@ -610,7 +610,7 @@ diff --git a/components/background_task_scheduler/BUILD.gn b/components/backgrou
 diff --git a/components/signin/core/browser/android/BUILD.gn b/components/signin/core/browser/android/BUILD.gn
 --- a/components/signin/core/browser/android/BUILD.gn
 +++ b/components/signin/core/browser/android/BUILD.gn
-@@ -16,8 +16,6 @@ generate_jni("jni_headers") {
+@@ -15,8 +15,6 @@ generate_jni("jni_headers") {
  
  android_library("java") {
    deps = [
@@ -642,7 +642,7 @@ diff --git a/components/signin/core/browser/android/java/src/org/chromium/compon
 diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
 --- a/content/public/android/BUILD.gn
 +++ b/content/public/android/BUILD.gn
-@@ -52,9 +52,6 @@ action("generate_sandboxed_service_srcjar") {
+@@ -53,9 +53,6 @@ action("generate_sandboxed_service_srcjar") {
  android_library("content_java") {
    deps = [
      ":content_java_resources",
@@ -655,7 +655,7 @@ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
 diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 --- a/content/test/BUILD.gn
 +++ b/content/test/BUILD.gn
-@@ -2444,9 +2444,6 @@ if (is_android) {
+@@ -2348,9 +2348,6 @@ if (is_android) {
      testonly = true
      java_files = content_java_sources_needing_jni
      deps = [
@@ -668,7 +668,7 @@ diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
 diff --git a/device/BUILD.gn b/device/BUILD.gn
 --- a/device/BUILD.gn
 +++ b/device/BUILD.gn
-@@ -387,8 +387,6 @@ if (is_android) {
+@@ -390,8 +390,6 @@ if (is_android) {
    junit_binary("device_junit_tests") {
      java_files = [ "gamepad/android/junit/src/org/chromium/device/gamepad/GamepadMappingsTest.java" ]
      deps = [
@@ -738,7 +738,7 @@ diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -802,44 +802,6 @@ android_aar_prebuilt("com_android_support_viewpager_java") {
+@@ -820,44 +820,6 @@ android_aar_prebuilt("com_android_support_viewpager_java") {
    ]
  }
  
@@ -804,8 +804,8 @@ diff --git a/third_party/robolectric/BUILD.gn b/third_party/robolectric/BUILD.gn
 -    "$google_play_services_package:google_play_services_base_java",
 -    "$google_play_services_package:google_play_services_basement_java",
      "//third_party/android_deps:android_support_v4_java",
+     "//third_party/android_deps:com_google_guava_guava_java",
      "//third_party/gson:gson_java",
-     "//third_party/guava:guava_java",
 -- 
 2.17.1
 

+ 22 - 22
build/patches/Remove-dependency-on-com.google.android.gms.fido-com.google.android.gms.iid-com.google.android.gms.instantapps-com.google.android.gms.location.patch

@@ -21,7 +21,7 @@ Subject: Remove dependency on com.google.android.gms.fido,
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -262,8 +262,6 @@ android_library("chrome_java") {
+@@ -220,8 +220,6 @@ android_library("chrome_java") {
      "$google_play_services_package:google_play_services_basement_java",
      "$google_play_services_package:google_play_services_cast_framework_java",
      "$google_play_services_package:google_play_services_cast_java",
@@ -30,7 +30,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "$google_play_services_package:google_play_services_tasks_java",
      "//base:base_java",
      "//base:jni_java",
-@@ -658,7 +656,6 @@ junit_binary("chrome_junit_tests") {
+@@ -622,7 +620,6 @@ junit_binary("chrome_junit_tests") {
      "$google_play_services_package:google_play_services_basement_java",
      "$google_play_services_package:google_play_services_cast_framework_java",
      "$google_play_services_package:google_play_services_cast_java",
@@ -38,7 +38,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:base_junit_test_support",
-@@ -764,8 +761,6 @@ android_library("chrome_test_java") {
+@@ -735,8 +732,6 @@ android_library("chrome_test_java") {
      "$google_play_services_package:google_play_services_basement_java",
      "$google_play_services_package:google_play_services_cast_framework_java",
      "$google_play_services_package:google_play_services_cast_java",
@@ -50,7 +50,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
-@@ -641,10 +641,6 @@ public class ExternalNavigationHandler {
+@@ -642,10 +642,6 @@ public class ExternalNavigationHandler {
          if (shouldProxyForInstantApps) {
              RecordHistogram.recordEnumeratedHistogram("Android.InstantApps.DirectInstantAppsIntent",
                      AiaIntent.SERP, AiaIntent.NUM_ENTRIES);
@@ -64,7 +64,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/Ext
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
-@@ -42,36 +42,6 @@ public class InstantAppsHandler {
+@@ -44,36 +44,6 @@ public class InstantAppsHandler {
      // TODO(mariakhomenko): Use system once we roll to O SDK.
      private static final int FLAG_DO_NOT_LAUNCH = 0x00000200;
  
@@ -101,7 +101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
      /** Finch experiment name. */
      private static final String INSTANT_APPS_EXPERIMENT_NAME = "InstantApps";
  
-@@ -123,14 +93,6 @@ public class InstantAppsHandler {
+@@ -125,14 +95,6 @@ public class InstantAppsHandler {
       * @return Whether the given intent is going to open an Instant App.
       */
      public static boolean isIntentToInstantApp(Intent intent) {
@@ -116,7 +116,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
          return false;
      }
  
-@@ -167,13 +129,7 @@ public class InstantAppsHandler {
+@@ -169,13 +131,7 @@ public class InstantAppsHandler {
              sFallbackIntentTimes.record(SystemClock.elapsedRealtime() - startTime);
              intent.removeExtra(INSTANT_APP_START_TIME_EXTRA);
          }
@@ -131,7 +131,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
      }
  
      /**
-@@ -208,14 +164,6 @@ public class InstantAppsHandler {
+@@ -210,14 +166,6 @@ public class InstantAppsHandler {
              return false;
          }
  
@@ -146,7 +146,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
          if (IntentUtils.safeGetBooleanExtra(
                  intent, IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, false)
                  || IntentUtils.safeHasExtra(intent, ShortcutHelper.EXTRA_SOURCE)
-@@ -240,7 +188,6 @@ public class InstantAppsHandler {
+@@ -242,7 +190,6 @@ public class InstantAppsHandler {
          }
  
          Intent callbackIntent = new Intent(intent);
@@ -154,7 +154,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
          callbackIntent.putExtra(INSTANT_APP_START_TIME_EXTRA, startTime);
  
          return tryLaunchingInstantApp(context, intent, isCustomTabsIntent, callbackIntent);
-@@ -343,12 +290,9 @@ public class InstantAppsHandler {
+@@ -345,12 +292,9 @@ public class InstantAppsHandler {
          Intent iaIntent = data.getIntent();
          if (data.getReferrer() != null) {
              iaIntent.putExtra(Intent.EXTRA_REFERRER, data.getReferrer());
@@ -167,7 +167,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/Ins
  
          try {
              appContext.startActivity(iaIntent);
-@@ -394,7 +338,6 @@ public class InstantAppsHandler {
+@@ -396,7 +340,6 @@ public class InstantAppsHandler {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              return info.isInstantAppAvailable;
          } else if (info.activityInfo != null) {
@@ -197,16 +197,16 @@ diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm
 diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
 --- a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
 +++ b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
-@@ -8,8 +8,6 @@ import android.content.Context;
- import android.os.Bundle;
- import android.text.TextUtils;
+@@ -10,8 +10,6 @@ import android.text.TextUtils;
+ 
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.iid.InstanceID;
 -
  import org.chromium.base.ContextUtils;
- import org.chromium.base.VisibleForTesting;
  
-@@ -25,8 +23,6 @@ public class InstanceIDWithSubtype {
+ import java.io.IOException;
+@@ -26,8 +24,6 @@ public class InstanceIDWithSubtype {
      // Must match the private InstanceID.OPTION_SUBTYPE, which is guaranteed to not change.
      private static final String OPTION_SUBTYPE = "subtype";
  
@@ -215,7 +215,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
      /**
       * Cached instances. May be accessed from multiple threads; synchronize on sSubtypeInstancesLock
       */
-@@ -38,10 +34,6 @@ public class InstanceIDWithSubtype {
+@@ -39,10 +35,6 @@ public class InstanceIDWithSubtype {
      @VisibleForTesting
      protected static FakeFactory sFakeFactoryForTesting;
  
@@ -226,7 +226,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
      /**
       * Returns an instance of this class. Unlike {@link InstanceID#getInstance(Context)}, it is not
       * a singleton, but instead a different instance will be returned for each {@code subtype}.
-@@ -57,11 +49,6 @@ public class InstanceIDWithSubtype {
+@@ -58,11 +50,6 @@ public class InstanceIDWithSubtype {
                  if (sFakeFactoryForTesting != null) {
                      existing = sFakeFactoryForTesting.create(subtype);
                  } else {
@@ -238,7 +238,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
                  }
                  sSubtypeInstances.put(subtype, existing);
              }
-@@ -70,35 +57,30 @@ public class InstanceIDWithSubtype {
+@@ -71,35 +58,30 @@ public class InstanceIDWithSubtype {
      }
  
      public String getSubtype() {
@@ -282,7 +282,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
 diff --git a/device/BUILD.gn b/device/BUILD.gn
 --- a/device/BUILD.gn
 +++ b/device/BUILD.gn
-@@ -389,7 +389,6 @@ if (is_android) {
+@@ -392,7 +392,6 @@ if (is_android) {
      deps = [
        "$google_play_services_package:google_play_services_base_java",
        "$google_play_services_package:google_play_services_basement_java",
@@ -328,7 +328,7 @@ diff --git a/services/device/geolocation/android/java/src/org/chromium/device/ge
 -public class LocationProviderGmsCore implements ConnectionCallbacks, OnConnectionFailedListener,
 -                                                LocationListener, LocationProvider {
 +public class LocationProviderGmsCore implements LocationProvider {
-     private static final String TAG = "cr_LocationProvider";
+     private static final String TAG = "LocationProvider";
  
      // Values for the LocationRequest's setInterval for normal and high accuracy, respectively.
      private static final long UPDATE_INTERVAL_MS = 1000;
@@ -454,7 +454,7 @@ diff --git a/services/device/geolocation/android/java/src/org/chromium/device/ge
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -861,64 +861,6 @@ android_aar_prebuilt("google_play_services_cast_framework_java") {
+@@ -879,64 +879,6 @@ android_aar_prebuilt("google_play_services_cast_framework_java") {
    strip_resources = !is_java_debug
  }
  

+ 4 - 4
build/patches/Remove-dependency-on-com.google.android.gms.flags-com.google.android.gms.location.places-com.google.android.gms.stats.patch

@@ -10,8 +10,8 @@ Subject: Remove dependency on com.google.android.gms.flags,
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -1512,55 +1512,6 @@ android_aar_prebuilt("com_android_support_versionedparcelable_java") {
-   ignore_aidl = true
+@@ -1638,55 +1638,6 @@ java_prebuilt("com_github_stephenc_jcip_jcip_annotations_java") {
+   visibility = [ ":*" ]
  }
  
 -# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
@@ -64,8 +64,8 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
 -}
 -
  # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
- java_prebuilt("com_google_code_findbugs_jsr305_java") {
-   jar_path = "libs/com_google_code_findbugs_jsr305/jsr305-1.3.9.jar"
+ java_prebuilt("com_google_auto_auto_common_java") {
+   jar_path = "libs/com_google_auto_auto_common/auto-common-0.10.jar"
 -- 
 2.17.1
 

+ 13 - 13
build/patches/Remove-dependency-on-com.google.android.gms.gcm.patch

@@ -24,7 +24,7 @@ The snippets are already disabled in native codes, this will disable it on Java
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -263,7 +263,6 @@ android_library("chrome_java") {
+@@ -221,7 +221,6 @@ android_library("chrome_java") {
      "$google_play_services_package:google_play_services_cast_framework_java",
      "$google_play_services_package:google_play_services_cast_java",
      "$google_play_services_package:google_play_services_fido_java",
@@ -32,7 +32,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "$google_play_services_package:google_play_services_iid_java",
      "$google_play_services_package:google_play_services_tasks_java",
      "//base:base_java",
-@@ -767,7 +766,6 @@ android_library("chrome_test_java") {
+@@ -738,7 +737,6 @@ android_library("chrome_test_java") {
      "$google_play_services_package:google_play_services_cast_framework_java",
      "$google_play_services_package:google_play_services_cast_java",
      "$google_play_services_package:google_play_services_fido_java",
@@ -40,7 +40,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
      "$google_play_services_package:google_play_services_iid_java",
      "$google_play_services_package:google_play_services_tasks_java",
      "//base:base_java",
-@@ -1543,7 +1541,6 @@ android_library("browser_java_test_support") {
+@@ -1539,7 +1537,6 @@ android_library("browser_java_test_support") {
    ]
    deps = [
      ":chrome_java",
@@ -51,21 +51,21 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
-@@ -6,10 +6,6 @@ package org.chromium.chrome.browser;
+@@ -8,10 +8,6 @@ import android.content.Context;
  
- import android.content.Context;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.gcm.GcmNetworkManager;
 -import com.google.android.gms.gcm.GcmTaskService;
 -import com.google.android.gms.gcm.TaskParams;
 -
  import org.chromium.base.Log;
- import org.chromium.base.VisibleForTesting;
  import org.chromium.base.task.PostTask;
+ import org.chromium.chrome.browser.background_sync.BackgroundSyncBackgroundTaskScheduler;
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
-@@ -35,7 +35,7 @@ public class SnippetsLauncher {
+@@ -36,7 +36,7 @@ public class SnippetsLauncher {
      // If it is non-null then the browser is running.
      private static SnippetsLauncher sInstance;
  
@@ -187,9 +187,9 @@ diff --git a/components/background_task_scheduler/BUILD.gn b/components/backgrou
 diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java
 --- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java
 +++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java
-@@ -6,10 +6,6 @@ package org.chromium.components.background_task_scheduler;
+@@ -8,10 +8,6 @@ import android.os.Build;
  
- import android.os.Build;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.gcm.GcmNetworkManager;
 -import com.google.android.gms.gcm.GcmTaskService;
@@ -198,7 +198,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
  import org.chromium.base.ContextUtils;
  import org.chromium.base.Log;
  import org.chromium.base.ThreadUtils;
-@@ -20,7 +16,7 @@ import java.util.concurrent.TimeUnit;
+@@ -21,7 +17,7 @@ import java.util.concurrent.TimeUnit;
  import java.util.concurrent.atomic.AtomicBoolean;
  
  /** Delegates calls out to various tasks that need to run in the background. */
@@ -207,7 +207,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
      private static final String TAG = "BkgrdTaskGcmTS";
  
      private BackgroundTaskSchedulerGcmNetworkManager.Clock mClock = System::currentTimeMillis;
-@@ -89,63 +85,6 @@ public class BackgroundTaskGcmTaskService extends GcmTaskService {
+@@ -90,63 +86,6 @@ public class BackgroundTaskGcmTaskService extends GcmTaskService {
          }
      }
  
@@ -274,7 +274,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java
 --- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java
 +++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java
-@@ -17,11 +17,7 @@ public final class BackgroundTaskSchedulerFactory {
+@@ -18,11 +18,7 @@ public final class BackgroundTaskSchedulerFactory {
      private static BackgroundTaskFactory sBackgroundTaskFactory;
  
      static BackgroundTaskSchedulerDelegate getSchedulerDelegateForSdk(int sdkInt) {
@@ -321,7 +321,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -875,21 +875,6 @@ android_aar_prebuilt("google_play_services_fido_java") {
+@@ -893,21 +893,6 @@ android_aar_prebuilt("google_play_services_fido_java") {
    strip_drawables = true
  }
  

+ 4 - 4
build/patches/Remove-dependency-on-com.google.android.gms.vision-com.google.android.gms.clearcut-com.google.android.gms.phenotype.patch

@@ -483,7 +483,7 @@ diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detect
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn
-@@ -931,35 +931,6 @@ android_aar_prebuilt("google_play_services_tasks_java") {
+@@ -949,35 +949,6 @@ android_aar_prebuilt("google_play_services_tasks_java") {
    strip_drawables = true
  }
  
@@ -519,8 +519,8 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
  # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
  android_aar_prebuilt("com_google_android_material_material_java") {
    aar_path = "libs/com_google_android_material_material/material-1.0.0-rc02.aar"
-@@ -1541,25 +1512,6 @@ android_aar_prebuilt("com_android_support_versionedparcelable_java") {
-   ignore_aidl = true
+@@ -1667,25 +1638,6 @@ java_prebuilt("com_github_stephenc_jcip_jcip_annotations_java") {
+   visibility = [ ":*" ]
  }
  
 -# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
@@ -545,7 +545,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.
  # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
  android_aar_prebuilt("google_play_services_flags_java") {
    aar_path = "libs/com_google_android_gms_play_services_flags/play-services-flags-15.0.1.aar"
-@@ -1577,24 +1529,6 @@ android_aar_prebuilt("google_play_services_flags_java") {
+@@ -1703,24 +1655,6 @@ android_aar_prebuilt("google_play_services_flags_java") {
    strip_drawables = true
  }
  

+ 3 - 3
build/patches/Remove-dependency-on-com.google.android.play.patch

@@ -14,9 +14,9 @@ Subject: Remove dependency on com.google.android.play
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -378,7 +378,6 @@ android_library("chrome_java") {
+@@ -344,7 +344,6 @@ android_library("chrome_java") {
+     "//third_party/cacheinvalidation:cacheinvalidation_proto_java",
      "//third_party/cct_dynamic_module:cct_dynamic_module_java",
-     "//third_party/feed:feed_lib_proto_java",
      "//third_party/gif_player:gif_player_java",
 -    "//third_party/google_android_play_core:com_google_android_play_core_java",
      "//third_party/jsr-305:jsr_305_javalib",
@@ -471,7 +471,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/Pl
 diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn
 --- a/components/module_installer/android/BUILD.gn
 +++ b/components/module_installer/android/BUILD.gn
-@@ -34,7 +34,6 @@ android_library("module_installer_java") {
+@@ -35,7 +35,6 @@ android_library("module_installer_java") {
      "//base:base_java",
      "//base:jni_java",
      "//components/crash/android:java",

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

@@ -6,14 +6,14 @@ Subject: Remove help menu item
  chrome/android/java/res/menu/main_menu.xml               | 2 --
  .../src/org/chromium/chrome/browser/ChromeActivity.java  | 9 ---------
  .../org/chromium/chrome/browser/KeyboardShortcuts.java   | 3 ---
- .../chrome/browser/customtabs/CustomTabActivity.java     | 2 +-
+ .../chrome/browser/customtabs/BaseCustomTabActivity.java | 2 +-
  .../browser/directactions/MenuDirectActionHandler.java   | 2 --
  5 files changed, 1 insertion(+), 17 deletions(-)
 
 diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
 --- a/chrome/android/java/res/menu/main_menu.xml
 +++ b/chrome/android/java/res/menu/main_menu.xml
-@@ -76,8 +76,6 @@
+@@ -81,8 +81,6 @@
              android:icon="@drawable/reader_mode_prefs_icon" />
          <item android:id="@+id/preferences_id"
              android:title="@string/menu_preferences" />
@@ -25,7 +25,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
-@@ -2143,15 +2143,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2114,15 +2114,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  
@@ -38,9 +38,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
 -            return true;
 -        }
 -
-         // All the code below assumes currentTab is not null, so return early if it is null.
-         if (currentTab == null) {
-             return false;
+         if (id == R.id.open_history_menu_id) {
+             // 'currentTab' could only be null when opening history from start surface, which is
+             // not available on tablet.
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
@@ -54,17 +54,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcu
              }
          }
  
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
-@@ -441,7 +441,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+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
+@@ -125,7 +125,7 @@ public abstract class BaseCustomTabActivity<C extends ChromeActivityComponent>
+     @Override
      public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
          // Disable creating new tabs, bookmark, history, print, help, focus_url, etc.
-         if (id == R.id.focus_url_bar || id == R.id.all_bookmarks_menu_id
--                || id == R.id.help_id || id == R.id.recent_tabs_menu_id
-+                || id == R.id.recent_tabs_menu_id
-                 || id == R.id.new_incognito_tab_menu_id || id == R.id.new_tab_menu_id
-                 || id == R.id.open_history_menu_id) {
+-        if (id == R.id.focus_url_bar || id == R.id.all_bookmarks_menu_id || id == R.id.help_id
++        if (id == R.id.focus_url_bar || id == R.id.all_bookmarks_menu_id
+                 || id == R.id.recent_tabs_menu_id || id == R.id.new_incognito_tab_menu_id
+                 || id == R.id.new_tab_menu_id || id == R.id.open_history_menu_id) {
              return true;
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java

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

@@ -20,25 +20,23 @@ ld.lld: error: undefined symbol: notifier::NotifierOptions::NotifierOptions()
  chrome/android/java/AndroidManifest.xml       | 28 ------
  .../android/java/res/xml/main_preferences.xml | 14 ---
  .../chrome/browser/ChromeActivity.java        | 34 -------
- .../browser/preferences/MainPreferences.java  | 86 +-----------------
+ .../browser/settings/MainPreferences.java     | 86 +-----------------
  .../DataReductionPreferenceFragment.java      | 24 ++---
- .../privacy/PrivacyPreferences.java           |  7 --
+ .../settings/privacy/PrivacyPreferences.java  |  7 --
  .../sync/SyncAndServicesPreferences.java      |  8 --
  .../chrome/browser/signin/SigninManager.java  | 71 ++-------------
- .../java/strings/android_chrome_strings.grd   | 18 ----
  .../android/signin/signin_manager_android.cc  |  1 -
- .../impl/invalidation_service_util.cc         | 21 -----
- .../impl/invalidation_service_util.h          |  6 +-
+ .../strings/android_chrome_strings.grd        | 18 ----
  .../signin/SystemAccountManagerDelegate.java  | 38 +-------
  .../components/sync/AndroidSyncSettings.java  | 24 +----
  .../net/HttpNegotiateAuthenticator.java       | 88 +------------------
  .../chromoting/base/OAuthTokenFetcher.java    |  2 -
- 17 files changed, 26 insertions(+), 447 deletions(-)
+ 15 files changed, 25 insertions(+), 421 deletions(-)
 
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -1136,8 +1136,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
+@@ -1114,8 +1114,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
    resources = [
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/launchershortcuts.xml",
@@ -83,7 +81,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
      {% block extra_uses_permissions %}
      {% endblock %}
  
-@@ -960,16 +952,6 @@ by a child template that "extends" this file.
+@@ -978,16 +970,6 @@ by a child template that "extends" this file.
                  android:resource="@xml/file_paths" />
          </provider>
  
@@ -100,7 +98,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <!-- Broadcast receiver that will be notified of account changes -->
          <receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver">
              <intent-filter>
-@@ -1077,16 +1059,6 @@ by a child template that "extends" this file.
+@@ -1095,16 +1077,6 @@ by a child template that "extends" this file.
          <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
              android:exported="false"/>
  
@@ -128,7 +126,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
 -        android:key="account_section"
 -        android:order="0"
 -        android:title="@string/prefs_section_account"/>
--    <org.chromium.chrome.browser.preferences.sync.SignInPreference
+-    <org.chromium.chrome.browser.settings.sync.SignInPreference
 -        android:key="sign_in"
 -        android:order="1"
 -        android:title="@string/sign_in_to_chrome"/>
@@ -140,27 +138,27 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
          android:key="languages"
          android:order="16"
          android:title="@string/prefs_languages"/>
--    <org.chromium.chrome.browser.preferences.ChromeBasePreference
--        android:fragment="org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment"
+-    <org.chromium.chrome.browser.settings.ChromeBasePreference
+-        android:fragment="org.chromium.chrome.browser.settings.datareduction.DataReductionPreferenceFragment"
 -        android:key="data_reduction"
 -        android:order="17"
 -        android:title="@string/data_reduction_title_lite_mode"/>
-     <org.chromium.chrome.browser.preferences.ChromeBasePreference
-         android:fragment="org.chromium.chrome.browser.preferences.download.DownloadPreferences"
+     <org.chromium.chrome.browser.settings.ChromeBasePreference
+         android:fragment="org.chromium.chrome.browser.settings.download.DownloadPreferences"
          android:key="downloads"
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
-@@ -129,8 +129,6 @@ import org.chromium.chrome.browser.share.ShareMenuActionHandler;
+@@ -131,8 +131,6 @@ import org.chromium.chrome.browser.share.ShareDelegateImpl;
  import org.chromium.chrome.browser.snackbar.BottomContainer;
  import org.chromium.chrome.browser.snackbar.SnackbarManager;
  import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable;
 -import org.chromium.chrome.browser.sync.ProfileSyncService;
 -import org.chromium.chrome.browser.sync.SyncController;
  import org.chromium.chrome.browser.tab.Tab;
- import org.chromium.chrome.browser.tab.TabBrowserControlsState;
- import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
-@@ -268,9 +266,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+ import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper;
+ import org.chromium.chrome.browser.tab.TabImpl;
+@@ -255,9 +253,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
      @SuppressLint("NewApi")
      private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
  
@@ -170,7 +168,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      @Nullable
      private ChromeFullscreenManager mFullscreenManager;
  
-@@ -919,28 +914,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -870,28 +865,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
      private void createContextReporterIfNeeded() {
          if (!mStarted) return; // Sync state reporting should work only in started state.
          if (mContextReporter != null || getActivityTab() == null) return;
@@ -199,7 +197,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      }
  
      @Override
-@@ -1008,13 +981,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -963,13 +936,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          if (GSAState.getInstance(this).isGsaAvailable() && !SysUtils.isLowEndDevice()) {
              GSAAccountChangeListener.getInstance().disconnect();
          }
@@ -213,24 +211,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
          if (mContextReporter != null) mContextReporter.disable();
  
          super.onStopWithNative();
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java
-@@ -17,13 +17,11 @@ import org.chromium.base.ContextUtils;
- import org.chromium.base.VisibleForTesting;
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainPreferences.java
+@@ -19,7 +19,6 @@ import org.chromium.base.ContextUtils;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ChromeFeatureList;
+ import org.chromium.chrome.browser.flags.FeatureUtilities;
 -import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.night_mode.NightModeUtils;
  import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchConfiguration;
  import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
- import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
- import org.chromium.chrome.browser.preferences.autofill_assistant.AutofillAssistantPreferences;
--import org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment;
- import org.chromium.chrome.browser.preferences.developer.DeveloperPreferences;
- import org.chromium.chrome.browser.preferences.sync.SignInPreference;
- import org.chromium.chrome.browser.preferences.sync.SyncPreferenceUtils;
-@@ -42,16 +40,11 @@ import java.util.Map;
+@@ -27,7 +26,6 @@ import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
+ import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher;
+ import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
+ import org.chromium.chrome.browser.settings.autofill_assistant.AutofillAssistantPreferences;
+-import org.chromium.chrome.browser.settings.datareduction.DataReductionPreferenceFragment;
+ import org.chromium.chrome.browser.settings.developer.DeveloperSettings;
+ import org.chromium.chrome.browser.settings.sync.SignInPreference;
+ import org.chromium.chrome.browser.settings.sync.SyncPreferenceUtils;
+@@ -44,16 +42,11 @@ import java.util.Map;
   * The main settings screen, shown when the user first opens Settings.
   */
  public class MainPreferences extends PreferenceFragmentCompat
@@ -248,7 +248,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      public static final String PREF_NOTIFICATIONS = "notifications";
      public static final String PREF_LANGUAGES = "languages";
      public static final String PREF_DOWNLOADS = "downloads";
-@@ -65,7 +58,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -67,7 +60,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
      private final ManagedPreferenceDelegate mManagedPreferenceDelegate;
      private final Map<String, Preference> mAllPreferences = new HashMap<>();
@@ -256,7 +256,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
  
      public MainPreferences() {
          setHasOptionsMenu(true);
-@@ -88,35 +80,16 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -90,35 +82,16 @@ public class MainPreferences extends PreferenceFragmentCompat
      @Override
      public void onDestroy() {
          super.onDestroy();
@@ -292,8 +292,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      @Override
-@@ -129,12 +102,9 @@ public class MainPreferences extends PreferenceFragmentCompat
-         PreferenceUtils.addPreferencesFromResource(this, R.xml.main_preferences);
+@@ -131,12 +104,9 @@ public class MainPreferences extends PreferenceFragmentCompat
+         SettingsUtils.addPreferencesFromResource(this, R.xml.main_preferences);
          cachePreferences();
  
 -        mSignInPreference.setOnStateChangedCallback(this::onSignInPreferenceStateChanged);
@@ -305,7 +305,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
  
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              // If we are on Android O+ the Notifications preference should lead to the Android
-@@ -188,7 +158,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -190,7 +160,6 @@ public class MainPreferences extends PreferenceFragmentCompat
              Preference preference = getPreferenceScreen().getPreference(index);
              mAllPreferences.put(preference.getKey(), preference);
          }
@@ -313,7 +313,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      private void setManagedPreferenceDelegateForPreference(String key) {
-@@ -197,13 +166,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -199,13 +168,6 @@ public class MainPreferences extends PreferenceFragmentCompat
      }
  
      private void updatePreferences() {
@@ -327,7 +327,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
          updateSearchEnginePreference();
  
          Preference homepagePref = addPreferenceIfAbsent(PREF_HOMEPAGE);
-@@ -220,10 +182,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -222,10 +184,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          } else {
              removePreferenceIfPresent(PREF_DEVELOPER);
          }
@@ -338,7 +338,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      private Preference addPreferenceIfAbsent(String key) {
-@@ -237,13 +195,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -239,13 +197,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          if (preference != null) getPreferenceScreen().removePreference(preference);
      }
  
@@ -352,7 +352,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      private void updateSearchEnginePreference() {
          if (!TemplateUrlServiceFactory.get().isLoaded()) {
              ChromeBasePreference searchEnginePref =
-@@ -275,28 +226,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -277,28 +228,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          pref.setSummary(isOn ? R.string.text_on : R.string.text_off);
      }
  
@@ -381,7 +381,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      // TemplateUrlService.LoadListener implementation.
      @Override
      public void onTemplateUrlServiceLoaded() {
-@@ -304,11 +233,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -306,11 +235,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSearchEnginePreference();
      }
  
@@ -393,7 +393,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      @VisibleForTesting
      ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
          return mManagedPreferenceDelegate;
-@@ -318,9 +242,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -320,9 +244,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          return new ManagedPreferenceDelegate() {
              @Override
              public boolean isPreferenceControlledByPolicy(Preference preference) {
@@ -403,7 +403,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
                      return TemplateUrlServiceFactory.get().isDefaultSearchManaged();
                  }
-@@ -329,11 +250,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -331,11 +252,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
              @Override
              public boolean isPreferenceClickDisabledByPolicy(Preference preference) {
@@ -415,12 +415,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
                      return TemplateUrlServiceFactory.get().isDefaultSearchManaged();
                  }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/datareduction/DataReductionPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/datareduction/DataReductionPreferenceFragment.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/datareduction/DataReductionPreferenceFragment.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/datareduction/DataReductionPreferenceFragment.java
 @@ -50,10 +50,10 @@ public class DataReductionPreferenceFragment extends PreferenceFragmentCompat {
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-         PreferenceUtils.addPreferencesFromResource(this, R.xml.data_reduction_preferences);
+         SettingsUtils.addPreferencesFromResource(this, R.xml.data_reduction_preferences);
          getActivity().setTitle(R.string.data_reduction_title_lite_mode);
 -        boolean isEnabled = DataReductionProxySettings.getInstance().isDataReductionProxyEnabled();
 -        mIsEnabled = !isEnabled;
@@ -456,17 +456,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/dat
      }
  
      /**
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.preferences.Pref;
- import org.chromium.chrome.browser.preferences.PrefServiceBridge;
- import org.chromium.chrome.browser.preferences.PreferenceUtils;
- import org.chromium.chrome.browser.preferences.PreferencesLauncher;
--import org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences;
- import org.chromium.chrome.browser.profiles.Profile;
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferences.java
+@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference;
+ import org.chromium.chrome.browser.settings.ManagedPreferenceDelegate;
+ import org.chromium.chrome.browser.settings.PreferencesLauncher;
+ import org.chromium.chrome.browser.settings.SettingsUtils;
+-import org.chromium.chrome.browser.settings.sync.SyncAndServicesPreferences;
  import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog;
  import org.chromium.ui.text.NoUnderlineClickableSpan;
+ import org.chromium.ui.text.SpanApplier;
 @@ -39,9 +38,6 @@ public class PrivacyPreferences
      private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
      private static final String PREF_DO_NOT_TRACK = "do_not_track";
@@ -487,10 +487,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          ChromeBaseCheckBoxPreference searchSuggestionsPref =
                  (ChromeBaseCheckBoxPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
          searchSuggestionsPref.setOnPreferenceChangeListener(this);
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncAndServicesPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncAndServicesPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncAndServicesPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncAndServicesPreferences.java
-@@ -167,15 +167,7 @@ public class SyncAndServicesPreferences extends PreferenceFragmentCompat
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/SyncAndServicesPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/SyncAndServicesPreferences.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/SyncAndServicesPreferences.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/SyncAndServicesPreferences.java
+@@ -175,15 +175,7 @@ public class SyncAndServicesPreferences extends PreferenceFragmentCompat
  
          mPrivacyPrefManager.migrateNetworkPredictionPreferences();
  
@@ -504,23 +504,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/syn
 -            RecordUserAction.record("Signin_Signin_ShowAdvancedSyncSettings");
 -        }
  
-         PreferenceUtils.addPreferencesFromResource(this, R.xml.sync_and_services_preferences);
+         SettingsUtils.addPreferencesFromResource(this, R.xml.sync_and_services_preferences);
  
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
-@@ -23,10 +23,7 @@ import org.chromium.base.metrics.RecordHistogram;
+@@ -22,9 +22,6 @@ import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.metrics.RecordUserAction;
  import org.chromium.base.task.PostTask;
  import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
 -import org.chromium.components.signin.AccountIdProvider;
- import org.chromium.components.signin.AccountManagerFacade;
 -import org.chromium.components.signin.AccountTrackerService;
 -import org.chromium.components.signin.ChromeSigninController;
  import org.chromium.components.signin.identitymanager.ClearAccountsAction;
  import org.chromium.components.signin.identitymanager.CoreAccountInfo;
  import org.chromium.components.signin.identitymanager.IdentityManager;
-@@ -52,7 +49,7 @@ import java.util.List;
+@@ -50,7 +47,7 @@ import java.util.List;
   * See chrome/browser/signin/signin_manager_android.h for more details.
   */
  public class SigninManager
@@ -571,9 +570,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
  
 -        mAccountTrackerService.addSystemAccountsSeededListener(this);
          mIdentityManager.addObserver(this);
-     }
  
-@@ -241,7 +234,6 @@ public class SigninManager
+         reloadAllAccountsFromSystem();
+@@ -243,7 +236,6 @@ public class SigninManager
      @CalledByNative
      public void destroy() {
          mIdentityManager.removeObserver(this);
@@ -581,7 +580,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
          mNativeSigninManagerAndroid = 0;
      }
  
-@@ -285,8 +277,7 @@ public class SigninManager
+@@ -282,8 +274,7 @@ public class SigninManager
       * Returns true if signin can be started now.
       */
      public boolean isSignInAllowed() {
@@ -591,7 +590,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -342,27 +333,6 @@ public class SigninManager
+@@ -339,27 +330,6 @@ public class SigninManager
          });
      }
  
@@ -619,7 +618,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      /**
       * Starts the sign-in flow, and executes the callback when finished.
       *
-@@ -418,14 +388,8 @@ public class SigninManager
+@@ -407,14 +377,8 @@ public class SigninManager
      }
  
      private void progressSignInFlowSeedSystemAccounts() {
@@ -636,9 +635,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -459,18 +423,6 @@ public class SigninManager
-         // This method should be called at most once per sign-in flow.
-         assert mSignInState != null && mSignInState.mCoreAccountInfo != null;
+@@ -451,18 +415,6 @@ public class SigninManager
+         // The user should not be already signed in
+         assert !mIdentityManager.hasPrimaryAccount();
  
 -        if (!mIdentityMutator.setPrimaryAccount(mSignInState.mCoreAccountInfo.getId())) {
 -            Log.w(TAG, "Failed to set the PrimaryAccount in IdentityManager, aborting signin");
@@ -680,10 +679,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      private void disableSyncAndWipeData(
              boolean shouldWipeUserData, final Runnable wipeDataCallback) {
          mAndroidSyncSettings.updateAccount(null);
-diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
---- a/chrome/android/java/strings/android_chrome_strings.grd
-+++ b/chrome/android/java/strings/android_chrome_strings.grd
-@@ -339,24 +339,12 @@ CHAR-LIMIT guidelines:
+diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
+--- a/chrome/browser/android/signin/signin_manager_android.cc
++++ b/chrome/browser/android/signin/signin_manager_android.cc
+@@ -138,7 +138,6 @@ SigninManagerAndroid::SigninManagerAndroid(
+ 
+   java_signin_manager_ = Java_SigninManager_create(
+       base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
+-      identity_manager_->LegacyGetAccountTrackerServiceJavaObject(),
+       identity_manager_->GetJavaObject(),
+       identity_manager_->GetIdentityMutatorJavaObject());
+ }
+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
+@@ -369,24 +369,12 @@ CHAR-LIMIT guidelines:
        </message>
  
        <!-- Sign-in, sync and personalization preferences -->
@@ -708,7 +718,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_SIGN_IN_TO_CHROME_DISABLED_SUMMARY" desc="A descriptive line of text that appears under the 'Sign in to Chrome' option, in Chrome Settings on Android. The text explains why 'Sign in to Chrome' is disabled. 'Administrator' refers to the IT administrator of the company/organization that owns the user’s device.">
          Disabled by the administrator of this device
        </message>
-@@ -406,9 +394,6 @@ CHAR-LIMIT guidelines:
+@@ -436,9 +424,6 @@ CHAR-LIMIT guidelines:
        <message name="IDS_URL_KEYED_ANONYMIZED_DATA_SUMMARY" desc="Summary for a checkbox in Settings that controls non-personalized URL collection and informs the user about the data shared by this feature.">
          Sends URLs of pages you visit to Google
        </message>
@@ -718,7 +728,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_CANCEL_SYNC_DIALOG_TITLE" desc="The title of a dialog that is shown when users tries closing 'Sync and Google services' preferences without confirming the changes.">
          Cancel sync?
        </message>
-@@ -1265,9 +1250,6 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1294,9 +1279,6 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_DATA_REDUCTION_DESCRIPTION_LITE_MODE" desc="Text describing how the Lite mode feature works. Seen only before the user has enabled the feature.">
          When Lite mode is on, Chrome uses Google servers to make pages load faster. Lite mode rewrites very slow pages to load only essential content. Lite mode does not apply to Incognito tabs.
        </message>
@@ -728,71 +738,6 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_DATA_REDUCTION_SAVINGS_LABEL" desc="Data Reduction statistics label that states the amount of mobile data that was saved by Lite mode. Lite mode allows users to to reduce their mobile data usage by compressing network traffic.">
          data saved
        </message>
-diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
---- a/chrome/browser/android/signin/signin_manager_android.cc
-+++ b/chrome/browser/android/signin/signin_manager_android.cc
-@@ -138,7 +138,6 @@ SigninManagerAndroid::SigninManagerAndroid(
- 
-   java_signin_manager_ = Java_SigninManager_create(
-       base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
--      identity_manager_->LegacyGetAccountTrackerServiceJavaObject(),
-       identity_manager_->GetJavaObject(),
-       identity_manager_->GetIdentityMutatorJavaObject());
- }
-diff --git a/components/invalidation/impl/invalidation_service_util.cc b/components/invalidation/impl/invalidation_service_util.cc
---- a/components/invalidation/impl/invalidation_service_util.cc
-+++ b/components/invalidation/impl/invalidation_service_util.cc
-@@ -12,27 +12,6 @@
- 
- namespace invalidation {
- 
--notifier::NotifierOptions ParseNotifierOptions(
--    const base::CommandLine& command_line) {
--  notifier::NotifierOptions notifier_options;
--
--  if (command_line.HasSwitch(switches::kSyncNotificationHostPort)) {
--    notifier_options.xmpp_host_port =
--        net::HostPortPair::FromString(
--            command_line.GetSwitchValueASCII(
--                switches::kSyncNotificationHostPort));
--    DVLOG(1) << "Using " << notifier_options.xmpp_host_port.ToString()
--             << " for test sync notification server.";
--  }
--
--  notifier_options.allow_insecure_connection =
--      command_line.HasSwitch(switches::kSyncAllowInsecureXmppConnection);
--  DVLOG_IF(1, notifier_options.allow_insecure_connection)
--      << "Allowing insecure XMPP connections.";
--
--  return notifier_options;
--}
--
- std::string GenerateInvalidatorClientId() {
-   // Generate a GUID with 128 bits worth of base64-encoded randomness.
-   // This format is similar to that of sync's cache_guid.
-diff --git a/components/invalidation/impl/invalidation_service_util.h b/components/invalidation/impl/invalidation_service_util.h
---- a/components/invalidation/impl/invalidation_service_util.h
-+++ b/components/invalidation/impl/invalidation_service_util.h
-@@ -5,7 +5,7 @@
- #ifndef COMPONENTS_INVALIDATION_IMPL_INVALIDATION_SERVICE_UTIL_H_
- #define COMPONENTS_INVALIDATION_IMPL_INVALIDATION_SERVICE_UTIL_H_
- 
--#include "jingle/notifier/base/notifier_options.h"
-+#include <string>
- 
- namespace base {
- class CommandLine;
-@@ -13,10 +13,6 @@ class CommandLine;
- 
- namespace invalidation {
- 
--// Parses the given command line for notifier options.
--notifier::NotifierOptions ParseNotifierOptions(
--    const base::CommandLine& command_line);
--
- // Generates a unique client ID for the invalidator.
- std::string GenerateInvalidatorClientId();
- 
 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
@@ -893,7 +838,7 @@ diff --git a/components/sync/android/java/src/org/chromium/components/sync/Andro
 diff --git a/net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java b/net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java
 --- a/net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java
 +++ b/net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java
-@@ -97,54 +97,8 @@ public class HttpNegotiateAuthenticator {
+@@ -98,54 +98,8 @@ public class HttpNegotiateAuthenticator {
  
          @Override
          public void run(AccountManagerFuture<Account[]> future) {
@@ -950,7 +895,7 @@ diff --git a/net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.ja
          }
      }
  
-@@ -157,42 +111,8 @@ public class HttpNegotiateAuthenticator {
+@@ -158,42 +112,8 @@ public class HttpNegotiateAuthenticator {
  
          @Override
          public void run(AccountManagerFuture<Bundle> future) {

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

@@ -9,7 +9,7 @@ Subject: Replace DoH probe domain with RIPE domain
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/net/dns/dns_transaction.cc
-@@ -818,7 +818,7 @@ class DnsTCPAttempt : public DnsAttempt {
+@@ -824,7 +824,7 @@ class DnsTCPAttempt : public DnsAttempt {
  
  // ----------------------------------------------------------------------------
  

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

@@ -9,10 +9,10 @@ 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
-@@ -1360,7 +1360,7 @@
+@@ -1459,7 +1459,7 @@
    {
      "name": "enable-horizontal-tab-switcher",
-     "owners": [ "memex-team@9oo91e.qjz9zk" ],
+     "owners": [ "memex-team@google.com" ],
 -    "expiry_milestone": 77
 +    "expiry_milestone": -1
    },

+ 8 - 8
build/patches/Revert-Cleanup-Search-Ready-Omnibox-flag-since-it-has-launched.patch

@@ -17,7 +17,7 @@ This reverts commit ae458edcc8422d0815d0e82261e71fe10d7d6fc2.
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
-@@ -303,6 +303,7 @@ public abstract class ChromeFeatureList {
+@@ -309,6 +309,7 @@ public abstract class ChromeFeatureList {
      public static final String QUIET_NOTIFICATION_PROMPTS = "QuietNotificationPrompts";
      public static final String REACHED_CODE_PROFILER = "ReachedCodeProfiler";
      public static final String READER_MODE_IN_CCT = "ReaderModeInCCT";
@@ -28,7 +28,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureLi
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
-@@ -364,6 +364,13 @@ class AutocompleteMediator
+@@ -387,6 +387,13 @@ class AutocompleteMediator
      void onNativeInitialized() {
          mNativeInitialized = true;
  
@@ -45,7 +45,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggest
 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
-@@ -2009,6 +2009,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2027,6 +2027,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kAndroidAutofillAccessibilityName,
       flag_descriptions::kAndroidAutofillAccessibilityDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(features::kAndroidAutofillAccessibility)},
@@ -58,7 +58,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/chrome/browser/android/chrome_feature_list.cc
-@@ -164,6 +164,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
+@@ -166,6 +166,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
      &kReorderBookmarks,
      &kRevampedContextMenu,
      &kScrollToExpandPaymentHandler,
@@ -66,7 +66,7 @@ diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/andr
      &kSearchEnginePromoExistingDevice,
      &kSearchEnginePromoNewDevice,
      &kServiceManagerForBackgroundPrefetch,
-@@ -516,6 +517,9 @@ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
+@@ -519,6 +520,9 @@ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
  const base::Feature kScrollToExpandPaymentHandler{
      "ScrollToExpandPaymentHandler", base::FEATURE_DISABLED_BY_DEFAULT};
  
@@ -90,7 +90,7 @@ diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/andro
 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
-@@ -1647,6 +1647,11 @@
+@@ -1758,6 +1758,11 @@
      "owners": [ "ginko", "newcomer" ],
      "expiry_milestone": 78
    },
@@ -105,7 +105,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
-@@ -2764,6 +2764,11 @@ const char kSafeBrowsingUseLocalBlacklistsV2Description[] =
+@@ -2771,6 +2771,11 @@ const char kSafeBrowsingUseLocalBlacklistsV2Description[] =
      "process to check the Safe Browsing reputation of URLs without calling "
      "into GmsCore for every URL.";
  
@@ -120,7 +120,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
-@@ -1626,6 +1626,9 @@ extern const char kReaderModeInCCTDescription[];
+@@ -1630,6 +1630,9 @@ extern const char kReaderModeInCCTDescription[];
  extern const char kSafeBrowsingUseLocalBlacklistsV2Name[];
  extern const char kSafeBrowsingUseLocalBlacklistsV2Description[];
  

+ 3 - 3
build/patches/Revert-Merge-to-M78-Enable-AImageReader-by-default.patch

@@ -46,7 +46,7 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
 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
-@@ -493,9 +493,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
+@@ -491,9 +491,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
  
  #if defined(OS_ANDROID)
    // Disable AImageReader if the workaround is enabled.
@@ -57,7 +57,7 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
  #endif
  #if defined(USE_OZONE)
    gpu_feature_info_.supported_buffer_formats_for_allocation_and_texturing =
-@@ -523,9 +521,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line,
+@@ -522,9 +520,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line,
    default_offscreen_surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size());
  
    // Disable AImageReader if the workaround is enabled.
@@ -71,7 +71,7 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
 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
-@@ -453,7 +453,7 @@ const base::Feature kMediaDrmPreprovisioningAtStartup{
+@@ -487,7 +487,7 @@ const base::Feature kMediaDrmPreprovisioningAtStartup{
  
  // Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
  const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 383 - 259
build/patches/Revert-Remove-pre-unified-consent-code-in-sync-and-privacy-directory.patch


+ 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
-@@ -2034,6 +2034,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2052,6 +2052,10 @@ const FeatureEntry kFeatureEntries[] = {
       SINGLE_VALUE_TYPE(switches::kHostedAppQuitNotification)},
  #endif  // OS_MACOSX
  #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
-@@ -712,6 +712,11 @@
+@@ -776,6 +776,11 @@
        "quickoffice-chrome-eng@google.com" ],
      "expiry_milestone": 88
    },
@@ -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
-@@ -2748,6 +2748,10 @@ extern const char kProcessSharingWithStrictSiteInstancesDescription[] =
+@@ -2755,6 +2755,10 @@ extern const char kProcessSharingWithStrictSiteInstancesDescription[] =
      "separated like strict site isolation, but process selection puts multiple "
      "site instances in a single process.";
  
@@ -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
-@@ -1615,6 +1615,9 @@ extern const char kProcessSharingWithDefaultSiteInstancesDescription[];
+@@ -1619,6 +1619,9 @@ extern const char kProcessSharingWithDefaultSiteInstancesDescription[];
  extern const char kProcessSharingWithStrictSiteInstancesName[];
  extern const char kProcessSharingWithStrictSiteInstancesDescription[];
  

+ 15 - 20
build/patches/Skip-the-first-run-and-metrics.patch

@@ -3,15 +3,15 @@ Date: Sun, 26 Nov 2017 22:51:43 +0100
 Subject: Skip the first run and metrics
 
 ---
- .../chrome/browser/firstrun/FirstRunStatus.java  |  8 ++++----
- .../chrome/browser/firstrun/FirstRunUtils.java   | 16 ++++++----------
- .../firstrun/ToSAndUMAFirstRunFragment.java      |  6 ++++--
- 3 files changed, 14 insertions(+), 16 deletions(-)
+ .../chromium/chrome/browser/firstrun/FirstRunStatus.java  | 8 ++++----
+ .../chromium/chrome/browser/firstrun/FirstRunUtils.java   | 5 -----
+ .../browser/firstrun/ToSAndUMAFirstRunFragment.java       | 6 ++++--
+ 3 files changed, 8 insertions(+), 11 deletions(-)
 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java
-@@ -36,11 +36,11 @@ public class FirstRunStatus {
+@@ -38,11 +38,11 @@ public class FirstRunStatus {
       * includes ToS and Sign In pages if necessary.
       */
      public static boolean getFirstRunFlowComplete() {
@@ -30,29 +30,24 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
-@@ -37,16 +37,12 @@ public class FirstRunUtils {
+@@ -35,17 +35,12 @@ public class FirstRunUtils {
          //   - checkAnyUserHasSeenToS() may be true which needs to sync its state to the prefs.
          boolean javaPrefValue = javaPrefs.getBoolean(CACHED_TOS_ACCEPTED_PREF, false);
-         boolean nativePrefValue = prefsBridge.isFirstRunEulaAccepted();
+         boolean nativePrefValue = isFirstRunEulaAccepted();
 -        boolean userHasSeenTos =
 -                ToSAckedReceiver.checkAnyUserHasSeenToS();
 -        boolean isFirstRunComplete = FirstRunStatus.getFirstRunFlowComplete();
 -        if (javaPrefValue || nativePrefValue || userHasSeenTos || isFirstRunComplete) {
--            if (!javaPrefValue) {
--                javaPrefs.edit().putBoolean(CACHED_TOS_ACCEPTED_PREF, true).apply();
--            }
--            if (!nativePrefValue) {
--                prefsBridge.setEulaAccepted();
--            }
-+
-+        if (!javaPrefValue) {
-+            javaPrefs.edit().putBoolean(CACHED_TOS_ACCEPTED_PREF, true).apply();
-+        }
-+        if (!nativePrefValue) {
-+            prefsBridge.setEulaAccepted();
-         }
+             if (!javaPrefValue) {
+                 javaPrefs.edit().putBoolean(CACHED_TOS_ACCEPTED_PREF, true).apply();
+             }
+             if (!nativePrefValue) {
+                 setEulaAccepted();
+             }
+-        }
      }
  
+     /**
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java

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

+ 0 - 38
build/patches/Use-64-bit-WebView-processes.patch

@@ -1,38 +0,0 @@
-From: Daniel Micay <danielmicay@gmail.com>
-Date: Thu, 26 Jan 2017 01:30:12 -0500
-Subject: Use 64-bit WebView processes
-
-64-bit processes introduce 10% or so higher memory consumption.
-The reason for preferring 64-bit processes is providing substantially better
-exploit mitigations at the expense of slightly more memory usage.
-
-In addition to the standard mitigations, it also enables usage of
-https://github.com/AndroidHardening/hardened_malloc (where available).
-
-It will provide high entropy ASLR (24-bit to 32-bit depending on whether the
-kernel uses 3 or 4 level page tables rather than 16-bit for 32-bit processes),
-high entropy stack canaries (56/64-bit instead of 24/32-bit depending on
-whether a zero byte is used) and also features like pointer authentication and
-memory tagging when those are made available in the future.
-
-The reason why upstream started preferring 32-bit processes is to save memory,
-particularly since saving memory makes it feasible to use finer-grained
-sandboxing.
----
- android_webview/apk/java/AndroidManifest.xml | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/android_webview/apk/java/AndroidManifest.xml b/android_webview/apk/java/AndroidManifest.xml
---- a/android_webview/apk/java/AndroidManifest.xml
-+++ b/android_webview/apk/java/AndroidManifest.xml
-@@ -22,7 +22,6 @@
-                  android:icon="@{{manifest_package|default('com.android.webview')}}:drawable/icon_webview"
-                  android:name="{{ application_name|default('com.android.webview.chromium.WebViewApkApplication') }}"
-                  android:multiArch="true"
--                 android:use32bitAbi="true"
-                  android:extractNativeLibs="{{ trichrome_library is not defined }}">
-         {# This part is shared between stand-alone WebView and Monochrome #}
-         {% macro common(manifest_package, webview_lib) %}
--- 
-2.17.1
-

+ 8 - 8
build/patches/Use-dummy-DFM-installer.patch

@@ -19,7 +19,7 @@ Subject: Use dummy DFM installer
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
-@@ -121,10 +121,6 @@ public class ChromeApplication extends Application {
+@@ -122,10 +122,6 @@ public class ChromeApplication extends Application {
              ChromeBackgroundTaskFactory.setAsDefault();
          }
  
@@ -33,7 +33,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplicati
 diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn
 --- a/components/module_installer/android/BUILD.gn
 +++ b/components/module_installer/android/BUILD.gn
-@@ -19,12 +19,10 @@ android_library("module_installer_java") {
+@@ -20,12 +20,10 @@ android_library("module_installer_java") {
      "java/src/org/chromium/components/module_installer/logger/Logger.java",
      "java/src/org/chromium/components/module_installer/logger/PlayCoreLogger.java",
      "java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java",
@@ -82,9 +82,9 @@ diff --git a/components/module_installer/android/java/src/org/chromium/component
 diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
 --- a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
 +++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
-@@ -6,10 +6,10 @@ package org.chromium.components.module_installer.engine;
+@@ -8,10 +8,10 @@ import android.app.Activity;
  
- import android.app.Activity;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.play.core.splitinstall.SplitInstallException;
 +/*import com.google.android.play.core.splitinstall.SplitInstallException;
@@ -94,8 +94,8 @@ diff --git a/components/module_installer/android/java/src/org/chromium/component
 +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus;*/
  
  import org.chromium.base.ThreadUtils;
- import org.chromium.base.VisibleForTesting;
-@@ -26,41 +26,42 @@ import java.util.Set;
+ 
+@@ -27,41 +27,42 @@ import java.util.Set;
   * Install engine that uses Play Core and SplitCompat to install modules.
   */
  class SplitCompatEngine implements InstallEngine {
@@ -149,7 +149,7 @@ diff --git a/components/module_installer/android/java/src/org/chromium/component
              sSessions.get(moduleName).add(listener);
              return;
          }
-@@ -85,10 +86,10 @@ class SplitCompatEngine implements InstallEngine {
+@@ -86,10 +87,10 @@ class SplitCompatEngine implements InstallEngine {
              notifyListeners(moduleName, false);
          });
  
@@ -162,7 +162,7 @@ diff --git a/components/module_installer/android/java/src/org/chromium/component
          return state -> {
              if (state.moduleNames().size() != 1) {
                  throw new UnsupportedOperationException("Only one module supported.");
-@@ -109,35 +110,35 @@ class SplitCompatEngine implements InstallEngine {
+@@ -110,35 +111,35 @@ class SplitCompatEngine implements InstallEngine {
  
              mFacade.getLogger().logStatus(moduleName, status);
          };

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

@@ -11,7 +11,7 @@ Disables the autofill download manager (trk:158).
 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
 +++ b/components/autofill/core/browser/autofill_download_manager.cc
-@@ -65,7 +65,6 @@ constexpr std::pair<int, int> kAutofillExperimentRanges[] = {
+@@ -66,7 +66,6 @@ constexpr std::pair<int, int> kAutofillExperimentRanges[] = {
      {3314445, 3314448}, {3314854, 3314883},
  };
  
@@ -19,7 +19,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
  const size_t kAutofillDownloadManagerMaxFormCacheSize = 16;
  const size_t kMaxFieldsPerQueryRequest = 100;
  
-@@ -521,35 +520,6 @@ bool GetUploadPayloadForApi(const AutofillUploadContents& upload,
+@@ -522,35 +521,6 @@ bool GetUploadPayloadForApi(const AutofillUploadContents& upload,
    return upload_request.SerializeToString(payload);
  }
  
@@ -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,
-@@ -773,6 +743,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;
  
-@@ -795,35 +766,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
+@@ -796,35 +767,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
    GURL url = autofill_server_url_
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .ReplaceComponents(replacements);
@@ -128,7 +128,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
  ValuePatternsMetric GetValuePattern(const base::string16& value) {
    if (IsUPIVirtualPaymentAddress(value))
      return ValuePatternsMetric::kUpiVpa;
-@@ -1501,11 +1488,6 @@ AutofillManager::AutofillManager(
+@@ -1519,11 +1506,6 @@ AutofillManager::AutofillManager(
                                      : std::make_unique<CreditCardAccessManager>(
                                            driver, client_, personal_data_,
                                            credit_card_form_event_logger_.get());

+ 12 - 37
build/patches/build-remove-calling-untrusted-hooks.patch

@@ -5,13 +5,13 @@ Subject: build: remove calling untrusted hooks
 Avoid downloading untrusted executables and wasting time with a
 sysroot.
 ---
- DEPS | 121 ++---------------------------------------------------------
- 1 file changed, 3 insertions(+), 118 deletions(-)
+ DEPS | 96 ++----------------------------------------------------------
+ 1 file changed, 3 insertions(+), 93 deletions(-)
 
 diff --git a/DEPS b/DEPS
 --- a/DEPS
 +++ b/DEPS
-@@ -75,7 +75,7 @@ vars = {
+@@ -76,7 +76,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.
-@@ -99,8 +99,8 @@ vars = {
+@@ -100,8 +100,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, do not check out WebKit for iOS, as it is not needed unless
    # running against ToT WebKit rather than system WebKit. This can be overridden
-@@ -3141,49 +3141,6 @@ hooks = [
+@@ -3397,49 +3397,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',
-@@ -3211,43 +3168,6 @@ hooks = [
+@@ -3467,18 +3424,6 @@ hooks = [
      'condition': 'checkout_mac',
      'action': ['python', 'src/build/mac_toolchain.py'],
    },
@@ -96,36 +96,11 @@ diff --git a/DEPS b/DEPS
 -        'python',
 -        'src/third_party/binutils/download.py',
 -    ],
--  },
--  {
--    # Update the prebuilt clang toolchain.
--    # Note: On Win, this should run after win_toolchain, as it may use it.
--    'name': 'clang',
--    'pattern': '.',
--    'condition': 'not llvm_force_head_revision',
--    'action': ['python', 'src/tools/clang/scripts/update.py'],
--  },
--  {
--    # Build the clang toolchain from tip-of-tree.
--    # Note: On Win, this should run after win_toolchain, as it may use it.
--    'name': 'clang_tot',
--    'pattern': '.',
--    'condition': 'llvm_force_head_revision',
--    'action': ['python', 'src/tools/clang/scripts/build.py',
--               '--llvm-force-head-revision',
--               '--with-android={checkout_android}'],
--  },
--  {
--    # This is supposed to support the same set of platforms as 'clang' above.
--    'name': 'clang_coverage',
--    'pattern': '.',
--    'condition': 'checkout_clang_coverage_tools',
--    'action': ['python', 'src/tools/code_coverage/update_clang_coverage_tools.py'],
 -  },
    {
-     # Mac doesn't use lld so it's not included in the default clang bundle
-     # there.  lld is however needed in win and Fuchsia cross builds, so
-@@ -3307,18 +3227,6 @@ hooks = [
+     # Update the prebuilt clang toolchain.
+     # Note: On Win, this should run after win_toolchain, as it may use it.
+@@ -3565,18 +3510,6 @@ hooks = [
                  '-s', 'src/buildtools/mac/clang-format.sha1',
      ],
    },
@@ -144,7 +119,7 @@ diff --git a/DEPS b/DEPS
    # Pull rc binaries using checked-in hashes.
    {
      'name': 'rc_win',
-@@ -3344,29 +3252,6 @@ hooks = [
+@@ -3602,29 +3535,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
      ],
    },
@@ -171,9 +146,9 @@ diff --git a/DEPS b/DEPS
 -                '-s', 'src/third_party/test_fonts/test_fonts.tar.gz.sha1',
 -    ],
 -  },
-   # Pull order files for the win/clang build.
+   # Download test resources for opus, i.e. audio files.
    {
-     'name': 'orderfiles_win',
+     'name': 'opus_test_files',
 -- 
 2.17.1
 

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

@@ -20,7 +20,7 @@ diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.
 -#endif
    TabSpecificContentSettings* content_settings =
        TabSpecificContentSettings::FromWebContents(web_contents());
-   content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_ADS);
+   content_settings->OnContentBlocked(ContentSettingsType::ADS);
 -- 
 2.17.1
 

+ 2 - 2
build/patches/disable-background-sync-by-default.patch

@@ -9,10 +9,10 @@ Subject: disable background sync by default
 diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
 --- a/components/content_settings/core/browser/content_settings_registry.cc
 +++ b/components/content_settings/core/browser/content_settings_registry.cc
-@@ -309,7 +309,7 @@ void ContentSettingsRegistry::Init() {
+@@ -308,7 +308,7 @@ void ContentSettingsRegistry::Init() {
             ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
  
-   Register(CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, "background-sync",
+   Register(ContentSettingsType::BACKGROUND_SYNC, "background-sync",
 -           CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::UNSYNCABLE,
 +           CONTENT_SETTING_BLOCK, WebsiteSettingsInfo::UNSYNCABLE,
             WhitelistedSchemes(),

+ 3 - 3
build/patches/disable-sensors-access-site-setting-by-default.patch

@@ -9,12 +9,12 @@ Subject: disable sensors access site setting by default
 diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
 --- a/components/content_settings/core/browser/content_settings_registry.cc
 +++ b/components/content_settings/core/browser/content_settings_registry.cc
-@@ -413,7 +413,7 @@ void ContentSettingsRegistry::Init() {
+@@ -412,7 +412,7 @@ void ContentSettingsRegistry::Init() {
    // TODO(crbug.com/904439): Update this to "SECURE_ONLY" once
    // DeviceOrientationEvents and DeviceMotionEvents are only fired in secure
    // contexts.
--  Register(CONTENT_SETTINGS_TYPE_SENSORS, "sensors", CONTENT_SETTING_ALLOW,
-+  Register(CONTENT_SETTINGS_TYPE_SENSORS, "sensors", CONTENT_SETTING_BLOCK,
+-  Register(ContentSettingsType::SENSORS, "sensors", CONTENT_SETTING_ALLOW,
++  Register(ContentSettingsType::SENSORS, "sensors", CONTENT_SETTING_BLOCK,
             WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(),
             ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK),
             WebsiteSettingsInfo::SINGLE_ORIGIN_ONLY_SCOPE,

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

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

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

@@ -11,9 +11,9 @@ Subject: kill Auth
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelper.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelper.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelper.java
-@@ -11,10 +11,6 @@ import android.content.SharedPreferences;
- 
+@@ -12,10 +12,6 @@ import android.content.SharedPreferences;
  import androidx.annotation.Nullable;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.auth.AccountChangeEvent;
 -import com.google.android.gms.auth.GoogleAuthException;
@@ -21,7 +21,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHe
 -
  import org.chromium.base.ContextUtils;
  import org.chromium.base.Log;
- import org.chromium.base.VisibleForTesting;
+ import org.chromium.base.task.AsyncTask;
 @@ -73,23 +69,7 @@ public class SigninHelper {
          @Override
          public List<String> getAccountChangeEvents(
@@ -50,16 +50,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHe
 diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
 --- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
 +++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountIdProvider.java
-@@ -4,8 +4,6 @@
+@@ -6,8 +6,6 @@ package org.chromium.components.signin;
  
- package org.chromium.components.signin;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.auth.GoogleAuthException;
 -import com.google.android.gms.auth.GoogleAuthUtil;
  import com.google.android.gms.common.ConnectionResult;
  import com.google.android.gms.common.GoogleApiAvailability;
  
-@@ -40,12 +38,7 @@ public class AccountIdProvider {
+@@ -41,12 +39,7 @@ public class AccountIdProvider {
       * @param accountName The email address of a Google account.
       */
      public String getAccountId(String accountName) {

+ 17 - 18
build/patches/kill-GCM.patch

@@ -24,7 +24,7 @@ Subject: kill GCM
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -369,7 +369,6 @@ android_library("chrome_java") {
+@@ -336,7 +336,6 @@ android_library("chrome_java") {
      "//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
      "//third_party/android_deps:javax_inject_javax_inject_java",
      "//third_party/android_media:android_media_java",
@@ -43,7 +43,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/ChromeBackupAgent.java",
    "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java",
    "java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java",
-@@ -1438,11 +1437,6 @@ chrome_java_sources = [
+@@ -1339,11 +1338,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/services/AndroidEduAndChildAccountHelper.java",
    "java/src/org/chromium/chrome/browser/services/AndroidEduOwnerCheckCallback.java",
    "java/src/org/chromium/chrome/browser/services/GoogleServicesManager.java",
@@ -53,8 +53,8 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 -  "java/src/org/chromium/chrome/browser/services/gcm/GcmUma.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/InvalidationGcmUpstreamSender.java",
    "java/src/org/chromium/chrome/browser/sessions/SessionTabHelper.java",
-   "java/src/org/chromium/chrome/browser/share/LensUtils.java",
-   "java/src/org/chromium/chrome/browser/share/OptionalShareTargetsManager.java",
+   "java/src/org/chromium/chrome/browser/settings/ButtonPreference.java",
+   "java/src/org/chromium/chrome/browser/settings/ChromeBaseCheckBoxPreference.java",
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 +++ b/chrome/android/java/AndroidManifest.xml
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
      <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  
      {% block extra_uses_permissions %}
-@@ -1019,45 +1014,6 @@ by a child template that "extends" this file.
+@@ -1037,45 +1032,6 @@ by a child template that "extends" this file.
              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
              android:hardwareAccelerated="false" />
  
@@ -127,7 +127,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <!-- Android Notification service listener -->
          <service android:name="org.chromium.chrome.browser.notifications.NotificationService"
              android:exported="false"/>
-@@ -1079,24 +1035,6 @@ by a child template that "extends" this file.
+@@ -1097,24 +1053,6 @@ by a child template that "extends" this file.
              android:exported="false"
              android:permission="android.permission.BIND_JOB_SERVICE"/>
  
@@ -175,9 +175,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/background_task
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
-@@ -7,15 +7,10 @@ package org.chromium.chrome.browser.ntp.snippets;
- import android.content.Context;
- import android.net.ConnectivityManager;
+@@ -9,14 +9,9 @@ import android.net.ConnectivityManager;
+ 
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.gcm.GcmNetworkManager;
 -import com.google.android.gms.gcm.PeriodicTask;
@@ -185,13 +185,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/Sn
 -
  import org.chromium.base.ContextUtils;
  import org.chromium.base.Log;
- import org.chromium.base.VisibleForTesting;
  import org.chromium.base.annotations.CalledByNative;
 -import org.chromium.chrome.browser.ChromeBackgroundService;
  import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
  
  /**
-@@ -40,8 +35,6 @@ public class SnippetsLauncher {
+@@ -41,8 +36,6 @@ public class SnippetsLauncher {
      // If it is non-null then the browser is running.
      private static SnippetsLauncher sInstance;
  
@@ -200,7 +199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/Sn
      private boolean mGCMEnabled = true;
  
      /**
-@@ -78,7 +71,6 @@ public class SnippetsLauncher {
+@@ -79,7 +72,6 @@ public class SnippetsLauncher {
  
      protected SnippetsLauncher() {
          checkGCM();
@@ -208,7 +207,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/Sn
      }
  
      private void checkGCM() {
-@@ -89,32 +81,7 @@ public class SnippetsLauncher {
+@@ -90,32 +82,7 @@ public class SnippetsLauncher {
          }
      }
  
@@ -241,7 +240,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/Sn
      }
  
      @CalledByNative
-@@ -127,23 +94,12 @@ public class SnippetsLauncher {
+@@ -128,23 +95,12 @@ public class SnippetsLauncher {
                  .edit()
                  .putBoolean(PREF_IS_SCHEDULED, isScheduled)
                  .apply();
@@ -288,7 +287,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/In
  import com.google.ipc.invalidation.ticl.android2.channel.GcmUpstreamSenderService;
  
  import org.chromium.base.ContextUtils;
-@@ -28,9 +27,6 @@ import org.chromium.components.signin.OAuth2TokenService;
+@@ -28,9 +27,6 @@ import org.chromium.components.signin.identitymanager.IdentityManager;
  import org.chromium.components.sync.SyncConstants;
  import org.chromium.content_public.browser.UiThreadTaskTraits;
  
@@ -333,9 +332,9 @@ diff --git a/components/background_task_scheduler/BUILD.gn b/components/backgrou
 diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java
 --- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java
 +++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java
-@@ -9,14 +9,6 @@ import android.os.Bundle;
- 
+@@ -10,14 +10,6 @@ import android.os.Bundle;
  import androidx.annotation.NonNull;
+ import androidx.annotation.VisibleForTesting;
  
 -import com.google.android.gms.common.ConnectionResult;
 -import com.google.android.gms.common.GoogleApiAvailability;
@@ -347,7 +346,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -
  import org.chromium.base.Log;
  import org.chromium.base.ThreadUtils;
- import org.chromium.base.VisibleForTesting;
+ 
 @@ -43,212 +35,16 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
          sClock = clock;
      }

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

@@ -21,7 +21,7 @@ diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/
 diff --git a/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java b/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java
 --- a/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java
 +++ b/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java
-@@ -26,19 +26,13 @@ public class LocationProviderFactory {
+@@ -27,19 +27,13 @@ public class LocationProviderFactory {
  
      @CalledByNative
      public static void useGmsCoreLocationProvider() {

+ 6 - 5
build/patches/kill-Translate.patch

@@ -3,25 +3,26 @@ Date: Fri, 22 Jun 2018 17:16:43 +0200
 Subject: kill Translate
 
 ---
- .../org/chromium/chrome/browser/firstrun/FirstRunActivity.java | 3 +++
- 1 file changed, 3 insertions(+)
+ .../chromium/chrome/browser/firstrun/FirstRunActivity.java    | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
-@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.datareduction.DataReductionProxyUma;
+@@ -25,6 +25,8 @@ import org.chromium.chrome.browser.datareduction.DataReductionProxyUma;
  import org.chromium.chrome.browser.metrics.UmaUtils;
  import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
++import org.chromium.chrome.browser.preferences.Pref;
 +import org.chromium.chrome.browser.preferences.PrefServiceBridge;
  import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
  import org.chromium.ui.base.LocalizationUtils;
  
-@@ -138,6 +139,8 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+@@ -138,6 +140,8 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
          if (mPostNativePageSequenceCreated) return;
          mFirstRunFlowSequencer.onNativeInitialized(mFreProperties);
  
-+        PrefServiceBridge.getInstance().setTranslateEnabled(false);
++        PrefServiceBridge.getInstance().setBoolean(Pref.OFFER_TRANSLATE_ENABLED, false);
 +
          boolean notifyAdapter = false;
          // An optional Data Saver page.

+ 6 - 24
build/patches/openH264-enable-ARM-ARM64-optimizations.patch

@@ -5,9 +5,9 @@ Subject: openH264: enable ARM/ARM64 optimizations
 Enable the optimizations not only for ChromeOS but for all compatbile ARM/ARM64 architectures
 Limit threads auto-detect only for iOS
 ---
- .../modules/mediarecorder/h264_encoder.cc     |  6 ++--
- third_party/openh264/BUILD.gn                 | 31 ++++++++++++++-----
- 2 files changed, 27 insertions(+), 10 deletions(-)
+ .../modules/mediarecorder/h264_encoder.cc     |  6 ++---
+ third_party/openh264/BUILD.gn                 | 24 ++++++++++++++-----
+ 2 files changed, 21 insertions(+), 9 deletions(-)
 
 diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
 --- a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
@@ -30,25 +30,7 @@ diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc b/
 diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn
 --- a/third_party/openh264/BUILD.gn
 +++ b/third_party/openh264/BUILD.gn
-@@ -16,11 +16,16 @@ config("config") {
-     # HAVE_NEON and __chromeos__ are needed for enabling NEON on ChromeOS
-     # devices.
-     defines += [
--      "HAVE_NEON",
-       "__chromeos__",
-     ]
-   }
- 
-+  if (target_cpu == "arm" || target_cpu == "arm64") {
-+    defines += [
-+      "HAVE_NEON",
-+    ]
-+  }
-+
-   # GCC and clang flags. MSVS (is_win && !is_clang) does not use cflags.
-   if (!is_win || is_clang) {
-     cflags += [
-@@ -125,8 +130,12 @@ if (use_assembler) {
+@@ -125,8 +125,12 @@ if (use_assembler) {
  
  source_set("common") {
    sources = openh264_common_sources
@@ -63,7 +45,7 @@ diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn
    }
    include_dirs = openh264_common_include_dirs
  
-@@ -151,8 +160,12 @@ source_set("common") {
+@@ -151,8 +155,12 @@ source_set("common") {
  
  source_set("processing") {
    sources = openh264_processing_sources
@@ -78,7 +60,7 @@ diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn
    }
    include_dirs = openh264_processing_include_dirs
  
-@@ -170,8 +183,12 @@ source_set("processing") {
+@@ -170,8 +178,12 @@ source_set("processing") {
  
  source_set("encoder") {
    sources = openh264_encoder_sources

+ 2 - 2
build/patches/prefs-only-keep-cookies-until-exit.patch

@@ -14,8 +14,8 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
    // WARNING: The string names of the permissions passed in below are used to
    // generate preference names and should never be changed!
  
--  Register(CONTENT_SETTINGS_TYPE_COOKIES, "cookies", CONTENT_SETTING_ALLOW,
-+  Register(CONTENT_SETTINGS_TYPE_COOKIES, "cookies", CONTENT_SETTING_SESSION_ONLY,
+-  Register(ContentSettingsType::COOKIES, "cookies", CONTENT_SETTING_ALLOW,
++  Register(ContentSettingsType::COOKIES, "cookies", CONTENT_SETTING_SESSION_ONLY,
             WebsiteSettingsInfo::SYNCABLE,
             WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme),
             ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK,

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