소스 검색

Release 78.0.3904.63

csagan5 5 년 전
부모
커밋
6a9e562dde
99개의 변경된 파일1491개의 추가작업 그리고 1723개의 파일을 삭제
  1. 7 0
      CHANGELOG.md
  2. 82 51
      build/filters/adblock_entries.h
  3. 1 1
      build/patches/AV1-codec-support.patch
  4. 1 1
      build/patches/Add-DuckDuckGo-Lite-search-engine.patch
  5. 1 1
      build/patches/Add-English-only-search-engine.patch
  6. 1 1
      build/patches/Add-Qwant-search-engine.patch
  7. 1 1
      build/patches/Add-StartPage-search-engine.patch
  8. 57 85
      build/patches/Add-a-flag-for-DNS-over-HTTPS.patch
  9. 25 21
      build/patches/Add-a-proxy-configuration-page.patch
  10. 25 23
      build/patches/Add-an-always-incognito-mode.patch
  11. 50 51
      build/patches/Add-bookmark-import-export-actions.patch
  12. 17 17
      build/patches/Add-custom-tab-intents-privacy-option.patch
  13. 2 2
      build/patches/Add-exit-menu-item.patch
  14. 13 13
      build/patches/Add-flag-to-configure-maximum-connections-per-host.patch
  15. 29 3
      build/patches/Add-flag-to-control-video-playback-resume-feature.patch
  16. 19 19
      build/patches/Add-flag-to-disable-IPv6-probes.patch
  17. 21 21
      build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch
  18. 7 7
      build/patches/Add-global-menu-entry-to-toggle-AdBlocker.patch
  19. 5 5
      build/patches/Add-menu-option-to-toggle-global-Javascript-preference.patch
  20. 11 11
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  21. 6 6
      build/patches/Add-option-to-use-home-page-as-NTP.patch
  22. 12 12
      build/patches/Add-site-settings-option-for-session-only-cookies.patch
  23. 9 9
      build/patches/Allow-playing-audio-in-background.patch
  24. 1 1
      build/patches/Allow-website-sign-in-without-account-sign-in.patch
  25. 1 1
      build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch
  26. 11 11
      build/patches/Always-show-home-page-settings.patch
  27. 4 4
      build/patches/AudioBuffer-AnalyserNode-fingerprinting-mitigations-via-IDL.patch
  28. 1 1
      build/patches/Battery-API-return-nothing.patch
  29. 0 572
      build/patches/Bromite-AdBlock-engine-for-SystemWebView.patch
  30. 9 9
      build/patches/Bromite-AdBlockUpdaterService.patch
  31. 3 3
      build/patches/Canvas-fingerprinting-mitigations-for-image-data-and-webGL.patch
  32. 1 1
      build/patches/Disable-NTP-remote-suggestions-by-default.patch
  33. 1 1
      build/patches/Disable-Omaha-update-checks.patch
  34. 1 1
      build/patches/Disable-data-saver.patch
  35. 20 20
      build/patches/Disable-dynamic-module-loading.patch
  36. 2 2
      build/patches/Disable-fetching-of-all-field-trials.patch
  37. 1 1
      build/patches/Disable-media-router-and-remoting-by-default.patch
  38. 1 1
      build/patches/Disable-metrics-collection-for-NTP-tiles.patch
  39. 4 4
      build/patches/Disable-metrics-on-all-I-O-threads.patch
  40. 1 1
      build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch
  41. 1 1
      build/patches/Disable-plugins-enumeration.patch
  42. 10 10
      build/patches/Disable-promos-displayed-in-bookmarks-manager.patch
  43. 261 215
      build/patches/Disable-safe-browsing.patch
  44. 1 1
      build/patches/Disable-search-ready-omnibox-by-default.patch
  45. 1 1
      build/patches/Disable-seed-based-field-trials.patch
  46. 37 39
      build/patches/Disable-signin-and-data-saver-preferences.patch
  47. 1 1
      build/patches/Disable-signin-data-reduction-promos.patch
  48. 2 2
      build/patches/Disable-third-party-cookies-by-default.patch
  49. 4 4
      build/patches/Disable-unused-permissions.patch
  50. 5 5
      build/patches/Disable-update-scheduler.patch
  51. 1 1
      build/patches/Do-not-grant-notifications-to-default-search-engine.patch
  52. 8 6
      build/patches/Do-not-ignore-download-location-prompt-setting.patch
  53. 1 1
      build/patches/Do-not-store-passwords-by-default.patch
  54. 1 1
      build/patches/Enable-changing-default-downloads-storage-location-by-default.patch
  55. 2 2
      build/patches/Enable-download-rename-option-by-default.patch
  56. 2 2
      build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
  57. 1 1
      build/patches/Enable-night-mode-menu-entry-by-default.patch
  58. 2 2
      build/patches/Enable-site-per-process-isolation-for-devices-with-enough-memory.patch
  59. 1 1
      build/patches/Fix-crash-when-accessing-page-info-site-settings.patch
  60. 2 2
      build/patches/Hide-passwords-manager-link.patch
  61. 5 5
      build/patches/Inject-scripts-for-AMP-tracking-ads-and-video-functionality.patch
  62. 8 8
      build/patches/Modify-default-preferences.patch
  63. 1 1
      build/patches/Never-fetch-popular-sites.patch
  64. 1 1
      build/patches/Never-send-any-crash-upload-data.patch
  65. 2 2
      build/patches/Remove-background-sync-and-translate-menu-options.patch
  66. 2 2
      build/patches/Remove-help-menu-item.patch
  67. 55 39
      build/patches/Remove-recent-tabs-signin.patch
  68. 135 0
      build/patches/Revert-Cleanup-Search-Ready-Omnibox-flag-since-it-has-launched.patch
  69. 37 0
      build/patches/Revert-Merge-to-M78-Enable-AImageReader-by-default.patch
  70. 2 2
      build/patches/Revert-Remove-UnifiedConsent-from-ChromeFeatureList.patch
  71. 100 115
      build/patches/Revert-Remove-pre-unified-consent-code-in-sync-and-privacy-directory.patch
  72. 1 1
      build/patches/Skip-the-first-run-and-metrics.patch
  73. 1 1
      build/patches/Switch-to-fstack-protector-strong.patch
  74. 4 4
      build/patches/Use-4-tile-rows-never-show-logo.patch
  75. 1 1
      build/patches/User-Agent-anonymize.patch
  76. 11 11
      build/patches/autofill-disable-autofill-download-manager.patch
  77. 8 8
      build/patches/build-remove-calling-untrusted-hooks.patch
  78. 1 1
      build/patches/disable-AdsBlockedInfoBar.patch
  79. 1 1
      build/patches/disable-background-sync-by-default.patch
  80. 1 1
      build/patches/disable-sensors-access-site-setting-by-default.patch
  81. 1 1
      build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch
  82. 1 1
      build/patches/first_run-deactivate-autoupdate-globally.patch
  83. 19 14
      build/patches/getClientRects-getBoundingClientRect-measureText-add-fingerprinting-mitigation.patch
  84. 1 1
      build/patches/google-cloud-messaging-disable-experiment-status-check.patch
  85. 149 82
      build/patches/kill-GCM.patch
  86. 1 1
      build/patches/kill-TOS-and-metrics-opt-out.patch
  87. 35 22
      build/patches/kill-Vision.patch
  88. 1 1
      build/patches/prefs-only-keep-cookies-until-exit.patch
  89. 10 10
      build/patches/safe_browsing-disable-cookie-transmission.patch
  90. 3 3
      build/patches/safe_browsing-disable-incident-reporting.patch
  91. 5 5
      build/patches/safe_browsing-disable-reporting-of-safebrowsing-override.patch
  92. 1 1
      build/patches/ungoogled-chromium-Always-use-local-DevTools-files-instead-of-remote-files-from-Google.patch
  93. 6 6
      build/patches/ungoogled-chromium-Disable-Gaia.patch
  94. 51 49
      build/patches/ungoogled-chromium-Disable-Google-host-detection.patch
  95. 1 1
      build/patches/ungoogled-chromium-Disable-intranet-redirect-detector.patch
  96. 1 1
      build/patches/ungoogled-chromium-Disable-profile-avatar-downloading.patch
  97. 9 17
      build/patches/ungoogled-chromium-Disable-translate-integration.patch
  98. 9 9
      build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch
  99. 2 1
      build/patches_list.txt

+ 7 - 0
CHANGELOG.md

@@ -1,3 +1,10 @@
+# 78.0.3904.63
+* replace Beta DoH service URL for Google (https://developers.google.com/speed/public-dns/docs/doh/migration)
+* disable AImageReaderMediaPlayer until upstream bug is fixed (https://bugs.chromium.org/p/chromium/issues/detail?id=977583)
+* disabled face detection provider
+* removed non-working SystemWebView adblock patch (not working since v77)
+* bring back some privacy options which upstream moved to Sync settings (fixes https://github.com/bromite/bromite/issues/383)
+
 # 77.0.3865.104
 * revert upstream commit for search privacy options and related translations removal (fixes https://github.com/bromite/bromite/issues/375)
 * remove unused patch for enabling subresource filter on all sites

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 82 - 51
build/filters/adblock_entries.h


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

@@ -69,7 +69,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
 +      sources += aom_ports_arm_sources
      }
      if (is_android) {
-       deps += [ "//third_party/android_sdk:cpu_features" ]
+       deps += [ "//third_party/android_ndk:cpu_features" ]
 diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
 --- a/third_party/libaom/libaom_srcs.gni
 +++ b/third_party/libaom/libaom_srcs.gni

+ 1 - 1
build/patches/Add-DuckDuckGo-Lite-search-engine.patch

@@ -11,7 +11,7 @@ Subject: Add DuckDuckGo Lite search engine
 diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
 --- a/components/search_engines/prepopulated_engines.json
 +++ b/components/search_engines/prepopulated_engines.json
-@@ -95,6 +95,16 @@
+@@ -91,6 +91,16 @@
        "id": 68
      },
  

+ 1 - 1
build/patches/Add-English-only-search-engine.patch

@@ -13,7 +13,7 @@ disable from all its searches RLZ and field experiments querystring parameters.
 diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
 --- a/components/search_engines/prepopulated_engines.json
 +++ b/components/search_engines/prepopulated_engines.json
-@@ -126,6 +126,27 @@
+@@ -122,6 +122,27 @@
        "id": 1
      },
  

+ 1 - 1
build/patches/Add-Qwant-search-engine.patch

@@ -12,7 +12,7 @@ Make search engine selectable in default list
 diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
 --- a/components/search_engines/prepopulated_engines.json
 +++ b/components/search_engines/prepopulated_engines.json
-@@ -187,6 +187,7 @@
+@@ -183,6 +183,7 @@
        "favicon_url": "https://www.qwant.com/favicon.ico",
        "search_url": "https://www.qwant.com/?q={searchTerms}&client=opensearch",
        "suggest_url": "https://api.qwant.com/api/suggest/?q={searchTerms}&client=opensearch",

+ 1 - 1
build/patches/Add-StartPage-search-engine.patch

@@ -11,7 +11,7 @@ Subject: Add StartPage search engine
 diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
 --- a/components/search_engines/prepopulated_engines.json
 +++ b/components/search_engines/prepopulated_engines.json
-@@ -197,6 +197,16 @@
+@@ -193,6 +193,16 @@
        "id": 56
      },
  

+ 57 - 85
build/patches/Add-a-flag-for-DNS-over-HTTPS.patch

@@ -10,28 +10,26 @@ Do not fallback to UDP when using DoH
 
 See also: https://tools.ietf.org/id/draft-ietf-doh-dns-over-https-14.txt
 ---
- chrome/browser/about_flags.cc                           | 11 +++++++++++
- chrome/browser/flag_descriptions.cc                     |  3 +++
- chrome/browser/flag_descriptions.h                      |  3 +++
- chrome/browser/net/system_network_context_manager.cc    | 17 ++++++++---------
- .../common/network_features.cc                          |  7 +++++--
- .../common/network_features.h                           |  5 ++++-
- .../common/network_switch_list.h                        |  4 ++++
- net/base/load_flags_list.h                              |  6 ++++++
- net/dns/dns_transaction.cc                              |  3 ++-
- net/url_request/url_request_http_job.cc                 | 16 +++++++++++-----
- 10 files changed, 57 insertions(+), 18 deletions(-)
+ chrome/browser/about_flags.cc                          | 11 +++++++++++
+ chrome/browser/net/system_network_context_manager.cc   | 18 +++++++++++-------
+ .../common/network_features.cc                         |  6 ++++++
+ .../common/network_features.h                          |  6 ++++++
+ .../common/network_switch_list.h                       |  4 ++++
+ net/base/load_flags_list.h                             |  6 ++++++
+ net/dns/dns_transaction.cc                             |  4 ++--
+ net/url_request/url_request_http_job.cc                | 16 +++++++++++-----
+ 8 files changed, 57 insertions(+), 14 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
-@@ -403,6 +403,14 @@ const FeatureEntry::FeatureVariation kCCTModuleCacheVariations[] = {
+@@ -417,6 +417,14 @@ const FeatureEntry::FeatureVariation kCCTModuleCacheVariations[] = {
       base::size(kCCTModuleCache_ThirtyMinutes), nullptr},
  };
  
 +const FeatureEntry::Choice kDnsOverHttpsChoices[] = {
 +    {features::kDnsOverHttpsChoiceDefault, "", ""},
-+    {features::kDnsOverHttpsChoiceGoogle, switches::kDnsOverHttpsServer, "https://dns.google.com/experimental"},
++    {features::kDnsOverHttpsChoiceGoogle, switches::kDnsOverHttpsServer, "https://dns.google/dns-query"},
 +    {features::kDnsOverHttpsChoiceCloudflare, switches::kDnsOverHttpsServer, "https://1.1.1.1/dns-query"},
 +    {features::kDnsOverHttpsChoiceQuad9, switches::kDnsOverHttpsServer, "https://9.9.9.9/dns-query"},
 +    {features::kDnsOverHttpsChoiceAdGuard, switches::kDnsOverHttpsServer, "https://dns.adguard.com/dns-query"}
@@ -39,8 +37,8 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 +
  #endif  // OS_ANDROID
  
- const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = {
-@@ -3438,6 +3446,9 @@ const FeatureEntry kFeatureEntries[] = {
+ const FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = {
+@@ -3578,6 +3586,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kEnableSyncUSSBookmarksName,
       flag_descriptions::kEnableSyncUSSBookmarksDescription, kOsAll,
       FEATURE_VALUE_TYPE(switches::kSyncUSSBookmarks)},
@@ -50,106 +48,79 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  
      {"enable-lookalike-url-navigation-suggestions",
       flag_descriptions::kLookalikeUrlNavigationSuggestionsName,
-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
-@@ -2182,6 +2182,9 @@ const char kAutoFetchOnNetErrorPageDescription[] =
-     "When enabled, and navigation fails with an offline error, schedule a "
-     "fetch of the page when online again.";
- 
-+const char kDnsOverHttpsName[] = "DNS over HTTPS";
-+const char kDnsOverHttpsDescription[] = "Enables DNS-over-HTTPS (experimental).";
-+
- const char kAutofillAccessoryViewName[] =
-     "Autofill suggestions as keyboard accessory view";
- const char kAutofillAccessoryViewDescription[] =
-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
-@@ -1294,6 +1294,9 @@ extern const char kAsyncDnsDescription[];
- extern const char kAutoFetchOnNetErrorPageName[];
- extern const char kAutoFetchOnNetErrorPageDescription[];
- 
-+extern const char kDnsOverHttpsName[];
-+extern const char kDnsOverHttpsDescription[];
-+
- extern const char kAutofillAccessoryViewName[];
- extern const char kAutofillAccessoryViewDescription[];
- 
 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
-@@ -23,6 +23,7 @@
+@@ -25,6 +25,7 @@
  #include "chrome/browser/chrome_content_browser_client.h"
  #include "chrome/browser/component_updater/crl_set_component_installer.h"
  #include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
 +#include "components/network_session_configurator/common/network_switches.h"
+ #include "chrome/browser/net/dns_util.h"
  #include "chrome/browser/safe_browsing/safe_browsing_service.h"
  #include "chrome/browser/ssl/ssl_config_service_manager.h"
- #include "chrome/common/channel_info.h"
-@@ -111,6 +112,7 @@ void GetStubResolverConfig(
-       if (!net::dns_util::IsValidDoHTemplate(
-               doh_server_list[i].GetString(),
-               doh_server_method_list[i].GetString())) {
-+        LOG(ERROR) << "Invalid DoH template: " << doh_server_list[i].GetString() << " with method " << doh_server_method_list[i].GetString();
+@@ -142,6 +143,7 @@ void GetStubResolverConfig(
+                      base::SPLIT_WANT_NONEMPTY)) {
+       if (!chrome_browser_net::IsValidDohTemplate(server_template,
+                                                   &server_method)) {
++        LOG(ERROR) << "Invalid DoH template: " << server_template << " with method " << server_method;
          continue;
        }
  
-@@ -378,15 +380,12 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -406,14 +408,16 @@ SystemNetworkContextManager::SystemNetworkContextManager(
                                      base::Value(ShouldEnableAsyncDns()));
-   base::ListValue default_doh_servers;
-   base::ListValue default_doh_server_methods;
+   std::string default_doh_mode = chrome_browser_net::kDnsOverHttpsModeOff;
+   std::string default_doh_templates = "";
 -  if (base::FeatureList::IsEnabled(features::kDnsOverHttps)) {
--    std::string server(variations::GetVariationParamValueByFeature(
--        features::kDnsOverHttps, "server"));
--    std::string method(variations::GetVariationParamValueByFeature(
--        features::kDnsOverHttps, "method"));
--    if (!server.empty()) {
--      default_doh_servers.AppendString(server);
--      default_doh_server_methods.AppendString(method);
+-    if (features::kDnsOverHttpsFallbackParam.Get()) {
+-      default_doh_mode = chrome_browser_net::kDnsOverHttpsModeAutomatic;
+-    } else {
+-      default_doh_mode = chrome_browser_net::kDnsOverHttpsModeSecure;
 -    }
+-    default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get();
++
 +  std::string server =
 +      base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
 +      switches::kDnsOverHttpsServer);
 +  if (!server.empty()) {
-+    default_doh_servers.AppendString(server);
-+    default_doh_server_methods.AppendString("POST");
++    default_doh_mode = chrome_browser_net::kDnsOverHttpsModeSecure;
++    // will use POST when URLs do not contain a 'dns' query parameter
++    default_doh_templates = server;
    }
-   local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsServers,
-                                     std::move(default_doh_servers));
++
+   local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsMode,
+                                     base::Value(default_doh_mode));
+   local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsTemplates,
 diff --git a/components/network_session_configurator/common/network_features.cc b/components/network_session_configurator/common/network_features.cc
 --- a/components/network_session_configurator/common/network_features.cc
 +++ b/components/network_session_configurator/common/network_features.cc
-@@ -8,7 +8,10 @@
+@@ -8,4 +8,10 @@
  
  namespace features {
  
--const base::Feature kDnsOverHttps{"dns-over-https",
--                                  base::FEATURE_DISABLED_BY_DEFAULT};
 +const char kDnsOverHttpsChoiceDefault[] = "Disabled",
 +                 kDnsOverHttpsChoiceGoogle[] = "Google",
 +                 kDnsOverHttpsChoiceCloudflare[] = "Cloudflare",
 +                 kDnsOverHttpsChoiceQuad9[] = "Quad9",
 +                 kDnsOverHttpsChoiceAdGuard[] = "AdGuard";
- 
++
  }  // namespace features
 diff --git a/components/network_session_configurator/common/network_features.h b/components/network_session_configurator/common/network_features.h
 --- a/components/network_session_configurator/common/network_features.h
 +++ b/components/network_session_configurator/common/network_features.h
-@@ -10,9 +10,12 @@
+@@ -10,6 +10,12 @@
  
  namespace features {
  
--// Enabled DNS over HTTPS
 +// DNS over HTTPS server endpoint choices
- // (https://tools.ietf.org/id/draft-ietf-doh-dns-over-https-12.txt).
- NETWORK_SESSION_CONFIGURATOR_EXPORT extern const base::Feature kDnsOverHttps;
++ // (https://tools.ietf.org/id/draft-ietf-doh-dns-over-https-12.txt).
 +NETWORK_SESSION_CONFIGURATOR_EXPORT extern const char kDnsOverHttpsChoiceDefault[],
 +   kDnsOverHttpsChoiceGoogle[], kDnsOverHttpsChoiceCloudflare[], kDnsOverHttpsChoiceQuad9[],
 +   kDnsOverHttpsChoiceAdGuard[];
- 
++
  }  // namespace features
  
+ #endif  // COMPONENTS_NETWORK_SESSION_CONFIGURATOR_COMMON_NETWORK_FEATURES_H_
 diff --git a/components/network_session_configurator/common/network_switch_list.h b/components/network_session_configurator/common/network_switch_list.h
 --- a/components/network_session_configurator/common/network_switch_list.h
 +++ b/components/network_session_configurator/common/network_switch_list.h
@@ -167,29 +138,30 @@ diff --git a/components/network_session_configurator/common/network_switch_list.
 diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
 --- a/net/base/load_flags_list.h
 +++ b/net/base/load_flags_list.h
-@@ -105,3 +105,9 @@ LOAD_FLAG(SKIP_VARY_CHECK, 1 << 16)
- // does not complete in 60 seconds, the cache treat the stale resource as
- // invalid, as it did not specify stale-while-revalidate.
- LOAD_FLAG(SUPPORT_ASYNC_REVALIDATION, 1 << 17)
+@@ -117,3 +117,9 @@ LOAD_FLAG(RESTRICTED_PREFETCH, 1 << 18)
+ // is considered privileged, and therefore this flag must only be set from a
+ // trusted process.
+ LOAD_FLAG(CAN_USE_RESTRICTED_PREFETCH, 1 << 19)
 +
 +// This load will not send Accept-Language or User-Agent headers, and not
 +// advertise brotli encoding.
 +// Used to comply with IETF (draft) DNS-over-HTTPS:
 +// "Implementors SHOULD NOT set non-essential HTTP headers in DoH client requests."
-+LOAD_FLAG(MINIMAL_HEADERS, 1 << 18)
++LOAD_FLAG(MINIMAL_HEADERS, 1 << 20)
 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
-@@ -392,6 +392,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
- 
-     request_->SetExtraRequestHeaders(extra_request_headers);
+@@ -403,7 +403,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_IGNORE_LIMITS | LOAD_MINIMAL_HEADERS |
-                            LOAD_BYPASS_PROXY);
+                            LOAD_BYPASS_PROXY |
+-                           LOAD_DISABLE_CERT_NETWORK_FETCHES);
++                           LOAD_DISABLE_CERT_NETWORK_FETCHES | LOAD_MINIMAL_HEADERS);
      request_->set_allow_credentials(false);
    }
-@@ -806,7 +807,7 @@ class DnsTransactionImpl : public DnsTransaction,
-         doh_attempt_(false),
+ 
+@@ -997,7 +997,7 @@ class DnsTransactionImpl : public DnsTransaction,
+         had_tcp_attempt_(false),
          first_server_index_(0),
          url_request_context_(url_request_context),
 -        request_priority_(DEFAULT_PRIORITY) {
@@ -200,7 +172,7 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
 --- a/net/url_request/url_request_http_job.cc
 +++ b/net/url_request/url_request_http_job.cc
-@@ -340,6 +340,7 @@ void URLRequestHttpJob::Start() {
+@@ -339,6 +339,7 @@ void URLRequestHttpJob::Start() {
    // plugin could set a referrer although sending the referrer is inhibited.
    request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
  
@@ -208,7 +180,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()) {
-@@ -355,11 +356,14 @@ void URLRequestHttpJob::Start() {
+@@ -354,11 +355,14 @@ void URLRequestHttpJob::Start() {
      request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
                                            referer_value);
    }

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

@@ -10,7 +10,7 @@ Offer auto-complete for the proxy page URL.
  chrome/android/java/res/values/values.xml          |   3 +
  .../android/java/res/xml/privacy_preferences.xml   |   4 +
  .../chrome_autocomplete_provider_client.cc         |   2 +
- chrome/browser/browser_resources.grd               |   2 +
+ chrome/browser/browser_resources.grd               |   6 +
  .../prefs/chrome_command_line_pref_store.cc        |   2 +-
  chrome/browser/resources/proxy_config.css          |  61 ++++
  chrome/browser/resources/proxy_config.html         |  78 ++++
@@ -26,7 +26,7 @@ Offer auto-complete for the proxy page URL.
  components/proxy_config/proxy_config_dictionary.h  |   6 +-
  net/proxy_resolution/proxy_config.cc               |  45 +++
  net/proxy_resolution/proxy_config.h                |   3 +
- 19 files changed, 911 insertions(+), 12 deletions(-)
+ 19 files changed, 915 insertions(+), 12 deletions(-)
  create mode 100644 chrome/browser/resources/proxy_config.css
  create mode 100644 chrome/browser/resources/proxy_config.html
  create mode 100644 chrome/browser/resources/proxy_config.js
@@ -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
-@@ -80,6 +80,9 @@
+@@ -76,6 +76,9 @@
      <integer name="list_item_level_selected">1</integer>
      <integer name="list_item_level_incognito">2</integer>
  
@@ -50,14 +50,14 @@ 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
 @@ -6,6 +6,10 @@
- <android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ <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
 +        android:key="proxy"
 +        android:title="@string/proxy_title"
 +        app:url="@string/proxy_url" />
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
+     <org.chromium.chrome.browser.preferences.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
@@ -75,15 +75,19 @@ 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
-@@ -211,6 +211,8 @@
-         <include name="IDR_SNIPPETS_INTERNALS_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\snippets_internals\snippets_internals.mojom-lite.js" use_base_dir="false" type="BINDATA" compress="gzip" />
+@@ -202,6 +202,12 @@
+         <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
        </if>
-       <include name="IDR_SUPERVISED_USER_INTERNALS_HTML" file="resources\supervised_user_internals\supervised_user_internals.html" allowexternalscript="true" compress="gzip" type="BINDATA" />
+ 
++      <!-- Bromite Proxy Configuration UI. -->
++      <if expr="is_android">
 +        <include name="IDR_PROXY_CONFIG_HTML" file="resources\proxy_config.html" flattenhtml="true" type="BINDATA" compress="gzip" />
 +        <include name="IDR_PROXY_CONFIG_JS" file="resources\proxy_config.js" type="BINDATA" compress="gzip" />
-       <include name="IDR_SUPERVISED_USER_INTERNALS_CSS" file="resources\supervised_user_internals\supervised_user_internals.css" compress="gzip" type="BINDATA" />
-       <include name="IDR_SUPERVISED_USER_INTERNALS_JS" file="resources\supervised_user_internals\supervised_user_internals.js" compress="gzip" type="BINDATA" />
-       <if expr="enable_hangout_services_extension">
++      </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" />
 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
@@ -505,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
-@@ -271,6 +271,8 @@ jumbo_split_static_library("ui") {
+@@ -275,6 +275,8 @@ jumbo_split_static_library("ui") {
      "webui/metrics_handler.h",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.h",
@@ -517,15 +521,15 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
 diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
-@@ -54,6 +54,7 @@
- #include "chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.h"
+@@ -55,6 +55,7 @@
+ #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
  #include "chrome/browser/ui/webui/policy_ui.h"
  #include "chrome/browser/ui/webui/predictors/predictors_ui.h"
 +#include "chrome/browser/ui/webui/proxy_config_ui.h"
  #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
  #include "chrome/browser/ui/webui/settings/settings_ui.h"
  #include "chrome/browser/ui/webui/settings_utils.h"
-@@ -386,6 +387,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -413,6 +414,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
@@ -602,7 +606,7 @@ new file mode 100644
 +  content::WebUIDataSource* source =
 +      content::WebUIDataSource::Create(chrome::kChromeUIProxyConfigHost);
 +
-+  source->SetJsonPath("strings.js");
++  source->UseStringsJs();
 +  source->AddResourcePath("proxy_config.js", IDR_PROXY_CONFIG_JS);
 +  source->SetDefaultResource(IDR_PROXY_CONFIG_HTML);
 +  return source;
@@ -977,7 +981,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
-@@ -185,6 +185,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
+@@ -189,6 +189,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
  const char kChromeUINativeScheme[] = "chrome-native";
  const char kChromeUIOfflineInternalsHost[] = "offline-internals";
  const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics";
@@ -986,15 +990,15 @@ 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
-@@ -444,6 +446,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) {
+@@ -456,6 +458,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) {
        kResetSubPage,
        kSmartLockSettingsSubPage,
        kSmbSharesSubPage,
 +      kChromeUIProxyConfigHost,
        kStorageSubPage,
        kStylusSubPage,
-       // sync is both an OS and browser sub page, but prefer the OS version
-@@ -543,6 +546,7 @@ const char* const kChromeHostURLs[] = {
+       kSwitchAccessSubPage,
+@@ -556,6 +559,7 @@ const char* const kChromeHostURLs[] = {
  #if !defined(OS_ANDROID)
  #if !defined(OS_CHROMEOS)
      kChromeUIAppLauncherPageHost,
@@ -1005,7 +1009,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
 diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
 --- a/chrome/common/webui_url_constants.h
 +++ b/chrome/common/webui_url_constants.h
-@@ -108,6 +108,8 @@ extern const char kChromeUIMemoryInternalsHost[];
+@@ -110,6 +110,8 @@ extern const char kChromeUIMemoryInternalsHost[];
  extern const char kChromeUINTPTilesInternalsHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINetExportHost[];

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

@@ -30,16 +30,18 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/chrome/android/java/res/xml/privacy_preferences.xml
-@@ -28,4 +28,9 @@
-         android:title="@string/clear_browsing_data_title"
-         android:summary="@string/clear_browsing_data_summary"
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
+@@ -21,6 +21,11 @@
+         android:title="@string/can_make_payment_title"
+         android:summary="@string/settings_can_make_payment_toggle_label" />
+     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="always_incognito"
 +        android:title="@string/always_incognito_title"
 +        android:summary="@string/always_incognito_summary"
 +        android:defaultValue="false" />
- </android.support.v7.preference.PreferenceScreen>
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+         android:key="preload_pages"
+         android:title="@string/preload_pages_title"
+         android:summary="@string/preload_pages_summary"
 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
@@ -130,7 +132,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      /**
       * Timeout in ms for reading PartnerBrowserCustomizations provider.
       */
-@@ -1659,6 +1661,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1650,6 +1652,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }
@@ -151,16 +153,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu
  import org.chromium.base.ObservableSupplier;
  import org.chromium.base.VisibleForTesting;
  import org.chromium.base.metrics.RecordUserAction;
-@@ -56,6 +57,8 @@ class AppMenuHandlerImpl implements AppMenuHandler, StartStopWithNativeObserver,
-     private @Nullable Callback<OverviewModeBehavior> mOverviewModeSupplierCallback;
+@@ -57,6 +58,8 @@ class AppMenuHandlerImpl
      private @Nullable OverviewModeBehavior mOverviewModeBehavior;
+     private OverviewModeBehavior.OverviewModeObserver mOverviewModeObserver;
  
 +    private static final String PREF_ALWAYS_INCOGNITO = "always_incognito";
 +
      /**
       * The resource id of the menu item to highlight when the menu next opens. A value of
       * {@code null} means no item will be highlighted.  This value will be cleared after the menu is
-@@ -237,6 +240,14 @@ class AppMenuHandlerImpl implements AppMenuHandler, StartStopWithNativeObserver,
+@@ -267,6 +270,14 @@ class AppMenuHandlerImpl
          if (mDelegate.shouldShowHeader(appRect.height())) {
              headerResourceId = mDelegate.getHeaderResourceId();
          }
@@ -184,9 +186,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
  import org.chromium.base.metrics.RecordHistogram;
 +import org.chromium.base.ContextUtils;
  import org.chromium.chrome.R;
+ import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabPanel;
- import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
-@@ -44,6 +45,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -46,6 +47,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
      private static final String TAG = "CCMenuPopulator";
      private final ContextMenuItemDelegate mDelegate;
      private final @ContextMenuMode int mMode;
@@ -194,7 +196,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
  
      /**
       * Defines the Groups of each Context Menu Item
-@@ -270,7 +272,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -298,7 +300,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
              if (FirstRunStatus.getFirstRunFlowComplete() && mMode == ContextMenuMode.NORMAL
                      && !isEmptyUrl(params.getUrl())
                      && UrlUtilities.isAcceptedScheme(params.getUrl())) {
@@ -211,8 +213,8 @@ 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
-@@ -7,8 +7,10 @@ package org.chromium.chrome.browser.tabmodel;
- import android.content.Intent;
+@@ -8,8 +8,10 @@ import android.content.Intent;
+ import android.support.annotation.Nullable;
  import android.text.TextUtils;
  
 +import org.chromium.base.ContextUtils;
@@ -222,7 +224,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;
-@@ -16,6 +18,7 @@ import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
+@@ -17,6 +19,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;
@@ -230,7 +232,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;
-@@ -36,6 +39,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -37,6 +40,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
  
      private final ChromeActivity mActivity;
      private final boolean mIncognito;
@@ -238,7 +240,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  
      private WindowAndroid mNativeWindow;
      private TabModel mTabModel;
-@@ -46,6 +50,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -47,6 +51,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
          mActivity = activity;
          mNativeWindow = nativeWindow;
          mIncognito = incognito;
@@ -250,7 +252,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
      }
  
      @Override
-@@ -170,6 +179,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -171,6 +180,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                          tab.getWebContents());
              }
  
@@ -261,7 +263,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
              mTabModel.addTab(tab, position, type);
              return tab;
          } finally {
-@@ -198,6 +211,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -199,6 +212,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                            .setWindow(mNativeWindow)
                            .setLaunchType(type)
                            .build();
@@ -273,7 +275,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          tab.initialize(webContents, delegateFactory, !openInForeground, null, false);
          mTabModel.addTab(tab, position, type);
          return true;
-@@ -241,7 +259,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -242,7 +260,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
       */
      public Tab launchUrlFromExternalApp(String url, String referer, String headers,
              String appId, boolean forceNewTab, Intent intent, long intentTimestamp) {
@@ -281,7 +283,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
-@@ -306,6 +323,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -307,6 +324,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                  state.isIncognito());
          tab.initialize(null, createDefaultTabDelegateFactory(), !selectTab, state, false);
          assert state.isIncognito() == mIncognito;
@@ -296,7 +298,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
 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
-@@ -674,6 +674,14 @@ CHAR-LIMIT guidelines:
+@@ -689,6 +689,14 @@ CHAR-LIMIT guidelines:
          Search and site suggestions disabled
        </message>
  

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

@@ -16,7 +16,7 @@ Completely remove contacts picker permission from the file dialog
  .../chrome/browser/bookmarks/BookmarkPage.java     |   1 +
  .../java/strings/android_chrome_strings.grd        |   6 +
  chrome/browser/BUILD.gn                            |   8 +-
- .../browser/android/bookmarks/bookmark_bridge.cc   | 216 +++++++++++++++++++++
+ .../browser/android/bookmarks/bookmark_bridge.cc   | 215 +++++++++++++++++++++
  chrome/browser/android/bookmarks/bookmark_bridge.h |  20 +-
  chrome/browser/importer/profile_writer.cc          |  12 ++
  chrome/browser/importer/profile_writer.h           |   6 +
@@ -28,7 +28,7 @@ Completely remove contacts picker permission from the file dialog
  ui/shell_dialogs/select_file_dialog.h              |   2 +
  ui/shell_dialogs/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, 446 insertions(+), 14 deletions(-)
 
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
@@ -68,7 +68,7 @@ diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
-@@ -86,6 +86,12 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -90,6 +90,12 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
          } else if (menuItem.getItemId() == R.id.search_menu_id) {
              mDelegate.openSearchUI();
              return true;
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          }
  
          SelectionDelegate<BookmarkId> selectionDelegate = mDelegate.getSelectionDelegate();
-@@ -129,6 +135,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -141,6 +147,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
      void showLoadingUi() {
          setTitle(null);
          setNavigationButton(NAVIGATION_BUTTON_NONE);
@@ -90,7 +90,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          getMenu().findItem(R.id.search_menu_id).setVisible(false);
          getMenu().findItem(R.id.edit_menu_id).setVisible(false);
      }
-@@ -138,6 +146,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -150,6 +158,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
          super.showNormalView();
  
          if (mDelegate == null) {
@@ -99,7 +99,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
              getMenu().findItem(R.id.search_menu_id).setVisible(false);
              getMenu().findItem(R.id.edit_menu_id).setVisible(false);
          }
-@@ -170,6 +180,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -182,6 +192,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
      public void onFolderStateSet(BookmarkId folder) {
          mCurrentFolder = mDelegate.getModel().getBookmarkById(folder);
  
@@ -169,9 +169,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  import android.text.TextUtils;
  import android.util.Pair;
  
-@@ -13,11 +17,15 @@ import org.chromium.base.ObserverList;
- import org.chromium.base.VisibleForTesting;
+@@ -14,11 +18,15 @@ import org.chromium.base.VisibleForTesting;
  import org.chromium.base.annotations.CalledByNative;
+ import org.chromium.base.annotations.NativeMethods;
  import org.chromium.base.metrics.RecordHistogram;
 +import org.chromium.chrome.browser.document.ChromeLauncherActivity;
 +import org.chromium.chrome.browser.IntentHandler;
@@ -185,7 +185,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  
  import java.util.ArrayList;
  import java.util.List;
-@@ -506,6 +514,24 @@ public class BookmarkBridge {
+@@ -525,6 +533,24 @@ public class BookmarkBridge {
      }
  
      /**
@@ -194,7 +194,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +     */
 +    public void importBookmarks(WindowAndroid window) {
 +        assert mIsNativeBookmarkModelLoaded;
-+        nativeImportBookmarks(mNativeBookmarkBridge, window);
++        BookmarkBridgeJni.get().importBookmarks(mNativeBookmarkBridge, BookmarkBridge.this, window);
 +    }
 +
 +    /**
@@ -203,14 +203,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +     */
 +    public void exportBookmarks() {
 +        assert mIsNativeBookmarkModelLoaded;
-+        nativeExportBookmarks(mNativeBookmarkBridge);
++        BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, BookmarkBridge.this);
 +    }
 +
 +    /**
       * Synchronously gets a list of bookmarks that match the specified search query.
       * @param query Keyword used for searching bookmarks.
       * @param maxNumberOfResult Maximum number of result to fetch.
-@@ -848,6 +874,24 @@ public class BookmarkBridge {
+@@ -877,6 +903,24 @@ public class BookmarkBridge {
          depthList.add(depth);
      }
  
@@ -235,15 +235,15 @@ 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++) {
-@@ -914,6 +958,8 @@ public class BookmarkBridge {
-             boolean getFolders, boolean getBookmarks, List<BookmarkId> bookmarksList);
-     private native BookmarkId nativeGetChildAt(long nativeBookmarkBridge, long id, int type,
-             int index);
-+    private native void nativeImportBookmarks(long nativeBookmarkBridge, WindowAndroid window);
-+    private native void nativeExportBookmarks(long nativeBookmarkBridge);
-     private native int nativeGetTotalBookmarkCount(long nativeBookmarkBridge, long id, int type);
-     private native void nativeSetBookmarkTitle(long nativeBookmarkBridge, long id, int type,
-             String title);
+@@ -943,6 +987,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);
++        void importBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window);
++        void exportBookmarks(long nativeBookmarkBridge, BookmarkBridge caller);
+         BookmarkId getChildAt(
+                 long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, int index);
+         int getTotalBookmarkCount(
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java
@@ -291,7 +291,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;
-@@ -358,6 +361,13 @@ public class BookmarkManager
+@@ -362,6 +365,13 @@ public class BookmarkManager
      }
  
      /**
@@ -336,7 +336,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 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
-@@ -233,6 +233,12 @@ CHAR-LIMIT guidelines:
+@@ -236,6 +236,12 @@ CHAR-LIMIT guidelines:
        <message name="IDS_SEARCH" desc="The label for a search button.">
          Search
        </message>
@@ -352,7 +352,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -170,6 +170,10 @@ jumbo_split_static_library("browser") {
+@@ -174,6 +174,10 @@ jumbo_split_static_library("browser") {
      "bitmap_fetcher/bitmap_fetcher_service.h",
      "bitmap_fetcher/bitmap_fetcher_service_factory.cc",
      "bitmap_fetcher/bitmap_fetcher_service_factory.h",
@@ -363,7 +363,7 @@ 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",
-@@ -2921,8 +2925,6 @@ jumbo_split_static_library("browser") {
+@@ -3006,8 +3010,6 @@ jumbo_split_static_library("browser") {
        "badging/badge_manager_factory.h",
        "banners/app_banner_manager_desktop.cc",
        "banners/app_banner_manager_desktop.h",
@@ -372,7 +372,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "certificate_viewer.h",
        "chrome_browser_field_trials_desktop.cc",
        "chrome_browser_field_trials_desktop.h",
-@@ -3034,8 +3036,6 @@ jumbo_split_static_library("browser") {
+@@ -3114,8 +3116,6 @@ jumbo_split_static_library("browser") {
        "importer/importer_uma.h",
        "importer/in_process_importer_bridge.cc",
        "importer/in_process_importer_bridge.h",
@@ -384,7 +384,7 @@ 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
-@@ -38,6 +38,21 @@
+@@ -41,6 +41,21 @@
  #include "components/undo/undo_manager.h"
  #include "content/public/browser/browser_thread.h"
  
@@ -406,7 +406,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;
-@@ -55,6 +70,57 @@ using bookmarks::BookmarkPermanentNode;
+@@ -58,6 +73,56 @@ using bookmarks::BookmarkPermanentNode;
  using bookmarks::BookmarkType;
  using content::BrowserThread;
  
@@ -434,8 +434,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
 +  // that we support.
 +  if (url.SchemeIs(content::kChromeUIScheme) ||
 +      url.SchemeIs(url::kAboutScheme)) {
-+    if (url.host_piece() == chrome::kChromeUIUberHost ||
-+        url.host_piece() == chrome::kChromeUIAboutHost)
++    if (url.host_piece() == chrome::kChromeUIAboutHost)
 +      return true;
 +
 +    GURL fixed_url(url_formatter::FixupURL(url.spec(), std::string()));
@@ -464,7 +463,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  namespace {
  
  class BookmarkTitleComparer {
-@@ -131,6 +197,10 @@ BookmarkBridge::~BookmarkBridge() {
+@@ -134,6 +199,10 @@ BookmarkBridge::~BookmarkBridge() {
    bookmark_model_->RemoveObserver(this);
    if (partner_bookmarks_shim_)
      partner_bookmarks_shim_->RemoveObserver(this);
@@ -475,7 +474,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  }
  
  void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) {
-@@ -444,6 +514,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
+@@ -475,6 +544,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
    return count;
  }
  
@@ -631,7 +630,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
 diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h
 --- a/chrome/browser/android/bookmarks/bookmark_bridge.h
 +++ b/chrome/browser/android/bookmarks/bookmark_bridge.h
-@@ -13,6 +13,8 @@
+@@ -16,6 +16,8 @@
  #include "components/bookmarks/browser/base_bookmark_model_observer.h"
  #include "components/bookmarks/common/android/bookmark_id.h"
  #include "components/prefs/pref_change_registrar.h"
@@ -640,7 +639,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
  
  namespace bookmarks {
  class BookmarkModel;
-@@ -26,7 +28,8 @@ class Profile;
+@@ -29,7 +31,8 @@ class Profile;
  // bookmark page. This fetches the bookmarks, title, urls, folder
  // hierarchy.
  class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
@@ -650,7 +649,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
   public:
    BookmarkBridge(JNIEnv* env,
                   const base::android::JavaRef<jobject>& obj,
-@@ -36,6 +39,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
+@@ -39,6 +42,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
    bool IsDoingExtensiveChanges(JNIEnv* env,
                                 const base::android::JavaParamRef<jobject>& obj);
  
@@ -660,10 +659,10 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
 +                    void* params) override;
 +  void FileSelectionCanceled(void* params) override;
 +
-   jboolean IsEditBookmarksEnabled(
-       JNIEnv* env,
-       const base::android::JavaParamRef<jobject>& obj);
-@@ -122,6 +131,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
+   jboolean IsEditBookmarksEnabled(JNIEnv* env);
+ 
+   void LoadEmptyPartnerBookmarkShimForTesting(
+@@ -129,6 +138,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
                               jlong id,
                               jint type);
  
@@ -677,7 +676,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
    void SetBookmarkTitle(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& obj,
                          jlong id,
-@@ -267,12 +283,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
+@@ -274,12 +290,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
    void ShimBeingDeleted(PartnerBookmarksShim* shim) override;
  
    Profile* profile_;
@@ -753,7 +752,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/
 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") {
+@@ -440,6 +440,9 @@ static_library("common") {
      sources += [
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.h",
@@ -766,7 +765,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
-@@ -64,8 +64,6 @@ static_library("utility") {
+@@ -66,8 +66,6 @@ static_library("utility") {
  
    if (!is_android) {
      sources += [
@@ -775,7 +774,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",
-@@ -163,6 +161,11 @@ static_library("utility") {
+@@ -160,6 +158,11 @@ static_library("utility") {
      }
    }
  
@@ -896,7 +895,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
-@@ -32,6 +32,7 @@ import org.chromium.base.task.PostTask;
+@@ -33,6 +33,7 @@ import org.chromium.base.task.PostTask;
  import org.chromium.base.task.TaskTraits;
  import org.chromium.ui.PhotoPickerListener;
  import org.chromium.ui.R;
@@ -904,7 +903,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;
-@@ -51,6 +52,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -52,6 +53,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/";
@@ -912,7 +911,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 + "*";
-@@ -129,6 +131,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -130,6 +132,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          mFileTypes = fileTypes;
      }
  
@@ -924,7 +923,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/*")
-@@ -156,7 +163,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -157,7 +164,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          List<String> missingPermissions = new ArrayList<>();
          String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE;
          boolean shouldUsePhotoPicker = shouldUsePhotoPicker();
@@ -933,7 +932,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())
-@@ -184,7 +191,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -185,7 +192,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
                          }
  
                          // TODO(finnur): Remove once we figure out the cause of crbug.com/950024.
@@ -942,7 +941,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",
-@@ -198,7 +205,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -199,7 +206,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
                              }
                          }
  
@@ -951,7 +950,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
                              onFileNotSelected();
                              return;
                          }
-@@ -347,6 +354,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -348,6 +355,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
              }
              if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType);
          }
@@ -959,7 +958,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
          return mimeTypes;
      }
  
-@@ -619,6 +627,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -625,6 +633,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          return countAcceptTypesFor(specificType) > 0;
      }
  

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

@@ -13,7 +13,7 @@ Subject: Add custom tab intents privacy option
 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
-@@ -18,6 +18,9 @@
+@@ -14,6 +14,9 @@
      <item name="top_controls_show_threshold" format="float" type="dimen">0.5</item>
      <item name="top_controls_hide_threshold" format="float" type="dimen">0.5</item>
  
@@ -26,22 +26,22 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/chrome/android/java/res/xml/privacy_preferences.xml
-@@ -23,6 +23,11 @@
-         android:key="contextual_search"
-         android:title="@string/contextual_search_title"
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.ContextualSearchPreferenceFragment" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
+@@ -30,6 +30,11 @@
+         android:title="@string/preload_pages_title"
+         android:summary="@string/preload_pages_summary"
+         android:persistent="false" />
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="allow_custom_tab_intents"
 +        android:title="@string/allow_custom_tab_intents_title"
 +        android:summary="@string/allow_custom_tab_intents_summary"
 +        android:defaultValue="false" />
-     <android.support.v7.preference.Preference
-         android:key="clear_browsing_data"
-         android:title="@string/clear_browsing_data_title"
+     <Preference
+         android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
+         android:key="do_not_track"
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
-@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
+@@ -43,6 +43,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
  import org.chromium.chrome.browser.notifications.NotificationPlatformBridge;
  import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
  import org.chromium.chrome.browser.profiles.Profile;
@@ -49,7 +49,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
  import org.chromium.chrome.browser.searchwidget.SearchActivity;
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.util.FeatureUtilities;
-@@ -271,6 +272,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
+@@ -273,6 +274,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
       */
      public static boolean isCustomTabIntent(Intent intent) {
          if (intent == null) return false;
@@ -62,14 +62,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
 @@ -43,6 +43,8 @@ public class PrivacyPreferences
  
-     private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
+     private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
 +    public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
 +
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
          PrivacyPreferencesManager privacyPrefManager = PrivacyPreferencesManager.getInstance();
-@@ -84,6 +86,10 @@ public class PrivacyPreferences
+@@ -99,6 +101,10 @@ public class PrivacyPreferences
          String key = preference.getKey();
          if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
              PrefServiceBridge.getInstance().setSearchSuggestEnabled((boolean) newValue);
@@ -80,12 +80,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          }
  
          return true;
-@@ -119,6 +125,11 @@ public class PrivacyPreferences
+@@ -134,6 +140,11 @@ public class PrivacyPreferences
                      prefServiceBridge.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
          }
  
-+        ChromeBaseCheckBoxPreferenceCompat allowCustomTabIntentsPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_ALLOW_CUSTOM_TAB_INTENTS);
++        ChromeBaseCheckBoxPreference allowCustomTabIntentsPref =
++                (ChromeBaseCheckBoxPreference) findPreference(PREF_ALLOW_CUSTOM_TAB_INTENTS);
 +        allowCustomTabIntentsPref.setOnPreferenceChangeListener(this);
 +        allowCustomTabIntentsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
 +
@@ -95,7 +95,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 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
-@@ -3944,6 +3944,13 @@ The site does NOT gain access to the camera. The camera images are only visible
+@@ -4026,6 +4026,13 @@ The site does NOT gain access to the camera. The camera images are only visible
        <message name="IDS_INCOGNITO_DISCLOSURE_CHECKBOX_TEXT" desc="Text for checkbox inviting to close incognito tabs in incognito disclosure dialog." translateable="false">
           Close other incognito tabs
        </message>

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

@@ -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
-@@ -2148,6 +2148,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2137,6 +2137,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
                      new AddToHomescreenManager(this, currentTab);
              addToHomescreenManager.start();
              RecordUserAction.record("MobileMenuAddToHomescreen");
@@ -53,7 +53,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife
 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
-@@ -2938,6 +2938,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -2953,6 +2953,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>

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

@@ -12,14 +12,14 @@ with limited CPU/memory resources and it is disabled by default.
  .../common/network_features.cc                          |  3 +++
  .../common/network_features.h                           |  4 ++++
  .../common/network_switch_list.h                        |  4 ++++
- components/url_formatter/top_domains/BUILD.gn           |  1 +
+ .../url_formatter/spoof_checks/top_domains/BUILD.gn     |  1 +
  net/socket/client_socket_pool_manager.cc                | 17 +++++++++++++++++
  8 files changed, 44 insertions(+)
 
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -593,6 +593,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+@@ -676,6 +676,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 ==
-@@ -2363,6 +2368,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2533,6 +2538,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kPassiveDocumentEventListenersName,
       flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kPassiveDocumentEventListeners)},
@@ -44,7 +44,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1219,6 +1219,10 @@ const char kLookalikeUrlNavigationSuggestionsDescription[] =
+@@ -1240,6 +1240,10 @@ const char kLookalikeUrlNavigationSuggestionsDescription[] =
  const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure";
  const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
  
@@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -742,6 +742,9 @@ extern const char kMarkHttpAsWarning[];
+@@ -761,6 +761,9 @@ extern const char kMarkHttpAsWarning[];
  extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[];
  extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
  
@@ -93,8 +93,8 @@ diff --git a/components/network_session_configurator/common/network_features.h b
 +                 kMaxConnectionsPerHostChoice15[];
 +
  // DNS over HTTPS server endpoint choices
- // (https://tools.ietf.org/id/draft-ietf-doh-dns-over-https-12.txt).
- NETWORK_SESSION_CONFIGURATOR_EXPORT extern const base::Feature kDnsOverHttps;
+  // (https://tools.ietf.org/id/draft-ietf-doh-dns-over-https-12.txt).
+ NETWORK_SESSION_CONFIGURATOR_EXPORT extern const char kDnsOverHttpsChoiceDefault[],
 diff --git a/components/network_session_configurator/common/network_switch_list.h b/components/network_session_configurator/common/network_switch_list.h
 --- a/components/network_session_configurator/common/network_switch_list.h
 +++ b/components/network_session_configurator/common/network_switch_list.h
@@ -109,10 +109,10 @@ diff --git a/components/network_session_configurator/common/network_switch_list.
  // Ignores certificate-related errors.
  NETWORK_SWITCH(kIgnoreCertificateErrors, "ignore-certificate-errors")
  
-diff --git a/components/url_formatter/top_domains/BUILD.gn b/components/url_formatter/top_domains/BUILD.gn
---- a/components/url_formatter/top_domains/BUILD.gn
-+++ b/components/url_formatter/top_domains/BUILD.gn
-@@ -76,6 +76,7 @@ executable("make_top_domain_list_for_edit_distance") {
+diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+@@ -78,6 +78,7 @@ executable("make_top_domain_list_for_edit_distance") {
      "//base",
      "//base:i18n",
      "//third_party/icu",
@@ -123,7 +123,7 @@ diff --git a/components/url_formatter/top_domains/BUILD.gn b/components/url_form
 diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc
 --- a/net/socket/client_socket_pool_manager.cc
 +++ b/net/socket/client_socket_pool_manager.cc
-@@ -19,6 +19,10 @@
+@@ -20,6 +20,10 @@
  #include "net/socket/client_socket_pool.h"
  #include "net/socket/connect_job.h"
  #include "net/ssl/ssl_config.h"
@@ -134,7 +134,7 @@ diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket
  
  namespace net {
  
-@@ -184,6 +188,19 @@ void ClientSocketPoolManager::set_max_sockets_per_pool(
+@@ -185,6 +189,19 @@ void ClientSocketPoolManager::set_max_sockets_per_pool(
  int ClientSocketPoolManager::max_sockets_per_group(
      HttpNetworkSession::SocketPoolType pool_type) {
    DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES);

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

@@ -4,15 +4,41 @@ Subject: Add flag to control video playback resume feature
 
 Disable it by default on Android as it is everywhere else
 ---
+ chrome/browser/about_flags.cc       | 8 ++++----
  chrome/browser/flag_descriptions.cc | 5 +++++
  chrome/browser/flag_descriptions.h  | 3 +++
  media/base/media_switches.cc        | 6 +-----
- 3 files changed, 9 insertions(+), 5 deletions(-)
+ 4 files changed, 13 insertions(+), 9 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
+@@ -1580,6 +1580,10 @@ const FeatureEntry kFeatureEntries[] = {
+     {"enable-webassembly-threads", flag_descriptions::kEnableWasmThreadsName,
+      flag_descriptions::kEnableWasmThreadsDescription, kOsAll,
+      FEATURE_VALUE_TYPE(features::kWebAssemblyThreads)},
++    {"resume-background-video",
++     flag_descriptions::kResumeBackgroundVideoName,
++     flag_descriptions::kResumeBackgroundVideoDescription, kOsAll,
++     FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)},
+     {"shared-array-buffer", flag_descriptions::kEnableSharedArrayBufferName,
+      flag_descriptions::kEnableSharedArrayBufferDescription, kOsAll,
+      FEATURE_VALUE_TYPE(features::kSharedArrayBuffer)},
+@@ -1603,10 +1607,6 @@ const FeatureEntry kFeatureEntries[] = {
+      FEATURE_VALUE_TYPE(features::kAppNotificationStatusMessaging)},
+ #endif  // OS_ANDROID
+     {"enable-devtools-experiments", flag_descriptions::kDevtoolsExperimentsName,
+-    {"resume-background-video",
+-     flag_descriptions::kResumeBackgroundVideoName,
+-     flag_descriptions::kResumeBackgroundVideoDescription, kOsAll,
+-     FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)},
+      flag_descriptions::kDevtoolsExperimentsDescription, kOsDesktop,
+      SINGLE_VALUE_TYPE(switches::kEnableDevToolsExperiments)},
+     {"silent-debugger-extension-api",
 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
-@@ -848,6 +848,11 @@ const char kMemlogStackModeNative[] = "Native";
+@@ -876,6 +876,11 @@ const char kMemlogStackModeNative[] = "Native";
  const char kMemlogStackModeNativeWithThreadNames[] = "Native with thread names";
  const char kMemlogStackModePseudo[] = "Trace events";
  
@@ -27,7 +53,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
-@@ -501,6 +501,9 @@ extern const char kEnablePortalsDescription[];
+@@ -520,6 +520,9 @@ extern const char kEnablePortalsDescription[];
  extern const char kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  

+ 19 - 19
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 ++++++
- components/url_formatter/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 ++
+ 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 ++++++
+ components/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(-)
 
 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
-@@ -3037,6 +3037,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3193,6 +3193,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
-@@ -2394,6 +2394,10 @@ const char kForegroundNotificationManagerDescription[] =
+@@ -2512,6 +2512,10 @@ const char kForegroundNotificationManagerDescription[] =
  const char kHomePageButtonName[] = "Force Enable Home Page Button";
  const char kHomePageButtonDescription[] = "Displays a home button if enabled.";
  
@@ -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
-@@ -504,6 +504,9 @@ extern const char kEnableNewDownloadBackendDescription[];
+@@ -523,6 +523,9 @@ extern const char kEnableNewDownloadBackendDescription[];
  extern const char kEnablePortalsName[];
  extern const char kEnablePortalsDescription[];
  
@@ -85,10 +85,10 @@ diff --git a/components/subresource_filter/tools/BUILD.gn b/components/subresour
      ]
    }
  
-diff --git a/components/url_formatter/top_domains/BUILD.gn b/components/url_formatter/top_domains/BUILD.gn
---- a/components/url_formatter/top_domains/BUILD.gn
-+++ b/components/url_formatter/top_domains/BUILD.gn
-@@ -76,7 +76,8 @@ executable("make_top_domain_list_for_edit_distance") {
+diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+@@ -78,7 +78,8 @@ executable("make_top_domain_list_for_edit_distance") {
      "//base",
      "//base:i18n",
      "//third_party/icu",
@@ -101,7 +101,7 @@ diff --git a/components/url_formatter/top_domains/BUILD.gn b/components/url_form
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/net/dns/host_resolver_manager.cc
-@@ -86,6 +86,7 @@
+@@ -87,6 +87,7 @@
  #include "net/socket/client_socket_factory.h"
  #include "net/socket/datagram_client_socket.h"
  #include "net/url_request/url_request_context.h"
@@ -109,7 +109,7 @@ 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)
-@@ -3178,8 +3179,13 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
+@@ -3209,8 +3210,13 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
    bool cached = true;
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
        kIPv6ProbePeriodMs) {
@@ -128,7 +128,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 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
-@@ -50,6 +50,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT};
+@@ -46,6 +46,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT};
  const base::Feature kThrottleDelayable{"ThrottleDelayable",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
  
@@ -142,7 +142,7 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c
 diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h
 --- a/services/network/public/cpp/features.h
 +++ b/services/network/public/cpp/features.h
-@@ -18,6 +18,8 @@ extern const base::Feature kNetworkErrorLogging;
+@@ -19,6 +19,8 @@ extern const base::Feature kNetworkErrorLogging;
  COMPONENT_EXPORT(NETWORK_CPP)
  extern const base::Feature kNetworkService;
  COMPONENT_EXPORT(NETWORK_CPP)

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

@@ -20,25 +20,25 @@ 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
-@@ -2437,6 +2437,12 @@ const FeatureEntry kFeatureEntries[] = {
-     {"enable-generic-sensor", flag_descriptions::kEnableGenericSensorName,
-      flag_descriptions::kEnableGenericSensorDescription, kOsAll,
-      FEATURE_VALUE_TYPE(features::kGenericSensor)},
+@@ -1593,6 +1593,12 @@ const FeatureEntry kFeatureEntries[] = {
+     {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName,
+      flag_descriptions::kGpuRasterizationDescription, kOsAll,
+      MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)},
 +    {"enable-device-motion", flag_descriptions::kEnableDeviceMotionName,
 +     flag_descriptions::kEnableDeviceMotionDescription, kOsAll,
 +     FEATURE_VALUE_TYPE(features::kDeviceMotion)},
 +    {"enable-device-orientation", flag_descriptions::kEnableDeviceOrientationName,
 +     flag_descriptions::kEnableDeviceOrientationDescription, kOsAll,
 +     FEATURE_VALUE_TYPE(features::kDeviceOrientation)},
-     {"enable-generic-sensor-extra-classes",
-      flag_descriptions::kEnableGenericSensorExtraClassesName,
-      flag_descriptions::kEnableGenericSensorExtraClassesDescription, kOsAll,
+     {"enable-oop-rasterization", flag_descriptions::kOopRasterizationName,
+      flag_descriptions::kOopRasterizationDescription, kOsAll,
+      MULTI_VALUE_TYPE(kEnableOopRasterizationChoices)},
 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
-@@ -620,6 +620,14 @@ const char kEnableGenericSensorDescription[] =
-     "Accelerometer, LinearAccelerationSensor, Gyroscope, "
-     "AbsoluteOrientationSensor and RelativeOrientationSensor interfaces.";
+@@ -644,6 +644,14 @@ const char kWinrtSensorsImplementationDescription[] =
+     "Enables usage of the Windows.Devices.Sensors WinRT APIs on Windows for "
+     "sensors";
  
 +const char kEnableDeviceMotionName[] = "Enable device motion";
 +const char kEnableDeviceMotionDescription[] =
@@ -54,9 +54,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
-@@ -379,6 +379,12 @@ extern const char kWinrtSensorsImplementationDescription[];
- extern const char kEnableGenericSensorName[];
- extern const char kEnableGenericSensorDescription[];
+@@ -398,6 +398,12 @@ extern const char kEnableTLS13EarlyDataDescription[];
+ extern const char kWinrtSensorsImplementationName[];
+ extern const char kWinrtSensorsImplementationDescription[];
  
 +extern const char kEnableDeviceMotionName[];
 +extern const char kEnableDeviceMotionDescription[];
@@ -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 SetIndividualRuntimeFeatures(
+@@ -84,6 +84,9 @@ void SetIndividualRuntimeFeatures(
        base::FeatureList::IsEnabled(features::kSharedArrayBuffer) ||
        base::FeatureList::IsEnabled(features::kWebAssemblyThreads));
  
@@ -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
-@@ -667,6 +667,16 @@ const base::Feature kExperimentalProductivityFeatures{
+@@ -685,6 +685,16 @@ const base::Feature kExperimentalProductivityFeatures{
  // TODO(rouslan): Remove this.
  const base::Feature kWebPayments{"WebPayments",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
@@ -103,7 +103,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c
 diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
 --- a/content/public/common/content_features.h
 +++ b/content/public/common/content_features.h
-@@ -156,6 +156,8 @@ CONTENT_EXPORT extern const base::Feature kScriptStreamingOnPreload;
+@@ -157,6 +157,8 @@ CONTENT_EXPORT extern const base::Feature kScriptStreamingOnPreload;
  CONTENT_EXPORT extern const base::Feature kTrustedDOMTypes;
  CONTENT_EXPORT extern const base::Feature kBrowserUseDisplayThreadPriority;
  
@@ -116,18 +116,18 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa
 --- a/third_party/blink/public/platform/web_runtime_features.h
 +++ b/third_party/blink/public/platform/web_runtime_features.h
 @@ -91,6 +91,8 @@ class WebRuntimeFeatures {
-   BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool);
    BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool);
+   BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool);
    BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(bool);
 +  BLINK_PLATFORM_EXPORT static void EnableDeviceMotion(bool);
 +  BLINK_PLATFORM_EXPORT static void EnableDeviceOrientation(bool);
    BLINK_PLATFORM_EXPORT static void EnableKeyboardFocusableScrollers(bool);
    BLINK_PLATFORM_EXPORT static void EnableDatabase(bool);
-   BLINK_PLATFORM_EXPORT static void EnableDecodeLossyWebPImagesToYUV(bool);
+   BLINK_PLATFORM_EXPORT static void EnableDecodeJpeg420ImagesToYUV(bool);
 diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc
 --- a/third_party/blink/renderer/modules/modules_initializer.cc
 +++ b/third_party/blink/renderer/modules/modules_initializer.cc
-@@ -252,9 +252,12 @@ void ModulesInitializer::InitInspectorAgentSession(
+@@ -244,9 +244,12 @@ void ModulesInitializer::InitInspectorAgentSession(
  void ModulesInitializer::OnClearWindowObjectInMainWorld(
      Document& document,
      const Settings& settings) const {
@@ -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
-@@ -144,6 +144,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
+@@ -160,6 +160,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
-@@ -1064,6 +1064,14 @@
+@@ -1119,6 +1119,14 @@
        status: "experimental",
      },
      {

+ 7 - 7
build/patches/Add-global-menu-entry-to-toggle-AdBlocker.patch

@@ -58,7 +58,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
-@@ -2170,6 +2170,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2159,6 +2159,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              RecordUserAction.record("MobileMenuRequestEnableJavascript");
          } else if (id == R.id.reader_mode_prefs_id) {
              DomDistillerUIUtils.openSettings(currentTab.getWebContents());
@@ -76,7 +76,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
-@@ -1709,6 +1709,14 @@ public class ChromeTabbedActivity
+@@ -1757,6 +1757,14 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
                  reportNewTabShortcutUsed(true);
                  getTabCreator(true).launchNTP();
              }
@@ -94,15 +94,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
 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
-@@ -27,6 +27,7 @@ import org.chromium.chrome.R;
+@@ -26,6 +26,7 @@ import org.chromium.base.metrics.RecordHistogram;
+ import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ActivityTabProvider;
- import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.ChromeSwitches;
 +import org.chromium.chrome.browser.ContentSettingsType;
  import org.chromium.chrome.browser.ShortcutHelper;
  import org.chromium.chrome.browser.banners.AppBannerManager;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
-@@ -225,6 +226,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -224,6 +225,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
              // Prepare translate menu button.
              prepareTranslateMenuItem(menu, currentTab);
  
@@ -111,7 +111,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu
              // Hide 'Add to homescreen' for the following:
              // * chrome:// pages - Android doesn't know how to direct those URLs.
              // * incognito pages - To avoid problems where users create shortcuts in incognito
-@@ -300,6 +303,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -299,6 +302,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
                  PrefServiceBridge.getInstance().isIncognitoModeManaged());
      }
  
@@ -170,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 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
-@@ -2943,6 +2943,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -2958,6 +2958,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_MENU_REQUEST_DESKTOP_SITE_OFF" desc="Accessibility description for when Request Desktop Site is disabled.">
          Turn on Request desktop site
        </message>

+ 5 - 5
build/patches/Add-menu-option-to-toggle-global-Javascript-preference.patch

@@ -74,7 +74,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
-@@ -2160,6 +2160,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2149,6 +2149,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent(
                      !usingDesktopUserAgent, reloadOnChange);
              RecordUserAction.record("MobileMenuRequestDesktopSite");
@@ -92,7 +92,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
-@@ -1751,6 +1751,14 @@ public class ChromeTabbedActivity
+@@ -1802,6 +1802,14 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
                  NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
              }
              RecordUserAction.record("MobileMenuDownloadManager");
@@ -110,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
 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
-@@ -242,6 +242,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -241,6 +241,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
  
              updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
  
@@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu
              // Only display reader mode settings menu option if the current page is in reader mode.
              menu.findItem(R.id.reader_mode_prefs_id)
                      .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl()));
-@@ -437,6 +439,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -432,6 +434,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
          }
      }
  
@@ -177,7 +177,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 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
-@@ -2923,6 +2923,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -2938,6 +2938,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
        <message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR-LIMIT=27]">
          Find in page
        </message>

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

@@ -13,7 +13,7 @@ Subject: Add option to not persist tabs across sessions
 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
-@@ -66,6 +66,9 @@
+@@ -62,6 +62,9 @@
      <!-- TODO(peconn): Add help section. -->
      <!-- <string name="help_context_suggestions">mobile_content_suggestions</string> -->
  
@@ -26,11 +26,11 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/chrome/android/java/res/xml/privacy_preferences.xml
-@@ -19,6 +19,11 @@
+@@ -39,6 +39,11 @@
          android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
          android:key="do_not_track"
          android:title="@string/do_not_track_title" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.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
-@@ -1132,8 +1132,10 @@ public class ChromeTabbedActivity
+@@ -1166,8 +1166,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -73,14 +73,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ChromeFeatureList;
 @@ -38,6 +40,7 @@ public class PrivacyPreferences
-     private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
      private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
      private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
+     private static final String PREF_NETWORK_PREDICTIONS = "network_predictions";
 +    private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
      private static final String PREF_DO_NOT_TRACK = "do_not_track";
      private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
  
-@@ -90,6 +93,10 @@ public class PrivacyPreferences
+@@ -105,6 +108,10 @@ public class PrivacyPreferences
              SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
              sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
              sharedPreferencesEditor.apply();
@@ -91,22 +91,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          }
  
          return true;
-@@ -140,6 +147,11 @@ public class PrivacyPreferences
+@@ -155,6 +162,11 @@ public class PrivacyPreferences
              boolean isContextualSearchEnabled = !prefServiceBridge.isContextualSearchDisabled();
              contextualPref.setSummary(isContextualSearchEnabled ? textOn : textOff);
          }
 +
-+        ChromeBaseCheckBoxPreferenceCompat closeTabsOnExitPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_CLOSE_TABS_ON_EXIT);
++        ChromeBaseCheckBoxPreference closeTabsOnExitPref =
++                (ChromeBaseCheckBoxPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
 +        closeTabsOnExitPref.setOnPreferenceChangeListener(this);
 +        closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
      }
  
-     private ManagedPreferenceDelegateCompat createManagedPreferenceDelegate() {
+     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
-@@ -3747,6 +3747,12 @@ The site does NOT gain access to the camera. The camera images are only visible
+@@ -3770,6 +3770,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>

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

@@ -20,7 +20,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro
 @@ -7,6 +7,11 @@
      xmlns:android="http://schemas.android.com/apk/res/android">
  
-     <org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat
+     <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
 +        android:key="ntp_is_homepage_switch"
 +        android:summaryOn="@string/options_ntp_is_homepage_label"
 +        android:summaryOff="@string/options_ntp_is_homepage_label" />
@@ -106,8 +106,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Hom
              return true;
          });
  
-+        ChromeSwitchPreferenceCompat mNTPIsHomepageSwitch =
-+                (ChromeSwitchPreferenceCompat) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
++        ChromeSwitchPreference mNTPIsHomepageSwitch =
++                (ChromeSwitchPreference) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
 +        boolean isHomepageNTPEnabled = mHomepageManager.getPrefNTPIsHomepageEnabled();
 +        mNTPIsHomepageSwitch.setChecked(isHomepageNTPEnabled);
 +        mNTPIsHomepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
@@ -153,7 +153,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCre
 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
-@@ -648,6 +648,9 @@ CHAR-LIMIT guidelines:
+@@ -663,6 +663,9 @@ CHAR-LIMIT guidelines:
        <message name="IDS_OPTIONS_HOMEPAGE_EDIT_LABEL" desc="The label for the edit text field that allows the user to change the URL that is opened when they tap on the home page button in the omnibox.">
          Open this page
        </message>
@@ -192,8 +192,8 @@ 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
-@@ -314,6 +314,7 @@ extern const char kDeviceWebUsbAllowDevicesForUrls[];
- extern const char kLoginExtensionApiDataForNextLoginAttempt[];
+@@ -318,6 +318,7 @@ extern const char kSettingsShowBrowserBanner[];
+ extern const char kSettingsShowOSBanner[];
  #endif  // defined(OS_CHROMEOS)
  extern const char kShowHomeButton[];
 +extern const char kNewTabPageIsHomePage[];

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

@@ -14,7 +14,7 @@ Subject: Add site settings option for session-only cookies
 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
-@@ -36,6 +36,9 @@
+@@ -32,6 +32,9 @@
      <integer name="reload_button_level_reload">0</integer>
      <integer name="reload_button_level_stop">1</integer>
  
@@ -32,14 +32,14 @@ diff --git a/chrome/android/java/res/xml/website_preferences.xml b/chrome/androi
          android:defaultValue="true"
          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.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.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.ChromeBaseCheckBoxPreferenceCompat
+     <org.chromium.chrome.browser.preferences.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
@@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
      /**
       * @return Whether third-party cookie blocking is configured by policy
       */
-@@ -620,6 +624,10 @@ public class PrefServiceBridge {
+@@ -631,6 +635,10 @@ public class PrefServiceBridge {
          nativeSetBlockThirdPartyCookiesEnabled(enabled);
      }
  
@@ -66,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
      public void setDoNotTrackEnabled(boolean enabled) {
          nativeSetDoNotTrackEnabled(enabled);
      }
-@@ -1070,6 +1078,7 @@ public class PrefServiceBridge {
+@@ -1094,6 +1102,7 @@ public class PrefServiceBridge {
      private native boolean nativeGetAutoplayEnabled();
      private native boolean nativeGetBackgroundSyncEnabled();
      private native boolean nativeGetBlockThirdPartyCookiesEnabled();
@@ -74,7 +74,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
      private native boolean nativeGetBlockThirdPartyCookiesManaged();
      private native boolean nativeGetRememberPasswordsEnabled();
      private native boolean nativeGetPasswordManagerAutoSigninEnabled();
-@@ -1115,6 +1124,7 @@ public class PrefServiceBridge {
+@@ -1141,6 +1150,7 @@ public class PrefServiceBridge {
      private native void nativeSetAutoplayEnabled(boolean enabled);
      private native void nativeSetAllowCookiesEnabled(boolean enabled);
      private native void nativeSetBackgroundSyncEnabled(boolean enabled);
@@ -146,12 +146,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
          }
  
          // Configure/hide the notifications vibrate toggle, as needed.
-@@ -1005,6 +1015,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
+@@ -1003,6 +1013,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
                  preference -> PrefServiceBridge.getInstance().isBlockThirdPartyCookiesManaged());
      }
  
 +    private void updateCookiesSessionOnlyCheckBox() {
-+        ChromeBaseCheckBoxPreferenceCompat cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreferenceCompat)
++        ChromeBaseCheckBoxPreference cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreference)
 +                getPreferenceScreen().findPreference(COOKIES_SESSION_ONLY_TOGGLE_KEY);
 +        cookiesSessionOnlyPref.setChecked(
 +                PrefServiceBridge.getInstance().isCookiesSessionOnlyEnabled());
@@ -160,12 +160,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +    }
 +
      private void updateNotificationsVibrateCheckBox() {
-         ChromeBaseCheckBoxPreferenceCompat preference =
-                 (ChromeBaseCheckBoxPreferenceCompat) getPreferenceScreen().findPreference(
+         ChromeBaseCheckBoxPreference preference =
+                 (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
-@@ -880,6 +880,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -901,6 +901,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>
@@ -199,7 +199,7 @@ diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/
  static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesManaged(
      JNIEnv* env,
      const JavaParamRef<jobject>& obj) {
-@@ -771,6 +782,20 @@ static void JNI_PrefServiceBridge_SetBlockThirdPartyCookiesEnabled(
+@@ -785,6 +796,20 @@ static void JNI_PrefServiceBridge_SetBlockThirdPartyCookiesEnabled(
    GetPrefService()->SetBoolean(prefs::kBlockThirdPartyCookies, enabled);
  }
  

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

@@ -12,20 +12,20 @@ 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
 @@ -1603,6 +1603,10 @@ const FeatureEntry kFeatureEntries[] = {
-     {"debug-packed-apps", flag_descriptions::kDebugPackedAppName,
-      flag_descriptions::kDebugPackedAppDescription, kOsDesktop,
-      SINGLE_VALUE_TYPE(switches::kDebugPackedApps)},
+      FEATURE_VALUE_TYPE(features::kAppNotificationStatusMessaging)},
+ #endif  // OS_ANDROID
+     {"enable-devtools-experiments", flag_descriptions::kDevtoolsExperimentsName,
 +    {"resume-background-video",
 +     flag_descriptions::kResumeBackgroundVideoName,
 +     flag_descriptions::kResumeBackgroundVideoDescription, kOsAll,
 +     FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)},
-     {"automatic-password-generation",
-      flag_descriptions::kAutomaticPasswordGenerationName,
-      flag_descriptions::kAutomaticPasswordGenerationDescription, kOsAll,
+      flag_descriptions::kDevtoolsExperimentsDescription, kOsDesktop,
+      SINGLE_VALUE_TYPE(switches::kEnableDevToolsExperiments)},
+     {"silent-debugger-extension-api",
 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
-@@ -960,6 +960,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
+@@ -976,6 +976,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
    return pipeline_metadata_.has_audio;
  }
  
@@ -38,7 +38,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());
-@@ -3259,7 +3265,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
+@@ -3278,7 +3284,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.
@@ -54,7 +54,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
-@@ -141,6 +141,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
+@@ -142,6 +142,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
-@@ -145,7 +145,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
+@@ -152,7 +152,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
    registry->RegisterBooleanPref(prefs::kAccountConsistencyMirrorRequired,
                                  false);
  #endif

+ 1 - 1
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
-@@ -216,7 +216,7 @@ void OnAuthPrefsChanged(PrefService* local_state,
+@@ -244,7 +244,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;

+ 11 - 11
build/patches/Always-show-home-page-settings.patch

@@ -19,7 +19,7 @@ This allows removing the home page button and restoring it from settings.
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
-@@ -347,18 +347,6 @@ public class ProcessInitializationHandler {
+@@ -356,18 +356,6 @@ public class ProcessInitializationHandler {
          deferredStartupHandler.addDeferredTask(new Runnable() {
              @Override
              public void run() {
@@ -106,7 +106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Chr
 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
-@@ -207,15 +207,11 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -206,15 +206,11 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSyncAndServicesPreference();
          updateSearchEnginePreference();
  
@@ -137,7 +137,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUti
      private static Boolean sIsHomepageTileEnabled;
      private static Boolean sIsNewTabPageButtonEnabled;
      private static Boolean sIsBottomToolbarEnabled;
-@@ -176,7 +175,6 @@ public class FeatureUtilities {
+@@ -178,7 +177,6 @@ public class FeatureUtilities {
      public static void cacheNativeFlags() {
          cacheCommandLineOnNonRootedEnabled();
          FirstRunUtils.cacheFirstRunPrefs();
@@ -145,7 +145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUti
          cacheHomepageTileEnabled();
          cacheNewTabPageButtonEnabled();
          cacheBottomToolbarEnabled();
-@@ -224,38 +222,6 @@ public class FeatureUtilities {
+@@ -228,38 +226,6 @@ public class FeatureUtilities {
          return Build.VERSION.SDK_INT > Build.VERSION_CODES.M;
      }
  
@@ -181,13 +181,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUti
 -        sIsHomePageButtonForceEnabled = null;
 -    }
 -
-     private static void cacheNetworkService() {
-         boolean networkService = ChromeFeatureList.isEnabled(ChromeFeatureList.NETWORK_SERVICE);
- 
+     private static void cacheServiceManagerForDownloadResumption() {
+         boolean resumptionDownloadInReducedMode =
+                 ChromeFeatureList.isEnabled(ChromeFeatureList.SERVICE_MANAGER_FOR_DOWNLOAD);
 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
-@@ -1774,9 +1774,6 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1932,9 +1932,6 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-chrome-duet-labels", flag_descriptions::kChromeDuetLabelsName,
       flag_descriptions::kChromeDuetLabelsDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(chrome::android::kChromeDuetLabeled)},
@@ -200,7 +200,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
-@@ -136,7 +136,6 @@ const base::Feature* kFeaturesExposedToJava[] = {
+@@ -143,7 +143,6 @@ const base::Feature* kFeaturesExposedToJava[] = {
      &kEphemeralTab,
      &kExploreSites,
      &kHandleMediaIntents,
@@ -208,7 +208,7 @@ diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/andr
      &kHomepageTile,
      &kHorizontalTabSwitcherAndroid,
      &kIdentityDisc,
-@@ -413,9 +412,6 @@ const base::Feature kForegroundNotificationManager{
+@@ -439,9 +438,6 @@ const base::Feature kForegroundNotificationManager{
  const base::Feature kHandleMediaIntents{"HandleMediaIntents",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
  
@@ -221,7 +221,7 @@ diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/andr
 diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
 --- a/chrome/browser/android/chrome_feature_list.h
 +++ b/chrome/browser/android/chrome_feature_list.h
-@@ -72,7 +72,6 @@ extern const base::Feature kEphemeralTab;
+@@ -77,7 +77,6 @@ extern const base::Feature kEphemeralTab;
  extern const base::Feature kExploreSites;
  extern const base::Feature kForegroundNotificationManager;
  extern const base::Feature kHandleMediaIntents;

+ 4 - 4
build/patches/AudioBuffer-AnalyserNode-fingerprinting-mitigations-via-IDL.patch

@@ -35,15 +35,15 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/thir
      // Channel access
      readonly attribute unsigned long numberOfChannels;
 -    [HighEntropy, Measure, RaisesException] Float32Array getChannelData(unsigned long channelIndex);
--    [HighEntropy, Measure, RaisesException] void copyFromChannel(Float32Array destination, long channelNumber, optional unsigned long startInChannel = 0);
+-    [HighEntropy, Measure, RaisesException] void copyFromChannel(Float32Array destination, long channelNumber, optional unsigned long bufferOffset = 0);
 +    //[HighEntropy, Measure, RaisesException] Float32Array getChannelData(unsigned long channelIndex);
-+    //[HighEntropy, Measure, RaisesException] void copyFromChannel(Float32Array destination, long channelNumber, optional unsigned long startInChannel = 0);
-     [RaisesException] void copyToChannel(Float32Array source, long channelNumber, optional unsigned long startInChannel = 0);
++    //[HighEntropy, Measure, RaisesException] void copyFromChannel(Float32Array destination, long channelNumber, optional unsigned long bufferOffset = 0);
+     [RaisesException] void copyToChannel(Float32Array source, long channelNumber, optional unsigned long bufferOffset = 0);
  };
 diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc
 --- a/third_party/blink/renderer/modules/webaudio/audio_context.cc
 +++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc
-@@ -336,6 +336,7 @@ void AudioContext::StopRendering() {
+@@ -343,6 +343,7 @@ void AudioContext::StopRendering() {
  double AudioContext::baseLatency() const {
    DCHECK(IsMainThread());
    DCHECK(destination());

+ 1 - 1
build/patches/Battery-API-return-nothing.patch

@@ -10,7 +10,7 @@ Include @thestinger's fix for correct charging/unknown values
 diff --git a/third_party/blink/renderer/modules/battery/battery_manager.cc b/third_party/blink/renderer/modules/battery/battery_manager.cc
 --- a/third_party/blink/renderer/modules/battery/battery_manager.cc
 +++ b/third_party/blink/renderer/modules/battery/battery_manager.cc
-@@ -44,45 +44,28 @@ ScriptPromise BatteryManager::StartRequest(ScriptState* script_state) {
+@@ -45,45 +45,28 @@ ScriptPromise BatteryManager::StartRequest(ScriptState* script_state) {
  }
  
  bool BatteryManager::charging() {

+ 0 - 572
build/patches/Bromite-AdBlock-engine-for-SystemWebView.patch

@@ -1,572 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Sat, 14 Sep 2019 10:14:54 +0200
-Subject: Bromite AdBlock engine for SystemWebView
-
----
- android_webview/browser/net/aw_network_delegate.cc |  71 ++++
- android_webview/browser/net/aw_network_delegate.h  |   3 +
- net/BUILD.gn                                       |   7 +
- net/url_request/adblock_intercept.cc               | 389 +++++++++++++++++++++
- net/url_request/adblock_intercept.h                |  35 ++
- 5 files changed, 505 insertions(+)
- create mode 100644 net/url_request/adblock_intercept.cc
- create mode 100644 net/url_request/adblock_intercept.h
-
-diff --git a/android_webview/browser/net/aw_network_delegate.cc b/android_webview/browser/net/aw_network_delegate.cc
---- a/android_webview/browser/net/aw_network_delegate.cc
-+++ b/android_webview/browser/net/aw_network_delegate.cc
-@@ -20,9 +20,11 @@
- #include "net/base/proxy_server.h"
- #include "net/http/http_response_headers.h"
- #include "net/proxy_resolution/proxy_info.h"
-+#include "net/url_request/adblock_intercept.h"
- #include "net/url_request/url_request.h"
- 
- using content::BrowserThread;
-+using content::ResourceRequestInfo;
- 
- namespace android_webview {
- 
-@@ -49,6 +51,75 @@ AwNetworkDelegate::AwNetworkDelegate() {}
- AwNetworkDelegate::~AwNetworkDelegate() {
- }
- 
-+#define TRANSPARENT1PXGIF "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
-+#define EMPTYJS "data:text/javascript;base64,Cg=="
-+#define EMPTYCSS "data:text/css;base64,Cg=="
-+
-+static bool requestIntercepted(net::URLRequest* request, GURL* new_url) {
-+    bool block = false, isValidUrl;
-+
-+    // skip invalid URLs and browser-initiated requests (which have no initiator)
-+    auto initiator = request->initiator();
-+    isValidUrl = request->url().is_valid() && initiator.has_value();
-+    std::string scheme = request->url().scheme();
-+    if (isValidUrl && scheme.length()) {
-+      std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower);
-+        if ("http" != scheme && "https" != scheme) {
-+          isValidUrl = false;
-+        }
-+    }
-+    ResourceRequestInfo* info;
-+    if (isValidUrl) {
-+      info = ResourceRequestInfo::ForRequest(request);
-+    }
-+
-+    // there are no per-site nor global ad/content settings when using the SystemWebView
-+    bool adblock_enabled = true;
-+    if (isValidUrl && info) {
-+      auto resource_type = info->GetResourceType();
-+
-+      if (adblock_enabled
-+        && content::ResourceType::kMainFrame != resource_type
-+        && net::adblock_intercept(request->url(), initiator->host(), resource_type)) {
-+        block = true;
-+      }
-+
-+      if (block) {
-+        switch (resource_type) {
-+          case content::ResourceType::kImage:
-+          case content::ResourceType::kFavicon:
-+            *new_url = GURL(TRANSPARENT1PXGIF);
-+            break;
-+          case content::ResourceType::kScript:
-+            *new_url = GURL(EMPTYJS);
-+            break;
-+          case content::ResourceType::kStylesheet:
-+            *new_url = GURL(EMPTYCSS);
-+            break;
-+          default:
-+            *new_url = GURL("");
-+            return true;
-+        }
-+      }
-+    } // valid URL and info
-+  return false;
-+}
-+#undef TRANSPARENT1PXGIF
-+#undef EMPTYJS
-+#undef EMPTYCSS
-+
-+int AwNetworkDelegate::OnBeforeURLRequest(net::URLRequest* request,
-+                         net::CompletionOnceCallback callback,
-+                         GURL* new_url) {
-+  if (request) {
-+    // most requests will be modified rather than intercepted
-+    if (requestIntercepted(request, new_url))
-+      return net::ERR_BLOCKED_BY_ADMINISTRATOR;
-+  } // request
-+
-+  return net::OK;
-+}
-+
- int AwNetworkDelegate::OnBeforeStartTransaction(
-     net::URLRequest* request,
-     net::CompletionOnceCallback callback,
-diff --git a/android_webview/browser/net/aw_network_delegate.h b/android_webview/browser/net/aw_network_delegate.h
---- a/android_webview/browser/net/aw_network_delegate.h
-+++ b/android_webview/browser/net/aw_network_delegate.h
-@@ -22,6 +22,9 @@ class AwNetworkDelegate : public net::NetworkDelegateImpl {
- 
-  private:
-   // NetworkDelegate implementation.
-+  int OnBeforeURLRequest(net::URLRequest* request,
-+                         net::CompletionOnceCallback callback,
-+                         GURL* new_url) override;
-   int OnBeforeStartTransaction(net::URLRequest* request,
-                                net::CompletionOnceCallback callback,
-                                net::HttpRequestHeaders* headers) override;
-diff --git a/net/BUILD.gn b/net/BUILD.gn
---- a/net/BUILD.gn
-+++ b/net/BUILD.gn
-@@ -1842,6 +1842,13 @@ component("net") {
-       "url_request/websocket_handshake_userdata_key.h",
-     ]
- 
-+    if (is_android) {
-+      sources += [
-+        "url_request/adblock_intercept.cc",
-+        "url_request/adblock_intercept.h"
-+      ]
-+    }
-+
-     if (enable_reporting) {
-       sources += [
-         "network_error_logging/network_error_logging_service.cc",
-diff --git a/net/url_request/adblock_intercept.cc b/net/url_request/adblock_intercept.cc
-new file mode 100644
---- /dev/null
-+++ b/net/url_request/adblock_intercept.cc
-@@ -0,0 +1,389 @@
-+/*
-+    This file is part of Bromite.
-+
-+    Bromite is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    Bromite is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with Bromite. If not, see <https://www.gnu.org/licenses/>.
-+*/
-+#include "adblock_intercept.h"
-+
-+#ifdef ADB_TESTER
-+#include <cstddef>
-+#include <cstdlib>
-+#include <string.h>
-+
-+#include "log.h"
-+#include <tld.h>
-+
-+#else
-+
-+#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-+#include <android/log.h>
-+
-+#endif
-+
-+#include "net/url_request/adblock_entries.h"
-+
-+namespace net {
-+
-+const char *LOG_TAG = "Bromite";
-+
-+#ifdef ADB_TESTER
-+int adblock_rules_count() { return ADBLOCK_ENTRY_COUNT; }
-+#endif
-+
-+// True if the given canonical |host| is "[www.]<domain_in_lower_case>.<TLD>"
-+// with a valid TLD. If |subdomain_permission| is ALLOW_SUBDOMAIN, we check
-+// against host "*.<domain_in_lower_case>.<TLD>" instead. Will return the TLD
-+// string in |tld|, if specified and the |host| can be parsed.
-+static bool is_first_party(const char *l_host, int len, const char *l_url_host,
-+                           int b_len) {
-+  size_t tld_length;
-+
-+#ifdef ADB_TESTER
-+  char *found_tld;
-+
-+  if (TLD_SUCCESS != tld_get_z(l_host, &found_tld))
-+    return false;
-+  tld_length = strlen(found_tld);
-+  if (tld_length == 0)
-+    return false;
-+#else
-+  tld_length = net::registry_controlled_domains::GetCanonicalHostRegistryLength(
-+      l_host, net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
-+      net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
-+  if ((tld_length == 0) || (tld_length == std::string::npos))
-+    return false;
-+#endif
-+
-+  const char *tld = l_host + len - tld_length;
-+
-+  // Removes any subdomain from origin host.
-+  int i = len - tld_length - 2, top_i = i;
-+  if (i < 0) {
-+    return false;
-+  }
-+  const char *domain = l_host;
-+  for (; i >= 0; i--) {
-+    if (l_host[i] == '.') {
-+      int p_len = top_i - i;
-+      // skip "co" in "co.uk", "org" in "org.uk"
-+      if (p_len <= 3) {
-+        tld -= p_len + 1;
-+        continue;
-+      }
-+
-+      // segment is long enough, accept it at as a domain
-+      domain = l_host + i;
-+      len -= i;
-+      break;
-+    }
-+  }
-+
-+#ifdef ADBLOCK_LOG
-+  __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
-+                      "%s: extracted domain suffix: \"%s\" (TLD=\"%s\")",
-+                      l_host, domain, tld);
-+#endif
-+
-+  // Check if supplied URL host matches, including the dot.
-+  if (b_len < len) {
-+    return false;
-+  }
-+  for (int i = 0; i < len; i++) {
-+    if (l_url_host[b_len - 1 - i] != domain[len - 1 - i])
-+      return false;
-+  }
-+
-+  // pass with flying colors
-+  return true;
-+}
-+
-+static char *strtolower(const char *str, int len, bool &should_free) {
-+  char *ret = NULL;
-+  for (int i = 0; i < len; i++) {
-+    if ((65 <= str[i]) && (str[i] <= 90)) {
-+      // first time a difference is found, allocate buffer and copy previous
-+      // characters (if any)
-+      if (ret == NULL) {
-+        ret = (char *)malloc(len + 1);
-+        if (i != 0)
-+          memcpy(ret, str, i);
-+      }
-+      // convert character to lower case
-+      ret[i] = str[i] + 32;
-+    } else {
-+      if (ret != NULL)
-+        ret[i] = str[i];
-+    }
-+  }
-+
-+  if (ret != NULL) {
-+    ret[len] = '\0';
-+    should_free = true;
-+    return ret;
-+  }
-+
-+  // return source, unchanged
-+  return (char *)str;
-+}
-+
-+static char *strtosep(const char *str, int len) {
-+  char *ret = (char *)malloc(len + 3);
-+  ret[0] = '^';
-+  for (int i = 0; i < len; i++) {
-+    if ((str[i] == ':') || (str[i] == '/') || (str[i] == '?') ||
-+        (str[i] == '&') || (str[i] == '=')) {
-+      ret[i + 1] = '^';
-+    } else {
-+      ret[i + 1] = str[i];
-+    }
-+  }
-+  // the index 'len' character is set by the previous loop
-+  ret[len + 1] = '^';
-+  ret[len + 2] = '\0';
-+  return ret;
-+}
-+
-+static bool url_matches(const char *c_url, char *c_url_sep, char *c_url_lower,
-+                        char *c_url_lower_sep, adblock_entry *entry) {
-+  bool match = false;
-+  // select comparison string based on case and separator presence (separator
-+  // takes some shortcuts)
-+  bool match_case = ((entry->flags & ADBLOCK_FLAG_MATCH_CASE) != 0);
-+  bool match_separator = ((entry->flags & ADBLOCK_FLAG_HAS_SEPARATOR) != 0);
-+  const char *match_url =
-+      match_case ? (match_separator ? c_url_sep : c_url)
-+                 : (match_separator ? c_url_lower_sep : c_url_lower);
-+
-+#ifdef ADBLOCK_LOG_MORE
-+  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[case:%d][sep:%d][%s]",
-+                      match_case, match_separator, match_url);
-+#endif
-+  // check for all match parts at >= position of last match
-+  const char *last = match_url;
-+  for (int m = 0; const char *url_match = entry->matches[m]; m++) {
-+    bool is_last_match = entry->matches[m + 1] == NULL;
-+    const char *pos = strstr(last, url_match);
-+    match = (pos != NULL);
-+
-+#ifdef ADBLOCK_LOG_MORE
-+    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[%s][found:%d][match:%d]",
-+                        entry->matches[m], pos == NULL ? 0 : 1, match ? 1 : 0);
-+#endif
-+    // check if the url starts with the first match part
-+    if (match && (m == 0) && ((entry->flags & ADBLOCK_FLAG_MATCH_BEGIN) != 0) &&
-+        (pos != match_url))
-+      match = false;
-+
-+    // check if the url ends with the last match part
-+    if (match && is_last_match &&
-+        ((entry->flags & ADBLOCK_FLAG_MATCH_END) != 0) &&
-+        (pos != &match_url[strlen(match_url) - strlen(entry->matches[m])]))
-+      match = false;
-+
-+    // check domain match
-+    if (match && (m == 0) &&
-+        ((entry->flags & ADBLOCK_FLAG_MATCH_DOMAIN) != 0) &&
-+        (pos != match_url) && (pos[-1] != '^') && (pos[-1] != '.') &&
-+        (pos[-1] != '/'))
-+      match = false;
-+
-+    // short circuit
-+    if (!match)
-+      break;
-+  }
-+  return match;
-+}
-+
-+bool url_match_domain(adblock_entry *entry, const std::string &origin_host) {
-+  bool match_domain = true;
-+  // check for a negative domain match
-+  if (entry->domains_skip) {
-+    if (origin_host.empty()) {
-+      // skip this rule, cannot match on domain
-+      return false;
-+    }
-+    for (int d = 0; const char *domain = entry->domains_skip[d]; d++) {
-+      if (domain == origin_host) {
-+        match_domain = false;
-+        break;
-+      }
-+    }
-+  }
-+
-+  // check for a required positive domain match
-+  if (entry->domains) {
-+    if (origin_host.empty()) {
-+      // skip this rule, cannot match on domain
-+      return false;
-+    }
-+    for (int d = 0; const char *domain = entry->domains[d]; d++) {
-+      if (domain != origin_host) {
-+        match_domain = false;
-+        break;
-+      }
-+    }
-+  }
-+  return match_domain;
-+}
-+
-+static bool url_match_party(adblock_entry *entry, const char *l_origin_host,
-+                            int origin_host_len, const char *l_url_host,
-+                            int url_host_len, bool &checked_fp, bool &fp) {
-+  bool wanted_fp;
-+  if ((entry->flags & ADBLOCK_FLAG_THIRD_PARTY) != 0) {
-+    wanted_fp = false;
-+  } else if ((entry->flags & ADBLOCK_FLAG_FIRST_PARTY) != 0) {
-+    wanted_fp = true;
-+  } else {
-+    // no-op
-+    return true;
-+  }
-+
-+  if (origin_host_len == 0) {
-+    // cannot match this rule, no origin host to determine first/third party
-+    return false;
-+  }
-+
-+  if (!checked_fp) {
-+    // is the URL a first-party to the current page's host?
-+    fp = is_first_party(l_origin_host, origin_host_len, l_url_host,
-+                        url_host_len);
-+
-+    checked_fp = true;
-+#ifdef ADB_TESTER
-+    __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
-+                        "is_first_party(\"%s\", \"%s\") = %s", l_origin_host,
-+                        l_url_host, fp ? "true" : "false");
-+#endif
-+  }
-+
-+  return fp == wanted_fp;
-+}
-+
-+static bool resource_type_match(adblock_entry *entry,
-+                                content::ResourceType resource_type) {
-+  bool exclude;
-+  if ((entry->flags & ADBLOCK_FLAG_RESOURCE_TYPE_IN) != 0) {
-+    exclude = false;
-+  } else if ((entry->flags & ADBLOCK_FLAG_RESOURCE_TYPE_NOT_IN) != 0) {
-+    exclude = true;
-+  } else {
-+    // no resource type matching
-+    return true;
-+  }
-+
-+  // use a bitwise trick to test for the current resource type
-+  bool found = (entry->flags & (int(resource_type) << 16));
-+  if (!exclude)
-+    return found;
-+  return !found;
-+}
-+
-+int adblock_intercept(const GURL &url, const std::string &origin_host,
-+                      content::ResourceType resource_type) {
-+  // these are verified on caller when not testing
-+#ifdef ADB_TESTER
-+  if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS()) {
-+    return 0;
-+  }
-+#endif
-+
-+  bool free1 = false, free2 = false, free3 = false, free4 = false;
-+  int url_len = url.spec().size();
-+  const char *c_url = url.spec().c_str();
-+  char *c_url_lower = strtolower(c_url, url_len, free1);
-+  char *c_url_sep = strtosep(c_url, url_len);
-+  char *c_url_lower_sep = strtolower(c_url_sep, url_len + 2, free4);
-+
-+  // might be empty in case of no host
-+  const char *origin_host_cstr = origin_host.c_str();
-+  int origin_host_len = origin_host.size(), url_host_len = url.host().size();
-+
-+  // lower-case version of origin and url hosts
-+  const char *c_origin_host_lower =
-+                 strtolower(origin_host_cstr, origin_host_len, free2),
-+             *c_url_host_lower =
-+                 strtolower(url.host().c_str(), url_host_len, free3);
-+
-+#ifdef ADBLOCK_LOG
-+  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[%s with host '%s'] [%s]",
-+                      c_url, url.host().c_str(), origin_host_cstr);
-+#endif
-+
-+  bool checked_fp = false, fp = false;
-+
-+  bool intercept = false;
-+  for (int i = 0; i < ADBLOCK_ENTRY_COUNT; i++) {
-+    adblock_entry *entry = &ADBLOCK_ENTRIES[i];
-+
-+    // no use checking rules when we're intercepting, or exceptions when not
-+    bool check =
-+        (!intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) == 0)) ||
-+        (intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) != 0));
-+    if (!check)
-+      continue;
-+
-+    // check for resource type
-+    if (!resource_type_match(entry, resource_type))
-+      continue;
-+
-+    // check for domain matches, a quick branch out if not matching
-+    if (!url_match_domain(entry, origin_host))
-+      continue;
-+
-+    // check on the URL matcher
-+    if (!url_matches(c_url, c_url_sep, c_url_lower, c_url_lower_sep, entry))
-+      continue;
-+
-+    // finally check first/third-party
-+    if (!url_match_party(entry, c_origin_host_lower, origin_host_len,
-+                         c_url_host_lower, url_host_len, checked_fp, fp))
-+      continue;
-+
-+#ifdef ADBLOCK_LOG
-+    if (!intercept) {
-+      __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
-+                          "--> intercept (#%d: \"%s\") (%x)", i,
-+                          entry->matches[0], entry->flags);
-+    } else {
-+      __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "--> pass (%d) (#%d)", i,
-+                          entry->flags);
-+    }
-+#endif
-+    intercept = !intercept;
-+  } // for each entry
-+
-+  if (free3)
-+    free((void *)c_url_host_lower);
-+  if (free2)
-+    free((void *)c_origin_host_lower);
-+  free(c_url_sep);
-+  if (free1)
-+    free(c_url_lower);
-+  if (free4)
-+    free(c_url_lower_sep);
-+
-+  if (intercept) {
-+#ifdef ADBLOCK_LOG
-+    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "blocked");
-+#endif
-+    return 1;
-+  }
-+#ifdef ADBLOCK_LOG
-+  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "pass");
-+#endif
-+  return 0;
-+}
-+
-+} // namespace net
-diff --git a/net/url_request/adblock_intercept.h b/net/url_request/adblock_intercept.h
-new file mode 100644
---- /dev/null
-+++ b/net/url_request/adblock_intercept.h
-@@ -0,0 +1,35 @@
-+/*
-+    This file is part of Bromite.
-+
-+    Bromite is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    Bromite is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with Bromite. If not, see <https://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_
-+#define NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_
-+
-+#include "content/public/common/resource_type.h"
-+#include "url/gurl.h"
-+
-+namespace net {
-+
-+#ifdef ADB_TESTER
-+int adblock_rules_count();
-+#endif
-+
-+int adblock_intercept(const GURL &url, const std::string &origin_host,
-+                      content::ResourceType resource_type);
-+
-+} // namespace net
-+
-+#endif // NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_
--- 
-2.11.0
-

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

@@ -77,7 +77,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
  namespace extensions {
  class EventRouterForwarder;
  }
-@@ -233,6 +238,8 @@ class BrowserProcess {
+@@ -229,6 +234,8 @@ class BrowserProcess {
  
    virtual component_updater::ComponentUpdateService* component_updater() = 0;
  
@@ -89,7 +89,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
-@@ -1017,6 +1017,34 @@ BrowserProcessImpl::component_updater() {
+@@ -1009,6 +1009,34 @@ BrowserProcessImpl::component_updater() {
    return component_updater_.get();
  }
  
@@ -135,7 +135,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc
  #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
    component_updater::SupervisedUserWhitelistInstaller*
    supervised_user_whitelist_installer() override;
-@@ -362,6 +363,8 @@ class BrowserProcessImpl : public BrowserProcess,
+@@ -361,6 +362,8 @@ class BrowserProcessImpl : public BrowserProcess,
    // but some users of component updater only install per-user.
    std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
  
@@ -147,7 +147,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc
 diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
 --- a/chrome/browser/chrome_browser_main.cc
 +++ b/chrome/browser/chrome_browser_main.cc
-@@ -1739,8 +1739,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
+@@ -1722,8 +1722,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
  
    PreBrowserStart();
  
@@ -163,7 +163,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows
 diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -64,7 +64,6 @@
+@@ -65,7 +65,6 @@
  #include "chrome/browser/hid/chrome_hid_delegate.h"
  #include "chrome/browser/language/translate_frame_binder.h"
  #include "chrome/browser/lifetime/browser_shutdown.h"
@@ -171,7 +171,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #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"
-@@ -80,7 +79,6 @@
+@@ -81,7 +80,6 @@
  #include "chrome/browser/net_benchmarking.h"
  #include "chrome/browser/notifications/platform_notification_service_factory.h"
  #include "chrome/browser/notifications/platform_notification_service_impl.h"
@@ -179,7 +179,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
  #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
  #include "chrome/browser/password_manager/chrome_password_manager_client.h"
-@@ -4083,16 +4081,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -4043,16 +4041,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
      content::NavigationHandle* handle) {
    std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
  
@@ -196,7 +196,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
  #if BUILDFLAG(ENABLE_PLUGINS)
    std::unique_ptr<content::NavigationThrottle> flash_url_throttle =
        FlashDownloadInterception::MaybeCreateThrottleFor(handle);
-@@ -4202,12 +4190,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+@@ -4162,12 +4150,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
    }
  #endif
  
@@ -1327,7 +1327,7 @@ 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_handle_impl.h"
  #include "content/browser/frame_host/navigator_delegate.h"
-@@ -118,15 +117,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
+@@ -120,15 +119,6 @@ void NavigationThrottleRunner::RegisterNavigationThrottles() {
         devtools_instrumentation::CreateNavigationThrottles(handle)) {
      AddThrottle(std::move(throttle));
    }

+ 3 - 3
build/patches/Canvas-fingerprinting-mitigations-for-image-data-and-webGL.patch

@@ -27,10 +27,10 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering
  
 -#include "base/rand_util.h"
  #include "base/metrics/histogram_functions.h"
+ #include "base/rand_util.h"
  #include "third_party/blink/public/common/features.h"
- #include "third_party/blink/public/platform/platform.h"
 @@ -817,7 +816,7 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
-       "Canvas.TextMetrics.MeasureText", elapsed);
+                                            GetState().GetTextAlign(), text);
  
    // scale text metrics by 3/1000000th
 -  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
@@ -58,7 +58,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
-@@ -1394,7 +1394,9 @@ jumbo_component("platform") {
+@@ -1417,7 +1417,9 @@ jumbo_component("platform") {
      "//third_party/blink/renderer:non_test_config",
    ]
  

+ 1 - 1
build/patches/Disable-NTP-remote-suggestions-by-default.patch

@@ -26,7 +26,7 @@ diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/featu
 +    "KeepPrefetchedContentSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kOptionalImagesEnabledFeature{
-     "NTPRemoteSuggestionsOptionalImages", base::FEATURE_DISABLED_BY_DEFAULT};
+     "NTPRemoteSuggestionsOptionalImages", base::FEATURE_ENABLED_BY_DEFAULT};
 -- 
 2.11.0
 

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

@@ -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
-@@ -439,7 +439,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
+@@ -465,7 +465,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
      base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kJellyBeanSupported{"JellyBeanSupported",

+ 1 - 1
build/patches/Disable-data-saver.patch

@@ -44,7 +44,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/dat
 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
-@@ -1303,9 +1303,6 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1321,9 +1321,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>

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

@@ -13,7 +13,7 @@ Subject: Disable dynamic module loading
 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
-@@ -410,19 +410,6 @@ chrome_java_sources = [
+@@ -418,19 +418,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/customtabs/content/TabCreationMode.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityModule.java",
@@ -36,7 +36,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/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
-@@ -62,7 +62,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvid
+@@ -66,7 +66,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;
@@ -44,7 +44,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
  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;
-@@ -129,9 +128,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -136,9 +135,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
  
      private final CustomTabsConnection mConnection = CustomTabsConnection.getInstance();
  
@@ -54,7 +54,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      private ActivityTabTaskDescriptionHelper mTaskDescriptionHelper;
  
      private CustomTabNightModeStateController mNightModeStateController;
-@@ -298,12 +294,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -308,12 +304,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
      public void finishNativeInitialization() {
          if (!mIntentDataProvider.isInfoPage()) FirstRunSignInProcessor.start(this);
  
@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
          mSessionHandler = new SessionHandler() {
  
              @Override
-@@ -433,10 +423,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -432,10 +422,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
          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
-@@ -791,10 +777,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -794,10 +780,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
          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
-@@ -42,7 +42,6 @@ import org.chromium.chrome.browser.ChromeSwitches;
+@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.ChromeSwitches;
  import org.chromium.chrome.browser.ChromeVersionInfo;
  import org.chromium.chrome.browser.IntentHandler;
- import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider;
+ 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.util.ColorUtils;
-@@ -870,20 +869,8 @@ public class CustomTabIntentDataProvider extends BrowserSessionDataProvider {
+@@ -460,20 +459,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
          // even receive the extras for using the feature.
          if (componentName == null) return false;
  
@@ -122,20 +122,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 +        return false;
      }
  
-     /**
+     @NonNull
 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
-@@ -57,8 +57,6 @@ import org.chromium.chrome.browser.browserservices.SessionHandler;
- import org.chromium.chrome.browser.browserservices.SessionDataHolder;
- import org.chromium.chrome.browser.browserservices.Origin;
+@@ -59,8 +59,6 @@ import org.chromium.chrome.browser.browserservices.Origin;
  import org.chromium.chrome.browser.browserservices.PostMessageHandler;
+ import org.chromium.chrome.browser.browserservices.SessionDataHolder;
+ import org.chromium.chrome.browser.browserservices.SessionHandler;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleLoader;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
  import org.chromium.chrome.browser.device.DeviceClassManager;
  import org.chromium.chrome.browser.init.ChainedTasks;
  import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
-@@ -217,7 +215,6 @@ public class CustomTabsConnection {
+@@ -219,7 +217,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
-@@ -1354,7 +1351,6 @@ public class CustomTabsConnection {
+@@ -1373,7 +1370,6 @@ public class CustomTabsConnection {
          if (ChromeApplication.isSevereMemorySignal(level)) {
              getInstance().mClientManager.cleanupUnusedSessions();
          }
@@ -151,9 +151,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      }
  
      @VisibleForTesting
-@@ -1495,32 +1491,6 @@ public class CustomTabsConnection {
-             CustomTabsSessionToken session, String url, String origin, int referrerPolicy,
-             @DetachedResourceRequestMotivation int motivation);
+@@ -1510,32 +1506,6 @@ public class CustomTabsConnection {
+         recordSpeculationStatusOnSwap(SPECULATION_STATUS_ON_SWAP_BACKGROUND_TAB_NOT_MATCHED);
+     }
  
 -    public ModuleLoader getModuleLoader(ComponentName componentName, @Nullable String assetName) {
 -        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CCT_MODULE_DEX_LOADING)) {
@@ -187,7 +187,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/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
-@@ -14,8 +14,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigatio
+@@ -15,8 +15,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigatio
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabController;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactory;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
@@ -196,7 +196,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/depe
  import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
  import org.chromium.chrome.browser.dependency_injection.ActivityScope;
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
-@@ -31,8 +29,6 @@ import dagger.Subcomponent;
+@@ -32,8 +30,6 @@ import dagger.Subcomponent;
  @ActivityScope
  public interface CustomTabActivityComponent extends ChromeActivityComponent {
      TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator();

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

@@ -46,11 +46,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureLi
 diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc
 --- a/components/variations/service/variations_service.cc
 +++ b/components/variations/service/variations_service.cc
-@@ -239,17 +239,7 @@ bool GetInstanceManipulations(const net::HttpResponseHeaders* headers,
+@@ -240,17 +240,7 @@ bool GetInstanceManipulations(const net::HttpResponseHeaders* headers,
  // Variations seed fetching is only enabled in official Chrome builds, if a URL
  // is specified on the command line, and for testing.
  bool IsFetchingEnabled() {
--#if !defined(GOOGLE_CHROME_BUILD)
+-#if !BUILDFLAG(GOOGLE_CHROME_BRANDING)
 -  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
 -          switches::kVariationsServerURL) &&
 -      !g_should_fetch_for_testing) {

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

@@ -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
-@@ -436,7 +436,7 @@ void ProfileImpl::RegisterProfilePrefs(
+@@ -444,7 +444,7 @@ void ProfileImpl::RegisterProfilePrefs(
    registry->RegisterStringPref(
        prefs::kPrintPreviewDefaultDestinationSelectionRules, std::string());
    registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false);

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

@@ -78,7 +78,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",
-@@ -77,7 +75,6 @@ source_set("unit_tests") {
+@@ -78,7 +76,6 @@ source_set("unit_tests") {
      "custom_links_manager_impl_unittest.cc",
      "custom_links_store_unittest.cc",
      "icon_cacher_impl_unittest.cc",

+ 4 - 4
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
-@@ -917,7 +917,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -909,7 +909,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
  #endif  // defined(OS_CHROMEOS)
  
    registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled,
@@ -22,15 +22,15 @@ 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
-@@ -49,8 +49,6 @@
+@@ -47,8 +47,6 @@
+ #include "components/content_settings/core/browser/host_content_settings_map.h"
  #include "components/cookie_config/cookie_store_util.h"
- #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
  #include "components/dom_distiller/core/url_constants.h"
 -#include "components/metrics/metrics_pref_names.h"
 -#include "components/metrics/metrics_service.h"
  #include "components/net_log/chrome_net_log.h"
  #include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
- #include "components/prefs/pref_service.h"
+ #include "components/signin/public/base/signin_pref_names.h"
 -- 
 2.11.0
 

+ 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
-@@ -434,13 +434,13 @@ bool IDNToUnicodeOneComponent(const base::char16* comp,
+@@ -433,13 +433,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
-@@ -1186,10 +1186,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
+@@ -1234,10 +1234,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
  }
  
  PluginData* LocalFrame::GetPluginData() const {

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

@@ -105,7 +105,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      }
  
      @Override
-@@ -397,19 +391,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
+@@ -387,19 +381,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
          if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
  
          assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
@@ -220,7 +220,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/ReorderBookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
-@@ -167,8 +167,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+@@ -186,8 +186,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
          assert mDelegate != null;
  
          switch (viewType) {
@@ -229,7 +229,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Reord
              case ViewType.SYNC_PROMO:
                  return mPromoHeaderManager.createSyncPromoHolder(parent);
              case ViewType.FOLDER:
-@@ -183,10 +181,7 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+@@ -202,10 +200,7 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
  
      @Override
      public void onBindViewHolder(ViewHolder holder, int position) {
@@ -239,9 +239,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Reord
 -        } else if (!(holder.getItemViewType() == ViewType.SYNC_PROMO)) {
 +        if (!(holder.getItemViewType() == ViewType.SYNC_PROMO)) {
              BookmarkRow row = ((BookmarkRow) holder.itemView);
-             row.setBookmarkId(getIdByPosition(position), getLocationFromPosition(position));
-             row.setDragHandleOnTouchListener((v, event) -> {
-@@ -201,13 +196,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+             BookmarkId id = getIdByPosition(position);
+             row.setBookmarkId(id, getLocationFromPosition(position));
+@@ -229,13 +224,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
  
      @Override
      public void onViewRecycled(ViewHolder holder) {
@@ -255,7 +255,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Reord
      }
  
      /**
-@@ -352,9 +340,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+@@ -404,9 +392,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
                  case BookmarkPromoHeader.PromoState.PROMO_NONE:
                      mPromoHeaderType = ViewType.INVALID_PROMO;
                      break;
@@ -265,9 +265,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Reord
                  case BookmarkPromoHeader.PromoState.PROMO_SYNC:
                      mPromoHeaderType = ViewType.SYNC_PROMO;
                      break;
-@@ -475,4 +460,4 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
-             return Location.MIDDLE;
-         }
+@@ -571,4 +556,4 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+     private void clearHighlight() {
+         mHighlightedBookmark = null;
      }
 -}
 \ No newline at end of file

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 261 - 215
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
-@@ -494,7 +494,7 @@ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
+@@ -518,7 +518,7 @@ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
                                           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
-@@ -526,8 +526,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -535,8 +535,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;
    if (!used_testing_config) {

+ 37 - 39
build/patches/Disable-signin-and-data-saver-preferences.patch

@@ -5,11 +5,11 @@ Subject: Disable signin and data saver preferences
 Never show the data saver promo snackbar
 ---
  chrome/android/java/res/xml/main_preferences.xml   | 20 -----
- .../android/java/res/xml/privacy_preferences.xml   |  8 --
+ .../android/java/res/xml/privacy_preferences.xml   |  7 --
  .../browser/preferences/MainPreferences.java       | 86 +---------------------
- .../preferences/privacy/PrivacyPreferences.java    | 17 -----
+ .../preferences/privacy/PrivacyPreferences.java    | 15 ----
  .../java/strings/android_chrome_strings.grd        |  6 --
- 5 files changed, 1 insertion(+), 136 deletions(-)
+ 5 files changed, 1 insertion(+), 133 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
@@ -17,7 +17,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
 @@ -7,21 +7,6 @@
      android:orderingFromXml="false">
  
-     <android.support.v7.preference.PreferenceCategory
+     <PreferenceCategory
 -        android:key="account_section"
 -        android:order="0"
 -        android:title="@string/prefs_section_account"/>
@@ -25,33 +25,33 @@ 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.ChromeBasePreferenceCompat
+-    <org.chromium.chrome.browser.preferences.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.support.v7.preference.PreferenceCategory
+-    <PreferenceCategory
          android:key="basics_section"
          android:order="3"
          android:title="@string/prefs_section_basics"/>
 @@ -91,11 +76,6 @@
          android:order="16"
          android:title="@string/prefs_languages"/>
-     <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
+     <org.chromium.chrome.browser.preferences.ChromeBasePreference
 -        android:fragment="org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment"
 -        android:key="data_reduction"
 -        android:order="17"
 -        android:title="@string/data_reduction_title_lite_mode"/>
--    <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
+-    <org.chromium.chrome.browser.preferences.ChromeBasePreference
          android:fragment="org.chromium.chrome.browser.preferences.download.DownloadPreferences"
          android:key="downloads"
          android:order="18"
 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
-@@ -54,12 +54,4 @@
+@@ -59,12 +59,5 @@
          android:title="@string/clear_browsing_data_title"
          android:summary="@string/clear_browsing_data_summary"
          android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" />
@@ -59,11 +59,11 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 -        android:key="sync_and_services_link_divider"
 -        android:layout="@layout/divider_preference"
 -        android:selectable="false"/>
--    <org.chromium.chrome.browser.preferences.TextMessagePreferenceCompat
+-    <org.chromium.chrome.browser.preferences.TextMessagePreference
 -        android:key="sync_and_services_link"
 -        android:summary="@string/privacy_sync_and_services_link"
--        app:allowDividerBelow="false" />
- </android.support.v7.preference.PreferenceScreen>
+         app:allowDividerBelow="false" />
+ </PreferenceScreen>
 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
@@ -101,7 +101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      public static final String PREF_DOWNLOADS = "downloads";
 @@ -65,7 +58,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
-     private final ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
+     private final ManagedPreferenceDelegate mManagedPreferenceDelegate;
      private final Map<String, Preference> mAllPreferences = new HashMap<>();
 -    private SignInPreference mSignInPreference;
  
@@ -164,7 +164,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      private void setManagedPreferenceDelegateForPreference(String key) {
-@@ -198,13 +167,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -197,13 +166,6 @@ public class MainPreferences extends PreferenceFragmentCompat
      }
  
      private void updatePreferences() {
@@ -178,32 +178,32 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
          updateSearchEnginePreference();
  
          Preference homepagePref = addPreferenceIfAbsent(PREF_HOMEPAGE);
-@@ -224,10 +186,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -223,10 +185,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          } else {
              removePreferenceIfPresent(PREF_DEVELOPER);
          }
 -
--        ChromeBasePreferenceCompat dataReduction =
--                (ChromeBasePreferenceCompat) findPreference(PREF_DATA_REDUCTION);
+-        ChromeBasePreference dataReduction =
+-                (ChromeBasePreference) findPreference(PREF_DATA_REDUCTION);
 -        dataReduction.setSummary(DataReductionPreferenceFragment.generateSummary(getResources()));
      }
  
      private Preference addPreferenceIfAbsent(String key) {
-@@ -241,13 +199,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -240,13 +198,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          if (preference != null) getPreferenceScreen().removePreference(preference);
      }
  
 -    private void updateSyncAndServicesPreference() {
--        ChromeBasePreferenceCompat syncAndServices =
--                (ChromeBasePreferenceCompat) findPreference(PREF_SYNC_AND_SERVICES);
+-        ChromeBasePreference syncAndServices =
+-                (ChromeBasePreference) findPreference(PREF_SYNC_AND_SERVICES);
 -        syncAndServices.setIcon(SyncPreferenceUtils.getSyncStatusIcon(getActivity()));
 -        syncAndServices.setSummary(SyncPreferenceUtils.getSyncStatusSummary(getActivity()));
 -    }
 -
      private void updateSearchEnginePreference() {
          if (!TemplateUrlServiceFactory.get().isLoaded()) {
-             ChromeBasePreferenceCompat searchEnginePref =
-@@ -279,28 +230,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+             ChromeBasePreference searchEnginePref =
+@@ -278,28 +229,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          pref.setSummary(getResources().getString(isOn ? R.string.text_on : R.string.text_off));
      }
  
@@ -232,7 +232,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      // TemplateUrlService.LoadListener implementation.
      @Override
      public void onTemplateUrlServiceLoaded() {
-@@ -308,11 +237,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -307,11 +236,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSearchEnginePreference();
      }
  
@@ -242,10 +242,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 -    }
 -
      @VisibleForTesting
-     ManagedPreferenceDelegateCompat getManagedPreferenceDelegateForTest() {
+     ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
          return mManagedPreferenceDelegate;
-@@ -322,9 +246,6 @@ public class MainPreferences extends PreferenceFragmentCompat
-         return new ManagedPreferenceDelegateCompat() {
+@@ -321,9 +245,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+         return new ManagedPreferenceDelegate() {
              @Override
              public boolean isPreferenceControlledByPolicy(Preference preference) {
 -                if (PREF_DATA_REDUCTION.equals(preference.getKey())) {
@@ -254,7 +254,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();
                  }
-@@ -333,11 +254,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+@@ -332,11 +253,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
              @Override
              public boolean isPreferenceClickDisabledByPolicy(Preference preference) {
@@ -286,18 +286,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 -    private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
      private static final String PREF_USAGE_STATS = "usage_stats_reporting";
  
-     private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
-@@ -97,22 +93,9 @@ public class PrivacyPreferences
+     private ManagedPreferenceDelegate mManagedPreferenceDelegate;
+@@ -97,20 +93,9 @@ public class PrivacyPreferences
              networkPredictionPref.setOrder(canMakePaymentPref.getOrder());
              preferenceScreen.addPreference(networkPredictionPref);
  
 -            Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK);
--            NoUnderlineClickableSpan linkSpan =
--                    new NoUnderlineClickableSpan(getResources(), view -> {
--                        PreferencesLauncher.launchSettingsPage(getActivity(),
--                                SyncAndServicesPreferences.class,
--                                SyncAndServicesPreferences.createArguments(false));
--                    });
+-            NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(getResources(), view -> {
+-                PreferencesLauncher.launchSettingsPage(getActivity(), SyncAndServicesPreferences.class,
+-                        SyncAndServicesPreferences.createArguments(false));
+-            });
 -            syncAndServicesLink.setSummary(
 -                    SpanApplier.applySpans(getString(R.string.privacy_sync_and_services_link),
 -                            new SpanApplier.SpanInfo("<link>", "</link>", linkSpan)));
@@ -308,12 +306,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 -        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK_DIVIDER));
 -        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK));
  
-         ChromeBaseCheckBoxPreferenceCompat navigationErrorPref =
-                 (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_NAVIGATION_ERROR);
+         ChromeBaseCheckBoxPreference navigationErrorPref =
+                 (ChromeBaseCheckBoxPreference) findPreference(PREF_NAVIGATION_ERROR);
 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,9 +339,6 @@ CHAR-LIMIT guidelines:
+@@ -345,9 +345,6 @@ CHAR-LIMIT guidelines:
        </message>
  
        <!-- Sign-in, sync and personalization preferences -->
@@ -323,7 +321,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_SIGN_IN_TO_CHROME" desc="Title for the button to sign in to Chrome using one's Google account. [CHAR-LIMIT=27]">
          Sign in to Chrome
        </message>
-@@ -412,9 +409,6 @@ CHAR-LIMIT guidelines:
+@@ -418,9 +415,6 @@ CHAR-LIMIT guidelines:
        <message name="IDS_URL_KEYED_ANONYMIZED_DATA_SUMMARY" desc="Summary for a checkbox in Settings that controls non-personalized URL collection and informs the user about the data shared by this feature.">
          Sends URLs of pages you visit to Google
        </message>

+ 1 - 1
build/patches/Disable-signin-data-reduction-promos.patch

@@ -9,7 +9,7 @@ Subject: Disable signin/data reduction promos
 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
-@@ -785,35 +785,7 @@ public class ChromeTabbedActivity
+@@ -799,35 +799,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
          try (TraceEvent e = TraceEvent.scoped(
                       "ChromeTabbedActivity.createToolbarButtonInProductHelpController")) {
              ChromePreferenceManager preferenceManager = ChromePreferenceManager.getInstance();

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

@@ -17,8 +17,8 @@ diff --git a/components/content_settings/core/browser/cookie_settings.cc b/compo
 -      prefs::kBlockThirdPartyCookies, false,
 +      prefs::kBlockThirdPartyCookies, true,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-   registry->RegisterBooleanPref(
-       prefs::kCookieControlsEnabled, false,
+   registry->RegisterIntegerPref(
+       prefs::kCookieControlsMode,
 -- 
 2.11.0
 

+ 4 - 4
build/patches/Disable-unused-permissions.patch

@@ -28,7 +28,7 @@ Fixup more permission removal
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -1131,8 +1131,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
+@@ -1158,8 +1158,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
    resources = [
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/launchershortcuts.xml",
@@ -38,7 +38,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
    ]
    res_dir = "java/res_template"
    variables = [ "manifest_package=$chrome_public_manifest_package" ]
-@@ -1143,7 +1142,6 @@ jinja_template_resources("chrome_test_apk_template_resources") {
+@@ -1170,7 +1169,6 @@ jinja_template_resources("chrome_test_apk_template_resources") {
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/launchershortcuts.xml",
      "java/res_template/xml/searchable.xml",
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
      {% block extra_uses_permissions %}
      {% endblock %}
  
-@@ -981,16 +973,6 @@ by a child template that "extends" this file.
+@@ -1009,16 +1001,6 @@ by a child template that "extends" this file.
                  android:resource="@xml/file_paths" />
          </provider>
  
@@ -98,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>
-@@ -1098,15 +1080,6 @@ by a child template that "extends" this file.
+@@ -1126,15 +1108,6 @@ by a child template that "extends" this file.
          <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
              android:exported="false"/>
  

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

@@ -9,7 +9,7 @@ Subject: Disable update scheduler
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/component_updater/UpdateScheduler.java
-@@ -35,10 +35,7 @@ public class UpdateScheduler {
+@@ -36,10 +36,7 @@ public class UpdateScheduler {
  
      @CalledByNative
      /* package */ static boolean isAvailable() {
@@ -21,10 +21,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/component_updat
      }
  
      /* package */ void onStartTaskBeforeNativeLoaded(TaskFinishedCallback callback) {
-@@ -108,4 +105,4 @@ public class UpdateScheduler {
- 
-     private native void nativeOnStartTask(long nativeBackgroundTaskUpdateScheduler);
-     private native void nativeOnStopTask(long nativeBackgroundTaskUpdateScheduler);
+@@ -112,4 +109,4 @@ public class UpdateScheduler {
+         void onStartTask(long nativeBackgroundTaskUpdateScheduler, UpdateScheduler caller);
+         void onStopTask(long nativeBackgroundTaskUpdateScheduler, UpdateScheduler caller);
+     }
 -}
 \ No newline at end of file
 +}

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

@@ -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
-@@ -270,7 +270,7 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
+@@ -288,7 +288,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",

+ 8 - 6
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.
 ---
- .../download/DownloadLocationDialogBridge.java     | 71 +++++++---------------
- 1 file changed, 21 insertions(+), 50 deletions(-)
+ .../download/DownloadLocationDialogBridge.java     | 73 +++++++---------------
+ 1 file changed, 21 insertions(+), 52 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
-@@ -31,9 +31,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -32,9 +32,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) {
-@@ -66,12 +63,28 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -67,12 +64,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
-@@ -104,48 +117,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
+@@ -105,50 +118,6 @@ public class DownloadLocationDialogBridge implements ModalDialogProperties.Contr
          mCustomView = null;
      }
  
@@ -74,7 +74,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
 -                assert(!TextUtils.isEmpty(dir.location));
 -                PrefServiceBridge.getInstance().setDownloadAndSaveFileDefaultDirectory(
 -                        dir.location);
--                nativeOnComplete(mNativeDownloadLocationDialogBridge, mSuggestedPath);
+-                DownloadLocationDialogBridgeJni.get().onComplete(
+-                        mNativeDownloadLocationDialogBridge, DownloadLocationDialogBridge.this,
+-                        mSuggestedPath);
 -            }
 -            return;
 -        }

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

@@ -9,7 +9,7 @@ Subject: Do not store passwords by default
 diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
 --- a/components/password_manager/core/browser/password_manager.cc
 +++ b/components/password_manager/core/browser/password_manager.cc
-@@ -359,10 +359,10 @@ void PasswordManager::RegisterProfilePrefs(
+@@ -202,10 +202,10 @@ void PasswordManager::RegisterProfilePrefs(
    registry->RegisterBooleanPref(prefs::kBlacklistedCredentialsNormalized,
                                  false);
    registry->RegisterBooleanPref(

+ 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
-@@ -270,7 +270,7 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
+@@ -288,7 +288,7 @@ const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",

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

@@ -9,8 +9,8 @@ Subject: Enable download rename option 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
-@@ -395,7 +395,7 @@ const base::Feature kDownloadHomeShowStorageInfo{
-     "DownloadHomeShowStorageInfo", base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -421,7 +421,7 @@ const base::Feature kDownloadNotificationBadge{
+     "DownloadNotificationBadge", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kDownloadRename{"DownloadRename",
 -                                    base::FEATURE_DISABLED_BY_DEFAULT};

+ 2 - 2
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
-@@ -288,6 +288,10 @@ config("compiler") {
+@@ -282,6 +282,10 @@ config("compiler") {
        }
      }
  
@@ -52,7 +52,7 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
 +
      # Linker warnings.
      if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
-         !(is_android && use_order_profiling) && !is_mac && !is_ios &&
+         !is_mac && !is_ios && current_os != "aix") {
 -- 
 2.11.0
 

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

@@ -9,7 +9,7 @@ Subject: Enable night mode menu entry 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
-@@ -235,7 +235,7 @@ const base::Feature kAdjustWebApkInstallationSpace = {
+@@ -246,7 +246,7 @@ const base::Feature kAdjustWebApkInstallationSpace = {
      "AdjustWebApkInstallationSpace", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kAndroidNightMode{"AndroidNightMode",

+ 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
-@@ -609,11 +609,7 @@ const base::Feature kShowTrustedPublisherURL{"ShowTrustedPublisherURL",
+@@ -617,11 +617,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
-@@ -635,7 +631,7 @@ const base::Feature kSiteIsolationForPasswordSites{
+@@ -643,7 +639,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
-@@ -713,6 +713,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
+@@ -761,6 +761,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
    if (status != CONTENT_SETTING_DEFAULT)
      return PermissionResult(status, PermissionStatusSource::UNSPECIFIED);
    PermissionContextBase* context = GetPermissionContext(permission);

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

@@ -9,7 +9,7 @@ Subject: Hide passwords manager link
 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
-@@ -242,7 +242,7 @@ public class SavePasswordsPreferences
+@@ -251,7 +251,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) {
-@@ -317,7 +317,7 @@ public class SavePasswordsPreferences
+@@ -326,7 +326,7 @@ public class SavePasswordsPreferences
              return;
          }
  

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

@@ -32,24 +32,24 @@ diff --git a/third_party/blink/renderer/core/dom/BUILD.gn b/third_party/blink/re
 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
-@@ -248,6 +248,7 @@
+@@ -254,6 +254,7 @@
  #include "third_party/blink/renderer/core/page/scrolling/root_scroller_controller.h"
  #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h"
  #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
 +#include "extensions/video_bg_play.h"
  #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h"
+ #include "third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.h"
  #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h"
- #include "third_party/blink/renderer/core/page/spatial_navigation_controller.h"
-@@ -314,6 +315,8 @@
+@@ -319,6 +320,8 @@
+ #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h"
  #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h"
- #include "third_party/blink/renderer/platform/wtf/time.h"
  
 +#include "extensions/anti_amp_cure.h"
 +
  #ifndef NDEBUG
  using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
  static WeakDocumentSet& liveDocumentSet();
-@@ -6540,8 +6543,34 @@ void Document::FinishedParsing() {
+@@ -6688,8 +6691,34 @@ void Document::FinishedParsing() {
    // Parser should have picked up all preloads by now
    fetcher_->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
  

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

@@ -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
-@@ -1177,7 +1177,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
+@@ -1149,7 +1149,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -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
-@@ -55,7 +55,7 @@ NavigationCorrectionTabObserver::~NavigationCorrectionTabObserver() {}
+@@ -42,7 +42,7 @@ NavigationCorrectionTabObserver::~NavigationCorrectionTabObserver() {}
  // static
  void NavigationCorrectionTabObserver::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* prefs) {
@@ -151,7 +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
-@@ -425,10 +425,7 @@ bool AutofillManager::ShouldParseForms(const std::vector<FormData>& forms,
+@@ -516,10 +516,7 @@ bool AutofillManager::ShouldParseForms(const std::vector<FormData>& forms,
    bool enabled = IsAutofillEnabled();
    sync_state_ = personal_data_ ? personal_data_->GetSyncSigninState()
                                 : AutofillSyncSigninState::kNumSyncStates;
@@ -163,7 +163,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
  
    return enabled;
  }
-@@ -704,10 +701,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
+@@ -803,10 +800,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
        // suggestions available.
        // TODO(mathp): Differentiate between number of suggestions available
        // (current metric) and number shown to the user.
@@ -175,7 +175,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
      }
    }
  
-@@ -1311,8 +1305,8 @@ void AutofillManager::Reset() {
+@@ -1427,8 +1421,8 @@ void AutofillManager::Reset() {
  #if defined(OS_ANDROID) || defined(OS_IOS)
    autofill_assistant_.Reset();
  #endif
@@ -189,7 +189,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
-@@ -146,7 +146,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -150,7 +150,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kAutofillLastVersionDisusedAddressesDeleted, 0,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -201,7 +201,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto
 diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmarks/browser/bookmark_utils.cc
 --- a/components/bookmarks/browser/bookmark_utils.cc
 +++ b/components/bookmarks/browser/bookmark_utils.cc
-@@ -433,12 +433,12 @@ void GetBookmarksMatchingProperties(BookmarkModel* model,
+@@ -443,12 +443,12 @@ bool DoesBookmarkContainWords(const base::string16& title,
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kShowBookmarkBar,
@@ -219,7 +219,7 @@ diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmar
 diff --git a/components/safe_browsing/common/safe_browsing_prefs.cc b/components/safe_browsing/common/safe_browsing_prefs.cc
 --- a/components/safe_browsing/common/safe_browsing_prefs.cc
 +++ b/components/safe_browsing/common/safe_browsing_prefs.cc
-@@ -153,9 +153,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+@@ -167,9 +167,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
    registry->RegisterBooleanPref(
        prefs::kSafeBrowsingSawInterstitialScoutReporting, false);
    registry->RegisterBooleanPref(

+ 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
-@@ -280,6 +280,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
+@@ -283,6 +283,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
    DCHECK(!callback_);
    callback_ = callback;
  

+ 1 - 1
build/patches/Never-send-any-crash-upload-data.patch

@@ -9,7 +9,7 @@ Subject: Never send any crash upload data
 diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc
 --- a/chrome/browser/tracing/crash_service_uploader.cc
 +++ b/chrome/browser/tracing/crash_service_uploader.cc
-@@ -126,6 +126,9 @@ void TraceCrashServiceUploader::DoUpload(
+@@ -125,6 +125,9 @@ void TraceCrashServiceUploader::DoUpload(
      std::unique_ptr<const base::DictionaryValue> metadata,
      const UploadProgressCallback& progress_callback,
      UploadDoneCallback done_callback) {

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

@@ -24,7 +24,7 @@ diff --git a/chrome/android/java/res/xml/site_settings_preferences.xml b/chrome/
 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
-@@ -74,7 +74,7 @@ public class SiteSettingsPreferences
+@@ -73,7 +73,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++) {
@@ -33,7 +33,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
                  getPreferenceScreen().removePreference(findPreference(i));
              }
              getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
-@@ -115,7 +115,6 @@ public class SiteSettingsPreferences
+@@ -111,7 +111,6 @@ public class SiteSettingsPreferences
                  websitePrefs.add(Type.ADS);
              }
              websitePrefs.add(Type.AUTOMATIC_DOWNLOADS);

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

@@ -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
-@@ -2087,15 +2087,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2076,15 +2076,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  
@@ -57,7 +57,7 @@ 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
-@@ -626,7 +626,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -624,7 +624,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
      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

+ 55 - 39
build/patches/Remove-recent-tabs-signin.patch

@@ -3,25 +3,25 @@ Date: Wed, 15 May 2019 17:08:35 +0200
 Subject: Remove recent tabs signin
 
 ---
- .../chrome/browser/signin/SigninManager.java       | 63 +++-------------------
+ .../chrome/browser/signin/SigninManager.java       | 73 ++--------------------
  .../android/signin/signin_manager_android.cc       |  3 +-
- 2 files changed, 7 insertions(+), 59 deletions(-)
+ 2 files changed, 7 insertions(+), 69 deletions(-)
 
 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
-@@ -27,10 +27,7 @@ import org.chromium.base.annotations.NativeMethods;
- import org.chromium.base.metrics.RecordHistogram;
- import org.chromium.base.metrics.RecordUserAction;
+@@ -27,10 +27,7 @@ import org.chromium.base.metrics.RecordUserAction;
  import org.chromium.base.task.PostTask;
+ import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
+ import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler;
 -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.sync.AndroidSyncSettings;
  import org.chromium.content_public.browser.UiThreadTaskTraits;
  
- import java.util.ArrayList;
-@@ -46,7 +43,7 @@ import java.util.List;
+@@ -47,7 +44,7 @@ import java.util.List;
   * <p/>
   * See chrome/browser/signin/signin_manager_android.h for more details.
   */
@@ -30,47 +30,47 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      private static final String TAG = "SigninManager";
  
      /**
-@@ -187,7 +184,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -183,7 +180,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+      */
      private long mNativeSigninManagerAndroid;
      private final Context mContext;
-     private final SigninManagerDelegate mDelegate;
 -    private final AccountTrackerService mAccountTrackerService;
+     private final AndroidSyncSettings mAndroidSyncSettings;
      private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>();
      private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers =
-             new ObserverList<>();
-@@ -222,28 +218,23 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -219,28 +215,24 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
       */
      @CalledByNative
-     private static SigninManager create(long nativeSigninManagerAndroid,
--            SigninManagerDelegate delegate, AccountTrackerService accountTrackerService) {
-+            SigninManagerDelegate delegate) {
+     private static SigninManager create(
+-            long nativeSigninManagerAndroid, AccountTrackerService accountTrackerService) {
++            long nativeSigninManagerAndroid) {
          assert nativeSigninManagerAndroid != 0;
-         assert delegate != null;
 -        assert accountTrackerService != null;
          return new SigninManager(ContextUtils.getApplicationContext(), nativeSigninManagerAndroid,
--                delegate, accountTrackerService);
-+                delegate);
+-                accountTrackerService, AndroidSyncSettings.get());
++                AndroidSyncSettings.get());
      }
  
      @VisibleForTesting
--    SigninManager(Context context, long nativeSigninManagerAndroid, SigninManagerDelegate delegate,
--            AccountTrackerService accountTrackerService) {
-+    SigninManager(Context context, long nativeSigninManagerAndroid, SigninManagerDelegate delegate) {
+     SigninManager(Context context, long nativeSigninManagerAndroid,
+-            AccountTrackerService accountTrackerService, AndroidSyncSettings androidSyncSettings) {
++            AndroidSyncSettings androidSyncSettings) {
          ThreadUtils.assertOnUiThread();
          assert context != null;
+         assert androidSyncSettings != null;
          mContext = context;
          mNativeSigninManagerAndroid = nativeSigninManagerAndroid;
-         mDelegate = delegate;
 -        mAccountTrackerService = accountTrackerService;
+         mAndroidSyncSettings = androidSyncSettings;
  
          mSigninAllowedByPolicy =
-                 SigninManagerJni.get().isSigninAllowedByPolicy(this, mNativeSigninManagerAndroid);
+                 SigninManagerJni.get().isSigninAllowedByPolicy(mNativeSigninManagerAndroid);
 -
 -        mAccountTrackerService.addSystemAccountsSeededListener(this);
      }
  
      /**
-@@ -252,7 +243,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -249,7 +241,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
       */
      @CalledByNative
      public void destroy() {
@@ -78,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
          mNativeSigninManagerAndroid = 0;
      }
  
-@@ -289,8 +279,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -286,8 +277,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
       * Returns true if signin can be started now.
       */
      public boolean isSignInAllowed() {
@@ -88,7 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -348,27 +337,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -344,27 +334,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
      }
  
      /**
@@ -116,7 +116,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.
       *
       * If an activity is provided, it is considered an "interactive" sign-in and the user can be
-@@ -423,16 +391,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -419,16 +388,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
      }
  
      private void progressSignInFlowSeedSystemAccounts() {
@@ -126,7 +126,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
 -            mSignInState.mBlockedOnAccountSeeding = true;
 -        } else {
 -            Activity activity = mSignInState.mActivity;
--            mDelegate.handleGooglePlayServicesUnavailability(activity, !isForceSigninEnabled());
+-            handleGooglePlayServicesUnavailability(activity, !isForceSigninEnabled());
 -            Log.w(TAG, "Cancelling the sign-in process as Google Play services is unavailable");
 -            abortSignIn();
 -        }
@@ -134,44 +134,60 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -467,14 +426,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -462,18 +422,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
          // This method should be called at most once per sign-in flow.
          assert mSignInState != null;
  
--        SigninManagerJni.get().onSignInCompleted(
--                this, mNativeSigninManagerAndroid, mSignInState.mAccount.name);
+-        if (!SigninManagerJni.get().setPrimaryAccount(
+-                    mNativeSigninManagerAndroid, mSignInState.mAccount.name)) {
+-            Log.w(TAG, "Failed to set the PrimaryAccount in IdentityManager, aborting signin");
+-            abortSignIn();
+-            return;
+-        }
 -
 -        // Cache the signed-in account name. This must be done after the native call, otherwise
 -        // sync tries to start without being signed in natively and crashes.
 -        ChromeSigninController.get().setSignedInAccountName(mSignInState.mAccount.name);
--        mDelegate.enableSync(mSignInState.mAccount);
+-        enableSync(mSignInState.mAccount);
 -
          if (mSignInState.mCallback != null) {
              mSignInState.mCallback.onSignInComplete();
          }
-@@ -642,12 +593,10 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -640,10 +588,8 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
  
          // Native sign-out must happen before resetting the account so data is deleted correctly.
          // http://crbug.com/589028
 -        ChromeSigninController.get().setSignedInAccountName(null);
          if (mSignOutState.mWipeDataHooks != null) mSignOutState.mWipeDataHooks.preWipeData();
-         mDelegate.disableSyncAndWipeData(
-                 mSignOutState.mManagementDomain != null || mSignOutState.mForceWipeUserData,
-                 this::onProfileDataWiped);
+         disableSyncAndWipeData(mSignOutState.mShouldWipeUserData, this::onProfileDataWiped);
 -        mAccountTrackerService.invalidateAccountSeedStatus(true);
      }
  
      @VisibleForTesting
+@@ -719,13 +665,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+         SigninManagerJni.get().stopApplyingCloudPolicy(mNativeSigninManagerAndroid);
+     }
+ 
+-    private void enableSync(Account account) {
+-        // Cache the signed-in account name. This must be done after the native call, otherwise
+-        // sync tries to start without being signed in the native code and crashes.
+-        mAndroidSyncSettings.updateAccount(account);
+-        mAndroidSyncSettings.enableChromeSync();
+-    }
+-
+     private void disableSyncAndWipeData(
+             boolean shouldWipeUserData, final Runnable wipeDataCallback) {
+         mAndroidSyncSettings.updateAccount(null);
 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
-@@ -53,8 +53,7 @@ SigninManagerAndroid::SigninManagerAndroid(
+@@ -145,8 +145,7 @@ SigninManagerAndroid::SigninManagerAndroid(
+                              g_browser_process->local_state());
  
    java_signin_manager_ = Java_SigninManager_create(
-       base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
--      signin_manager_delegate_->GetJavaObject(),
+-      base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
 -      identity_manager_->LegacyGetAccountTrackerServiceJavaObject());
-+      signin_manager_delegate_->GetJavaObject());
++      base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this));
  }
  
  base::android::ScopedJavaLocalRef<jobject>

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

@@ -0,0 +1,135 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Thu, 10 Oct 2019 23:30:16 +0200
+Subject: Revert "Cleanup Search Ready Omnibox flag since it has launched"
+
+This reverts commit ae458edcc8422d0815d0e82261e71fe10d7d6fc2.
+---
+ .../java/src/org/chromium/chrome/browser/ChromeFeatureList.java    | 1 +
+ .../chrome/browser/omnibox/suggestions/AutocompleteMediator.java   | 7 +++++++
+ chrome/browser/about_flags.cc                                      | 3 +++
+ chrome/browser/android/chrome_feature_list.cc                      | 4 ++++
+ chrome/browser/android/chrome_feature_list.h                       | 1 +
+ chrome/browser/flag-metadata.json                                  | 5 +++++
+ chrome/browser/flag_descriptions.cc                                | 5 +++++
+ chrome/browser/flag_descriptions.h                                 | 3 +++
+ 8 files changed, 29 insertions(+)
+
+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 {
+     public static final String REMOVE_NAVIGATION_HISTORY = "RemoveNavigationHistory";
+     public static final String REORDER_BOOKMARKS = "ReorderBookmarks";
+     public static final String REVAMPED_CONTEXT_MENU = "RevampedContextMenu";
++    public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox";
+     public static final String SEND_TAB_TO_SELF = "SyncSendTabToSelf";
+     public static final String SERVICE_MANAGER_FOR_DOWNLOAD = "ServiceManagerForDownload";
+     public static final String SERVICE_WORKER_PAYMENT_APPS = "ServiceWorkerPaymentApps";
+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
+@@ -321,6 +321,13 @@ class AutocompleteMediator
+     void onNativeInitialized() {
+         mNativeInitialized = true;
+ 
++        // The feature is instantiated in the constructor to simplify plumbing. If the feature is
++        // actually disabled, null out the coordinator.
++        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.SEARCH_READY_OMNIBOX)) {
++            mEditUrlProcessor.destroy();
++            mEditUrlProcessor = null;
++        }
++
+         mShowSuggestionFavicons =
+                 ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_SHOW_SUGGESTION_FAVICONS);
+ 
+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
+@@ -1961,6 +1961,9 @@ const FeatureEntry kFeatureEntries[] = {
+     {"enable-homepage-tile", flag_descriptions::kHomepageTileName,
+      flag_descriptions::kHomepageTileDescription, kOsAndroid,
+      FEATURE_VALUE_TYPE(chrome::android::kHomepageTile)},
++    {"enable-search-ready-omnibox", flag_descriptions::kSearchReadyOmniboxName,
++     flag_descriptions::kSearchReadyOmniboxDescription, kOsAndroid,
++     FEATURE_VALUE_TYPE(chrome::android::kSearchReadyOmniboxFeature)},
+     {"enable-bookmark-reorder", flag_descriptions::kReorderBookmarksName,
+      flag_descriptions::kReorderBookmarksDescription, kOsAndroid,
+      FEATURE_VALUE_TYPE(chrome::android::kReorderBookmarks)},
+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[] = {
+     &kReaderModeInCCT,
+     &kReorderBookmarks,
+     &kRevampedContextMenu,
++    &kSearchReadyOmniboxFeature,
+     &kSearchEnginePromoExistingDevice,
+     &kSearchEnginePromoNewDevice,
+     &kServiceManagerForBackgroundPrefetch,
+@@ -516,6 +517,9 @@ const base::Feature kReorderBookmarks{"ReorderBookmarks",
+ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
+                                          base::FEATURE_DISABLED_BY_DEFAULT};
+ 
++const base::Feature kSearchReadyOmniboxFeature{
++    "SearchReadyOmnibox", base::FEATURE_ENABLED_BY_DEFAULT};
++
+ const base::Feature kServiceManagerForBackgroundPrefetch{
+     "ServiceManagerForBackgroundPrefetch", base::FEATURE_DISABLED_BY_DEFAULT};
+ 
+diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
+--- a/chrome/browser/android/chrome_feature_list.h
++++ b/chrome/browser/android/chrome_feature_list.h
+@@ -101,6 +101,7 @@ extern const base::Feature kReaderModeInCCT;
+ extern const base::Feature kRevampedContextMenu;
+ extern const base::Feature kSearchEnginePromoExistingDevice;
+ extern const base::Feature kSearchEnginePromoNewDevice;
++extern const base::Feature kSearchReadyOmniboxFeature;
+ extern const base::Feature kServiceManagerForBackgroundPrefetch;
+ extern const base::Feature kServiceManagerForDownload;
+ extern const base::Feature kSettingsModernStatusBar;
+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
+@@ -1626,6 +1626,11 @@
+     "expiry_milestone": 78
+   },
+   {
++    "name": "enable-search-ready-omnibox",
++    "owners": [ "mdjones" ],
++    "expiry_milestone": 75
++  },
++  {
+     "name": "enable-send-tab-to-self",
+     "owners": [ "//components/send_tab_to_self/OWNERS" ],
+     "expiry_milestone": 77
+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
+@@ -2695,6 +2695,11 @@ const char kSafeBrowsingUseLocalBlacklistsV2Description[] =
+     "process to check the Safe Browsing reputation of URLs without calling "
+     "into GmsCore for every URL.";
+ 
++const char kSearchReadyOmniboxName[] = "Search Ready Omnibox";
++const char kSearchReadyOmniboxDescription[] =
++    "Clears the omnibox and adds a suggestion item to share, copy, or edit the "
++    "URL.";
++
+ const char kSetMarketUrlForTestingName[] = "Set market URL for testing";
+ const char kSetMarketUrlForTestingDescription[] =
+     "When enabled, sets the market URL for use in testing the update menu "
+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
+@@ -1594,6 +1594,9 @@ extern const char kReaderModeInCCTDescription[];
+ extern const char kSafeBrowsingUseLocalBlacklistsV2Name[];
+ extern const char kSafeBrowsingUseLocalBlacklistsV2Description[];
+ 
++extern const char kSearchReadyOmniboxName[];
++extern const char kSearchReadyOmniboxDescription[];
++
+ extern const char kSetMarketUrlForTestingName[];
+ extern const char kSetMarketUrlForTestingDescription[];
+ 
+-- 
+2.11.0
+

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

@@ -0,0 +1,37 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Mon, 14 Oct 2019 20:27:33 +0200
+Subject: Revert "[Merge to M78] Enable AImageReader by default."
+
+This reverts commit 60c3d4531b180b911767fb3ea7c3553d7f408c25.
+---
+ gpu/config/gpu_finch_features.cc | 2 +-
+ media/base/media_switches.cc     | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
+--- a/gpu/config/gpu_finch_features.cc
++++ b/gpu/config/gpu_finch_features.cc
+@@ -31,7 +31,7 @@ bool FieldIsInBlacklist(const char* current_value, std::string blacklist_str) {
+ #if defined(OS_ANDROID)
+ // Use android AImageReader when playing videos with MediaPlayer.
+ const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
+-                                             base::FEATURE_ENABLED_BY_DEFAULT};
++                                             base::FEATURE_DISABLED_BY_DEFAULT};
+ 
+ // Use android SurfaceControl API for managing display compositor's buffer queue
+ // and using overlays on Android.
+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
+@@ -417,7 +417,7 @@ const base::Feature kMediaDrmPreprovisioningAtStartup{
+ 
+ // Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
+ const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",
+-                                             base::FEATURE_ENABLED_BY_DEFAULT};
++                                             base::FEATURE_DISABLED_BY_DEFAULT};
+ 
+ // Prevents using SurfaceLayer for videos. This is meant to be used by embedders
+ // that cannot support SurfaceLayer at the moment.
+-- 
+2.11.0
+

+ 2 - 2
build/patches/Revert-Remove-UnifiedConsent-from-ChromeFeatureList.patch

@@ -10,9 +10,9 @@ This reverts commit c513d4c926a42ba6cc5eccfd5e85ba64c38bf0c1.
 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
-@@ -327,6 +327,7 @@ public abstract class ChromeFeatureList {
+@@ -339,6 +339,7 @@ public abstract class ChromeFeatureList {
+     public static final String TRUSTED_WEB_ACTIVITY_NOTIFICATION_DELEGATION_ENROLMENT =
              "TrustedWebActivityNotificationDelegationAutoEnrolment";
-     public static final String TWO_PANES_START_SURFACE_ANDROID = "TwoPanesStartSurfaceAndroid";
      public static final String VIDEO_PERSISTENCE = "VideoPersistence";
 +    public static final String UNIFIED_CONSENT = "UnifiedConsent";
      public static final String USAGE_STATS = "UsageStats";

+ 100 - 115
build/patches/Revert-Remove-pre-unified-consent-code-in-sync-and-privacy-directory.patch

@@ -7,9 +7,9 @@ This reverts commit c672a0683e89eba3554e2562156b3c8532136f21.
 
 Restore translations
 ---
- .../android/java/res/xml/privacy_preferences.xml   |  40 +++++-
- .../preferences/privacy/PrivacyPreferences.java    | 158 +++++++++++++++++++--
- .../preferences/sync/SyncPreferenceUtils.java      |   6 +-
+ .../android/java/res/xml/privacy_preferences.xml   |  35 +++++
+ .../preferences/privacy/PrivacyPreferences.java    | 157 +++++++++++++++++++--
+ .../preferences/sync/SyncPreferenceUtils.java      |   5 +-
  .../browser/sync/SyncNotificationController.java   |  17 ++-
  .../java/strings/android_chrome_strings.grd        |  21 +++
  .../translations/android_chrome_strings_am.xtb     |  19 ++-
@@ -66,63 +66,58 @@ Restore translations
  .../translations/android_chrome_strings_zh-TW.xtb  |  19 ++-
  .../chromium/chrome/browser/sync/SyncTestRule.java |   9 +-
  .../org/chromium/chrome/browser/sync/UkmTest.java  |  50 ++++++-
- 59 files changed, 1210 insertions(+), 79 deletions(-)
+ 59 files changed, 1208 insertions(+), 74 deletions(-)
 
 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
-@@ -7,27 +7,57 @@
+@@ -7,6 +7,29 @@
      xmlns:app="http://schemas.android.com/apk/res-auto">
  
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
+     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="navigation_error"
 +        android:title="@string/navigation_error_title"
 +        android:summary="@string/navigation_error_summary"
 +        android:defaultValue="true" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="search_suggestions"
 +        android:title="@string/search_suggestions_title"
 +        android:summary="@string/search_suggestions_summary"
 +        android:defaultValue="true" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="safe_browsing_scout_reporting"
 +        android:title="@string/safe_browsing_scout_reporting_title"
 +        android:summary="@string/safe_browsing_scout_reporting_summary" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="safe_browsing"
 +        android:title="@string/safe_browsing_title"
 +        android:summary="@string/safe_browsing_summary" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
 +        android:key="network_predictions"
 +        android:title="@string/network_predictions_title"
 +        android:summary="@string/network_predictions_summary"
 +        android:persistent="false" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
          android:key="can_make_payment"
          android:title="@string/can_make_payment_title"
          android:summary="@string/settings_can_make_payment_toggle_label" />
--    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
--        android:key="preload_pages"
--        android:title="@string/preload_pages_title"
--        android:summary="@string/preload_pages_summary"
--        android:persistent="false" />
-     <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
+@@ -19,15 +42,27 @@
          android:key="usage_stats_reporting"
          android:title="@string/usage_stats_setting_title"
          android:persistent="false" />
-     <android.support.v7.preference.Preference
++    <android.support.v7.preference.Preference
 +        android:key="usage_and_crash_reports"
 +        android:title="@string/usage_and_crash_reports_title_legacy"
 +        android:fragment="org.chromium.chrome.browser.preferences.privacy.UsageAndCrashReportsPreferenceFragment" />
-+    <android.support.v7.preference.Preference
+     <Preference
          android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
          android:key="do_not_track"
          android:title="@string/do_not_track_title" />
-     <android.support.v7.preference.Preference
++    <android.support.v7.preference.Preference
 +        android:key="contextual_search"
 +        android:title="@string/contextual_search_title"
 +        android:fragment="org.chromium.chrome.browser.preferences.privacy.ContextualSearchPreferenceFragment" />
-+    <android.support.v7.preference.Preference
+     <Preference
          android:key="clear_browsing_data"
          android:title="@string/clear_browsing_data_title"
          android:summary="@string/clear_browsing_data_summary"
@@ -131,7 +126,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 +        android:key="sync_and_services_link_divider"
 +        android:layout="@layout/divider_preference"
 +        android:selectable="false"/>
-     <org.chromium.chrome.browser.preferences.TextMessagePreferenceCompat
+     <org.chromium.chrome.browser.preferences.TextMessagePreference
          android:key="sync_and_services_link"
          android:summary="@string/privacy_sync_and_services_link"
 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
@@ -151,8 +146,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +import org.chromium.chrome.browser.ChromeFeatureList;
 +import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial;
  import org.chromium.chrome.browser.help.HelpAndFeedback;
- import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat;
- import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegateCompat;
+ import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference;
+ import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
 @@ -33,11 +36,21 @@ import org.chromium.ui.text.SpanApplier;
   */
  public class PrivacyPreferences
@@ -175,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
      private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
 +    private static final String PREF_USAGE_STATS = "usage_stats_reporting";
  
-     private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
+     private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
 @@ -49,6 +62,7 @@ public class PrivacyPreferences
          getActivity().setTitle(R.string.prefs_privacy);
@@ -185,14 +180,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
  
          mManagedPreferenceDelegate = createManagedPreferenceDelegate();
  
-@@ -62,15 +76,69 @@ public class PrivacyPreferences
+@@ -62,26 +76,88 @@ public class PrivacyPreferences
          networkPredictionPref.setOnPreferenceChangeListener(this);
          networkPredictionPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
  
 -        Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK);
 -        NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(getResources(), view -> {
--            PreferencesLauncher.launchSettingsPageCompat(getActivity(),
--                    SyncAndServicesPreferences.class,
+-            PreferencesLauncher.launchSettingsPage(getActivity(), SyncAndServicesPreferences.class,
 -                    SyncAndServicesPreferences.createArguments(false));
 -        });
 -        syncAndServicesLink.setSummary(
@@ -220,12 +214,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +            preferenceScreen.addPreference(networkPredictionPref);
 +
 +            Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK);
-+            NoUnderlineClickableSpan linkSpan =
-+                    new NoUnderlineClickableSpan(getResources(), view -> {
-+                        PreferencesLauncher.launchSettingsPage(getActivity(),
-+                                SyncAndServicesPreferences.class,
-+                                SyncAndServicesPreferences.createArguments(false));
-+                    });
++            NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(getResources(), view -> {
++                PreferencesLauncher.launchSettingsPage(getActivity(), SyncAndServicesPreferences.class,
++                        SyncAndServicesPreferences.createArguments(false));
++            });
 +            syncAndServicesLink.setSummary(
 +                    SpanApplier.applySpans(getString(R.string.privacy_sync_and_services_link),
 +                            new SpanApplier.SpanInfo("<link>", "</link>", linkSpan)));
@@ -236,13 +228,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK_DIVIDER));
 +        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK));
 +
-+        ChromeBaseCheckBoxPreferenceCompat navigationErrorPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_NAVIGATION_ERROR);
++        ChromeBaseCheckBoxPreference navigationErrorPref =
++                (ChromeBaseCheckBoxPreference) findPreference(PREF_NAVIGATION_ERROR);
 +        navigationErrorPref.setOnPreferenceChangeListener(this);
 +        navigationErrorPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
 +
-+        ChromeBaseCheckBoxPreferenceCompat searchSuggestionsPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_SEARCH_SUGGESTIONS);
++        ChromeBaseCheckBoxPreference searchSuggestionsPref =
++                (ChromeBaseCheckBoxPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
 +        searchSuggestionsPref.setOnPreferenceChangeListener(this);
 +        searchSuggestionsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
 +
@@ -251,20 +243,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 +        }
 +
 +        // Listen to changes to the Extended Reporting pref.
-+        ChromeBaseCheckBoxPreferenceCompat scoutReportingPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(
++        ChromeBaseCheckBoxPreference scoutReportingPref =
++                (ChromeBaseCheckBoxPreference) findPreference(
 +                        PREF_SAFE_BROWSING_SCOUT_REPORTING);
 +        scoutReportingPref.setOnPreferenceChangeListener(this);
 +        scoutReportingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
 +
-+        ChromeBaseCheckBoxPreferenceCompat safeBrowsingPref =
-+                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_SAFE_BROWSING);
++        ChromeBaseCheckBoxPreference safeBrowsingPref =
++                (ChromeBaseCheckBoxPreference) findPreference(PREF_SAFE_BROWSING);
 +        safeBrowsingPref.setOnPreferenceChangeListener(this);
 +        safeBrowsingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
  
          updateSummaries();
-     }
-@@ -78,11 +146,20 @@ public class PrivacyPreferences
+-    }
++     }
+ 
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          String key = preference.getKey();
@@ -288,7 +281,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          }
  
          return true;
-@@ -100,9 +177,37 @@ public class PrivacyPreferences
+@@ -99,9 +175,37 @@ public class PrivacyPreferences
      public void updateSummaries() {
          PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
  
@@ -326,7 +319,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          CheckBoxPreference canMakePaymentPref =
                  (CheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
          if (canMakePaymentPref != null) {
-@@ -115,6 +220,19 @@ public class PrivacyPreferences
+@@ -114,6 +218,19 @@ public class PrivacyPreferences
              doNotTrackPref.setSummary(prefServiceBridge.isDoNotTrackEnabled() ? textOn : textOff);
          }
  
@@ -346,7 +339,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
          Preference usageStatsPref = findPreference(PREF_USAGE_STATS);
          if (usageStatsPref != null) {
              if (BuildInfo.isAtLeastQ() && prefServiceBridge.getBoolean(Pref.USAGE_STATS_ENABLED)) {
-@@ -139,6 +257,18 @@ public class PrivacyPreferences
+@@ -138,6 +255,18 @@ public class PrivacyPreferences
          return preference -> {
              String key = preference.getKey();
              PrefServiceBridge prefs = PrefServiceBridge.getInstance();
@@ -368,15 +361,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java
-@@ -19,6 +19,7 @@ import org.chromium.base.BuildInfo;
- import org.chromium.base.metrics.RecordHistogram;
- import org.chromium.base.metrics.RecordUserAction;
- import org.chromium.chrome.R;
-+import org.chromium.chrome.browser.ChromeFeatureList;
- import org.chromium.chrome.browser.IntentHandler;
- import org.chromium.chrome.browser.LaunchIntentDispatcher;
- import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
-@@ -111,7 +112,10 @@ public class SyncPreferenceUtils {
+@@ -119,7 +119,10 @@ public class SyncPreferenceUtils {
              if (profileSyncService.isPassphraseRequiredForDecryption()) {
                  return res.getString(R.string.sync_need_passphrase);
              }
@@ -391,8 +376,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/syn
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java
-@@ -7,11 +7,13 @@ package org.chromium.chrome.browser.sync;
- import android.content.ComponentName;
+@@ -6,11 +6,13 @@ package org.chromium.chrome.browser.sync;
+ 
  import android.content.Context;
  import android.content.Intent;
 +import android.os.Bundle;
@@ -405,7 +390,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotifi
  import org.chromium.chrome.browser.notifications.ChromeNotification;
  import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder;
  import org.chromium.chrome.browser.notifications.NotificationBuilderFactory;
-@@ -24,6 +26,7 @@ import org.chromium.chrome.browser.notifications.PendingIntentProvider;
+@@ -23,6 +25,7 @@ import org.chromium.chrome.browser.notifications.PendingIntentProvider;
  import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions;
  import org.chromium.chrome.browser.preferences.PreferencesLauncher;
  import org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences;
@@ -413,7 +398,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotifi
  import org.chromium.chrome.browser.sync.GoogleServiceAuthError.State;
  import org.chromium.chrome.browser.sync.ui.PassphraseActivity;
  import org.chromium.components.sync.AndroidSyncSettings;
-@@ -146,9 +149,17 @@ public class SyncNotificationController implements ProfileSyncService.SyncStateC
+@@ -145,9 +148,17 @@ public class SyncNotificationController implements ProfileSyncService.SyncStateC
       * @return the intent for opening the settings
       */
      private Intent createSettingsIntent() {
@@ -437,7 +422,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotifi
 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
-@@ -710,6 +710,18 @@ CHAR-LIMIT guidelines:
+@@ -728,6 +728,18 @@ CHAR-LIMIT guidelines:
        <message name="IDS_PREFS_PRIVACY" desc="Title for the Privacy preferences. [CHAR-LIMIT=32]">
          Privacy
        </message>
@@ -456,7 +441,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_SAFE_BROWSING_SCOUT_REPORTING_TITLE" desc="Title for checkbox that controls reporting data to detect bad apps/sites. Please ensure ‘Safe Browsing’ in this message matches the ‘Safe Browsing’ settings title.">
          Help improve Chrome security
        </message>
-@@ -722,6 +734,12 @@ CHAR-LIMIT guidelines:
+@@ -740,6 +752,12 @@ CHAR-LIMIT guidelines:
        <message name="IDS_SAFE_BROWSING_SUMMARY" desc="Summary for safe browsing.">
          Sends URLs of some pages you visit to Google, when your security is at risk
        </message>
@@ -469,7 +454,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
        <message name="IDS_CONTEXTUAL_SEARCH_TITLE" desc="Name for the Contextual Search feature, which allows users to search for a term in a web page by tapping on it.">
          Tap to Search
        </message>
-@@ -1488,6 +1506,9 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1506,6 +1524,9 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_ACCOUNT_MANAGEMENT_TITLE" desc="Header title for the account management screen. [CHAR-LIMIT=32]">
          Signed in to Google as
        </message>
@@ -482,7 +467,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">ይህ ለሁሉም ጣቢያዎች ውሂብን ያጸዳል፣ የሚከተሉትን ጨምሮ፦</translation>
  <translation id="983192555821071799">ሁሉንም ትሮች ይዝጉ</translation>
  <translation id="987264212798334818">አጠቃላይ</translation>
@@ -509,7 +494,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">سيؤدي هذا إلى محو بيانات جميع المواقع، بما في ذلك:</translation>
  <translation id="983192555821071799">إغلاق جميع علامات التبويب</translation>
  <translation id="987264212798334818">عام</translation>
@@ -536,7 +521,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">Това действие ще изчисти данните за всички сайтове, включително:</translation>
  <translation id="983192555821071799">Затваряне на всички раздели</translation>
  <translation id="987264212798334818">Общи</translation>
@@ -563,7 +548,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
-@@ -1137,4 +1137,21 @@
+@@ -1143,4 +1143,21 @@
  <translation id="982182592107339124">এটা সব সাইটের জন্য ডেটা সাফ করবে, এতে অন্তর্ভুক্ত আছে:</translation>
  <translation id="983192555821071799">সমস্ত ট্যাবগুলি বন্ধ করুন</translation>
  <translation id="987264212798334818">সাধারণ</translation>
@@ -590,7 +575,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bn.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
-@@ -1135,4 +1135,21 @@ El lloc web NO obté accés a la càmera. Només tu pots veure les imatges de la
+@@ -1141,4 +1141,21 @@ El lloc web NO obté accés a la càmera. Només tu pots veure les imatges de la
  <translation id="982182592107339124">S'esborraran les dades de tots els llocs web, com ara:</translation>
  <translation id="983192555821071799">Tanca totes les pestanyes</translation>
  <translation id="987264212798334818">General</translation>
@@ -617,7 +602,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
-@@ -1135,4 +1135,21 @@ Web NEZÍSKÁ přístup k fotoaparátu. Fotky z fotoaparátu uvidíte pouze vy
+@@ -1141,4 +1141,21 @@ Web NEZÍSKÁ přístup k fotoaparátu. Fotky z fotoaparátu uvidíte pouze vy
  <translation id="982182592107339124">Tímto vymažete data všech webů včetně těchto:</translation>
  <translation id="983192555821071799">Zavřít všechny karty</translation>
  <translation id="987264212798334818">Všeobecné</translation>
@@ -644,7 +629,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
-@@ -1135,4 +1135,21 @@ Websitet får IKKE adgang til kameraet. Kameraets billeder kan kun ses af dig.</
+@@ -1141,4 +1141,21 @@ Websitet får IKKE adgang til kameraet. Kameraets billeder kan kun ses af dig.</
  <translation id="982182592107339124">Denne handling rydder dataene for alle websites, herunder:</translation>
  <translation id="983192555821071799">Luk alle faner</translation>
  <translation id="987264212798334818">Generelt</translation>
@@ -671,7 +656,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
-@@ -1135,4 +1135,21 @@ Die Website erhält KEINEN Zugriff auf die Kamera. Die Kamerabilder sind nur fü
+@@ -1141,4 +1141,21 @@ Die Website erhält KEINEN Zugriff auf die Kamera. Die Kamerabilder sind nur fü
  <translation id="982182592107339124">Alle Daten für alle Websites werden gelöscht, darunter:</translation>
  <translation id="983192555821071799">Alle Tabs schließen</translation>
  <translation id="987264212798334818">Allgemein</translation>
@@ -698,7 +683,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">Αυτή η ενέργεια θα εκκαθαρίσει τα δεδομένα για όλους τους ιστότοπους, όπως:</translation>
  <translation id="983192555821071799">Κλείσιμο όλων των καρτελών</translation>
  <translation id="987264212798334818">Γενικά</translation>
@@ -725,7 +710,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
-@@ -1135,4 +1135,21 @@ The site does NOT gain access to the camera. The camera images are only visible
+@@ -1141,4 +1141,21 @@ The site does NOT gain access to the camera. The camera images are only visible
  <translation id="982182592107339124">This will clear data for all sites, including:</translation>
  <translation id="983192555821071799">Close all tabs</translation>
  <translation id="987264212798334818">General</translation>
@@ -752,7 +737,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
-@@ -1135,4 +1135,21 @@ El sitio NO podrá acceder a la cámara. Solo tú podrás ver las imágenes de l
+@@ -1141,4 +1141,21 @@ El sitio NO podrá acceder a la cámara. Solo tú podrás ver las imágenes de l
  <translation id="982182592107339124">Esta acción borrará los datos de todos los sitios, entre los que se incluyen:</translation>
  <translation id="983192555821071799">Cerrar todas las pestañas</translation>
  <translation id="987264212798334818">General</translation>
@@ -779,7 +764,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
-@@ -1135,4 +1135,21 @@ El sitio web no obtendrá acceso a la cámara. Solo tú puedes ver las imágenes
+@@ -1141,4 +1141,21 @@ El sitio web no obtendrá acceso a la cámara. Solo tú puedes ver las imágenes
  <translation id="982182592107339124">Se borrarán los datos de todos los sitios web, incluidos:</translation>
  <translation id="983192555821071799">Cerrar todas las pestañas</translation>
  <translation id="987264212798334818">General</translation>
@@ -806,7 +791,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
-@@ -1135,4 +1135,21 @@ Sait EI saa juurdepääsu kaamerale. Kaamera jäädvustatud pildid on nähtavad
+@@ -1141,4 +1141,21 @@ Sait EI saa juurdepääsu kaamerale. Kaamera jäädvustatud pildid on nähtavad
  <translation id="982182592107339124">See kustutab kõikide saitide andmed, sealhulgas:</translation>
  <translation id="983192555821071799">Sule kõik vahelehed</translation>
  <translation id="987264212798334818">Üldine</translation>
@@ -833,7 +818,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">با این کار داده‌های همه سایت‌ها پاک می‌شود، از جمله:</translation>
  <translation id="983192555821071799">بستن همه برگه‌ها</translation>
  <translation id="987264212798334818">موارد کلی</translation>
@@ -860,7 +845,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
-@@ -1135,4 +1135,21 @@ Sivusto EI saa kameran käyttöoikeutta. Kamerakuvat näkyvät vain sinulle.</tr
+@@ -1141,4 +1141,21 @@ Sivusto EI saa kameran käyttöoikeutta. Kamerakuvat näkyvät vain sinulle.</tr
  <translation id="982182592107339124">Kaikkien sivustojen tiedot poistetaan, esimerkiksi:</translation>
  <translation id="983192555821071799">Sulje kaikki välilehdet</translation>
  <translation id="987264212798334818">Yleistä</translation>
@@ -887,7 +872,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
-@@ -1135,4 +1135,21 @@ HINDI magkakaroon ng access sa camera ang site. Ikaw lang ang makakakita ng mga
+@@ -1141,4 +1141,21 @@ HINDI magkakaroon ng access sa camera ang site. Ikaw lang ang makakakita ng mga
  <translation id="982182592107339124">Iki-clear nito ang data para sa lahat ng site, kabilang ang:</translation>
  <translation id="983192555821071799">Isara ang lahat ng tab</translation>
  <translation id="987264212798334818">Pangkalahatan</translation>
@@ -914,7 +899,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
-@@ -1135,4 +1135,21 @@ En revanche, le site n'a PAS accès à la caméra. Vous seul pouvez voir les ima
+@@ -1141,4 +1141,21 @@ En revanche, le site n'a PAS accès à la caméra. Vous seul pouvez voir les ima
  <translation id="982182592107339124">Cette action entraînera la suppression des données pour tous les sites, y compris :</translation>
  <translation id="983192555821071799">Fermer tous les onglets</translation>
  <translation id="987264212798334818">Général</translation>
@@ -941,7 +926,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VR મોડમાં દાખલ થતા પહેલા ખાતરી ક
  <translation id="982182592107339124">આ બધી સાઇટ્સ પરથી ડેટા સાફ કરશે, આ સહિત:</translation>
  <translation id="983192555821071799">બધા ટેબ્સ બંધ કરો</translation>
  <translation id="987264212798334818">સામાન્ય</translation>
@@ -968,7 +953,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_gu.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">इससे इन सभी साइटों का डेटा साफ़ हो जाएगा:</translation>
  <translation id="983192555821071799">सभी टैब बंद करें</translation>
  <translation id="987264212798334818">सामान्य</translation>
@@ -995,7 +980,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
-@@ -1135,4 +1135,21 @@ Web-lokacija NE dobiva pristup fotoaparatu. Slike fotoaparata možete vidjeti sa
+@@ -1141,4 +1141,21 @@ Web-lokacija NE dobiva pristup fotoaparatu. Slike fotoaparata možete vidjeti sa
  <translation id="982182592107339124">Izbrisat će se podaci za sve web-lokacije, uključujući:</translation>
  <translation id="983192555821071799">Zatvori sve kartice</translation>
  <translation id="987264212798334818">Općenito</translation>
@@ -1022,7 +1007,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
-@@ -1135,4 +1135,21 @@ A webhely NEM kap hozzáférést a kamerához. A kamera képét csak Ön láthat
+@@ -1141,4 +1141,21 @@ A webhely NEM kap hozzáférést a kamerához. A kamera képét csak Ön láthat
  <translation id="982182592107339124">Ezzel törli az összes webhely adatait, beleértve a következőket:</translation>
  <translation id="983192555821071799">Az összes lap bezárása</translation>
  <translation id="987264212798334818">Általános</translation>
@@ -1049,7 +1034,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
-@@ -1135,4 +1135,21 @@ Situs TIDAK mendapatkan akses ke kamera. Gambar kamera hanya dapat dilihat oleh
+@@ -1141,4 +1141,21 @@ Situs TIDAK mendapatkan akses ke kamera. Gambar kamera hanya dapat dilihat oleh
  <translation id="982182592107339124">Tindakan ini akan menghapus data untuk semua situs, termasuk:</translation>
  <translation id="983192555821071799">Tutup semua tab</translation>
  <translation id="987264212798334818">Umum</translation>
@@ -1076,7 +1061,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
-@@ -1135,4 +1135,21 @@ Il sito NON ottiene l'accesso alla videocamera. Le immagini della videocamera so
+@@ -1141,4 +1141,21 @@ Il sito NON ottiene l'accesso alla videocamera. Le immagini della videocamera so
  <translation id="982182592107339124">Questa operazione cancellerà i dati di tutti i siti, inclusi:</translation>
  <translation id="983192555821071799">Chiudi tutte le schede</translation>
  <translation id="987264212798334818">Generali</translation>
@@ -1103,7 +1088,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">פעולה זו תמחק נתונים של כל האתרים, כולל:</translation>
  <translation id="983192555821071799">סגור את כל הכרטיסיות</translation>
  <translation id="987264212798334818">כללי</translation>
@@ -1130,7 +1115,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VR を開始する前に、信頼できるサイトかどうかを確認して
  <translation id="982182592107339124">この操作を行うと、次を含むすべてのサイトのデータが削除されます。</translation>
  <translation id="983192555821071799">すべてのタブを閉じる</translation>
  <translation id="987264212798334818">全般</translation>
@@ -1157,7 +1142,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
-@@ -1136,4 +1136,21 @@
+@@ -1142,4 +1142,21 @@ VR ಗೆ ಪ್ರವೇಶಿಸುವ ಮೊದಲು ನೀವು ಈ ವೆ
  <translation id="982182592107339124">ಇದು ಎಲ್ಲಾ ಸೈಟ್‌ಗಳಿಗೆ ಡೇಟಾ ತೆರವುಗೊಳಿಸುತ್ತದೆ, ಇವುಗಳನ್ನೂ ಒಳಗೊಂಡು:</translation>
  <translation id="983192555821071799">ಎಲ್ಲ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಮುಚ್ಚಿ</translation>
  <translation id="987264212798334818">ಸಾಮಾನ್ಯ</translation>
@@ -1184,7 +1169,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VR로 들어가기 전에 이 사이트를 신뢰할 수 있는지 확인하세
  <translation id="982182592107339124">다음을 포함한 모든 사이트의 데이터가 삭제됩니다.</translation>
  <translation id="983192555821071799">탭 모두 닫기</translation>
  <translation id="987264212798334818">일반</translation>
@@ -1211,7 +1196,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
-@@ -1135,4 +1135,21 @@ Svetainė NETURI prieigos prie fotoaparato. Fotoaparato vaizdai matomi tik jums.
+@@ -1141,4 +1141,21 @@ Svetainė NETURI prieigos prie fotoaparato. Fotoaparato vaizdai matomi tik jums.
  <translation id="982182592107339124">Bus išvalyti visų svetainių duomenys, įskaitant:</translation>
  <translation id="983192555821071799">Uždar. visų skirtukų lapus</translation>
  <translation id="987264212798334818">Bendra</translation>
@@ -1238,7 +1223,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
-@@ -1135,4 +1135,21 @@ Vietnei NAV piekļuves kamerai. Kameras attēli ir redzami tikai jums.</translat
+@@ -1141,4 +1141,21 @@ Vietnei NAV piekļuves kamerai. Kameras attēli ir redzami tikai jums.</translat
  <translation id="982182592107339124">Tādējādi tiks dzēsti dati no visām vietnēm, tostarp:</translation>
  <translation id="983192555821071799">Aizvērt visas cilnes</translation>
  <translation id="987264212798334818">Vispārīgi</translation>
@@ -1265,7 +1250,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VR-ൽ പ്രവേശിക്കുന്നതിന് മുമ്പ്
  <translation id="982182592107339124">ഇത് ഇനിപ്പറയുന്നവ ഉൾപ്പെടെയുള്ള എല്ലാ സൈറ്റുകളുടെയും വിവരങ്ങൾ മായ്‌ക്കുന്നതിനിടയാക്കും:</translation>
  <translation id="983192555821071799">എല്ലാ ടാബുകളും അടയ്‌ക്കുക</translation>
  <translation id="987264212798334818">പൊതുവായ</translation>
@@ -1292,7 +1277,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ml.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VR मध्ये एंटर करण्यापूर्वी तुम
  <translation id="982182592107339124">हे यासह सर्व साइटसाठी डेटा साफ करेल:</translation>
  <translation id="983192555821071799">सर्व टॅब बंद करा</translation>
  <translation id="987264212798334818">सामान्य</translation>
@@ -1319,7 +1304,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_mr.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
-@@ -1135,4 +1135,21 @@ Tapak TIDAK memperoleh akses kepada kamera. Hanya anda dapat melihat imej kamera
+@@ -1141,4 +1141,21 @@ Tapak TIDAK memperoleh akses kepada kamera. Hanya anda dapat melihat imej kamera
  <translation id="982182592107339124">Ini akan memadamkan data untuk semua tapak web, termasuk:</translation>
  <translation id="983192555821071799">Tutup semua tab</translation>
  <translation id="987264212798334818">Umum</translation>
@@ -1346,7 +1331,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
-@@ -1135,4 +1135,21 @@ De site krijgt GEEN toegang tot de camera. De camerabeelden zijn alleen zichtbaa
+@@ -1141,4 +1141,21 @@ De site krijgt GEEN toegang tot de camera. De camerabeelden zijn alleen zichtbaa
  <translation id="982182592107339124">Hiermee worden de gegevens voor alle sites gewist, inclusief:</translation>
  <translation id="983192555821071799">Alle tabbladen sluiten</translation>
  <translation id="987264212798334818">Algemeen</translation>
@@ -1373,7 +1358,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
-@@ -1135,4 +1135,21 @@ Nettstedet får IKKE tilgang til kameraet. Kamerabildene er kun synlige for deg.
+@@ -1141,4 +1141,21 @@ Nettstedet får IKKE tilgang til kameraet. Kamerabildene er kun synlige for deg.
  <translation id="982182592107339124">Dette fører til at dataene for alle nettsteder slettes, deriblant disse:</translation>
  <translation id="983192555821071799">Lukk alle faner</translation>
  <translation id="987264212798334818">Generelt</translation>
@@ -1400,7 +1385,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
-@@ -1135,4 +1135,21 @@ Witryna NIE uzyskuje dostępu do kamery. Tylko Ty widzisz rejestrowany obraz.</t
+@@ -1141,4 +1141,21 @@ Witryna NIE uzyskuje dostępu do kamery. Tylko Ty widzisz rejestrowany obraz.</t
  <translation id="982182592107339124">Spowoduje to usunięcie danych wszystkich witryn, w tym:</translation>
  <translation id="983192555821071799">Zamknij wszystkie karty</translation>
  <translation id="987264212798334818">Ogólne</translation>
@@ -1427,7 +1412,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
-@@ -1136,4 +1136,21 @@ O site NÃO terá acesso à câmera. As imagens da câmera são visíveis apenas
+@@ -1142,4 +1142,21 @@ O site NÃO terá acesso à câmera. As imagens da câmera são visíveis apenas
  <translation id="982182592107339124">Essa ação limpará os dados de todos os sites, incluindo:</translation>
  <translation id="983192555821071799">Fechar todas as guias</translation>
  <translation id="987264212798334818">Geral</translation>
@@ -1454,7 +1439,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
-@@ -1135,4 +1135,21 @@ O site NÃO fica com acesso à câmara. As imagens da câmara estão visíveis a
+@@ -1141,4 +1141,21 @@ O site NÃO fica com acesso à câmara. As imagens da câmara estão visíveis a
  <translation id="982182592107339124">Esta ação limpa os dados de todos os sites, incluindo:</translation>
  <translation id="983192555821071799">Fechar todos os separadores</translation>
  <translation id="987264212798334818">Geral</translation>
@@ -1481,7 +1466,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
-@@ -1135,4 +1135,21 @@ Acest site NU primește acces la cameră. Imaginile camerei sunt vizibile doar p
+@@ -1141,4 +1141,21 @@ Acest site NU primește acces la cameră. Imaginile camerei sunt vizibile doar p
  <translation id="982182592107339124">Astfel, se vor șterge datele pentru toate site-urile, inclusiv:</translation>
  <translation id="983192555821071799">Închide toate filele</translation>
  <translation id="987264212798334818">General</translation>
@@ -1508,7 +1493,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">Будут удалены данные всех сайтов, в том числе:</translation>
  <translation id="983192555821071799">Закрыть все вкладки</translation>
  <translation id="987264212798334818">Общие</translation>
@@ -1535,7 +1520,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
-@@ -1135,4 +1135,21 @@ Web NEZÍSKA prístup k fotoaparátu. Obrázky fotoaparátu sú viditeľné iba
+@@ -1141,4 +1141,21 @@ Web NEZÍSKA prístup k fotoaparátu. Obrázky fotoaparátu sú viditeľné iba
  <translation id="982182592107339124">Vymažete dáta všetkých webov vrátane týchto:</translation>
  <translation id="983192555821071799">Zavrieť všetky karty</translation>
  <translation id="987264212798334818">Všeobecné</translation>
@@ -1562,7 +1547,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
-@@ -1135,4 +1135,21 @@ Spletno mesto NIMA dostopa do kamere. Posnetki kamere so vidni samo vam.</transl
+@@ -1141,4 +1141,21 @@ Spletno mesto NIMA dostopa do kamere. Posnetki kamere so vidni samo vam.</transl
  <translation id="982182592107339124">S tem bodo izbrisani podatki za vsa spletna mesta, vključno s temi:</translation>
  <translation id="983192555821071799">Zapri vse zavihke</translation>
  <translation id="987264212798334818">Splošno</translation>
@@ -1589,7 +1574,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
-@@ -1135,4 +1135,21 @@ Google налог можда има друге облике историје п
+@@ -1141,4 +1141,21 @@ Google налог можда има друге облике историје п
  <translation id="982182592107339124">Овим бришете податке за све сајтове, укључујући:</translation>
  <translation id="983192555821071799">Затвори све картице</translation>
  <translation id="987264212798334818">Опште</translation>
@@ -1616,7 +1601,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
-@@ -1135,4 +1135,21 @@ Webbplatsen får INTE tillgång till kameran. Bara du kan se kamerabilderna.</tr
+@@ -1141,4 +1141,21 @@ Webbplatsen får INTE tillgång till kameran. Bara du kan se kamerabilderna.</tr
  <translation id="982182592107339124">Åtgärden raderar data för alla webbplatser, inklusive:</translation>
  <translation id="983192555821071799">Stäng alla flikar</translation>
  <translation id="987264212798334818">Allmänt</translation>
@@ -1643,7 +1628,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
-@@ -1134,4 +1134,21 @@ Tovuti hii HAIPATI idhini ya kufikia kamera. Ni wewe pekee utaona picha hizi za
+@@ -1139,4 +1139,21 @@ Tovuti hii HAIPATI idhini ya kufikia kamera. Ni wewe pekee utaona picha hizi za
  <translation id="982182592107339124">Hatua hii itafuta data ya tovuti zote, ikiwa ni pamoja na:</translation>
  <translation id="983192555821071799">Funga vichupo vyote</translation>
  <translation id="987264212798334818">Jumla</translation>
@@ -1670,7 +1655,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VRரைத் தொடங்குவதற்கு முன் இது 
  <translation id="982182592107339124">இதனால் எல்லா தளங்களுக்கான தரவும் அழிக்கப்படும், இதில் அடங்குபவை:</translation>
  <translation id="983192555821071799">எல்லா தாவல்களையும் மூடு</translation>
  <translation id="987264212798334818">பொது</translation>
@@ -1697,7 +1682,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@ VRలోకి ప్రవేశించడానికి ముందు, 
  <translation id="982182592107339124">ఇది వీటితో సహా అన్ని సైట్‌ల డేటాను తీసివేస్తుంది:</translation>
  <translation id="983192555821071799">అన్ని ట్యాబ్‌లను మూసివేయి</translation>
  <translation id="987264212798334818">సాధారణం</translation>
@@ -1724,7 +1709,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_te.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">การดำเนินการนี้จะล้างข้อมูลสำหรับทุกเว็บไซต์ รวมถึง</translation>
  <translation id="983192555821071799">ปิดแท็บทั้งหมด</translation>
  <translation id="987264212798334818">ทั่วไป</translation>
@@ -1751,7 +1736,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
-@@ -1135,4 +1135,21 @@ Site kameraya ERİŞMEZ. Kamera görüntülerini yalnızca siz görebilirsiniz.<
+@@ -1141,4 +1141,21 @@ Site kameraya ERİŞMEZ. Kamera görüntülerini yalnızca siz görebilirsiniz.<
  <translation id="982182592107339124">Bu işlem, aşağıdakiler de dahil olmak üzere tüm sitelere ilişkin verileri temizleyecek:</translation>
  <translation id="983192555821071799">Tüm sekmeleri kapat</translation>
  <translation id="987264212798334818">Genel</translation>
@@ -1778,7 +1763,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">Буде видалено дані всіх сайтів, зокрема:</translation>
  <translation id="983192555821071799">Закрити всі вкладки</translation>
  <translation id="987264212798334818">Загальне</translation>
@@ -1805,7 +1790,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
-@@ -1135,4 +1135,21 @@ Trang web này KHÔNG có quyền truy cập vào máy ảnh. Chỉ bạn mới
+@@ -1141,4 +1141,21 @@ Trang web này KHÔNG có quyền truy cập vào máy ảnh. Chỉ bạn mới
  <translation id="982182592107339124">Thao tác này sẽ xóa dữ liệu của tất cả các trang web, bao gồm:</translation>
  <translation id="983192555821071799">Đóng tất cả các tab</translation>
  <translation id="987264212798334818">Chung</translation>
@@ -1832,7 +1817,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">这会清除所有网站的数据,包括:</translation>
  <translation id="983192555821071799">关闭所有标签页</translation>
  <translation id="987264212798334818">常规</translation>
@@ -1859,7 +1844,7 @@ diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-
 diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
 +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
-@@ -1135,4 +1135,21 @@
+@@ -1141,4 +1141,21 @@
  <translation id="982182592107339124">這會清除所有網站的資料,包括:</translation>
  <translation id="983192555821071799">關閉所有分頁</translation>
  <translation id="987264212798334818">一般</translation>

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

@@ -30,7 +30,7 @@ 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
-@@ -30,16 +30,12 @@ public class FirstRunUtils {
+@@ -28,16 +28,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();

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

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

@@ -13,7 +13,7 @@ Subject: Use 4 tile rows, never show logo
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
-@@ -117,7 +117,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -110,7 +110,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
      /** Observer for overview mode. */
      private EmptyOverviewModeObserver mOverviewObserver;
  
@@ -22,7 +22,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
      private boolean mSearchProviderIsGoogle;
  
      private boolean mInitialized;
-@@ -546,7 +546,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -538,7 +538,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
                  && mInitialized) {
              return;
          }
@@ -31,7 +31,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
          mSearchProviderIsGoogle = isGoogle;
  
          updateTileGridPadding();
-@@ -838,7 +838,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
+@@ -822,7 +822,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
      }
  
      private static int getMaxTileRows() {
@@ -79,7 +79,7 @@ diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/
 diff --git a/components/history/core/browser/top_sites_impl.h b/components/history/core/browser/top_sites_impl.h
 --- a/components/history/core/browser/top_sites_impl.h
 +++ b/components/history/core/browser/top_sites_impl.h
-@@ -54,7 +54,7 @@ class TopSitesImpl : public TopSites, public HistoryServiceObserver {
+@@ -48,7 +48,7 @@ class TopSitesImpl : public TopSites, public HistoryServiceObserver {
    using CanAddURLToHistoryFn = base::Callback<bool(const GURL&)>;
  
    // How many top sites to store in the cache.

+ 1 - 1
build/patches/User-Agent-anonymize.patch

@@ -12,7 +12,7 @@ disclosing the specific build of Bromite.
 diff --git a/components/version_info/version_info.cc b/components/version_info/version_info.cc
 --- a/components/version_info/version_info.cc
 +++ b/components/version_info/version_info.cc
-@@ -15,7 +15,8 @@
+@@ -16,7 +16,8 @@
  namespace version_info {
  
  std::string GetProductNameAndVersionForUserAgent() {

+ 11 - 11
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
-@@ -58,7 +58,6 @@ constexpr std::pair<int, int> kAutofillExperimentRanges[] = {
+@@ -63,7 +63,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;
  
-@@ -446,35 +445,6 @@ bool GetUploadPayloadForApi(const AutofillUploadContents& upload,
+@@ -519,35 +518,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,
-@@ -680,6 +650,7 @@ size_t AutofillDownloadManager::GetPayloadLength(
+@@ -771,6 +741,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;
  
-@@ -702,35 +673,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
+@@ -793,35 +764,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
    GURL url = autofill_server_url_
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .ReplaceComponents(replacements);
@@ -108,7 +108,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
 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
-@@ -181,19 +181,6 @@ void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder,
+@@ -180,19 +180,6 @@ void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder,
    }
  }
  
@@ -128,14 +128,14 @@ 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;
-@@ -1360,11 +1347,6 @@ AutofillManager::AutofillManager(
-       is_rich_query_enabled_(IsRichQueryEnabled(client->GetChannel())) {
-   DCHECK(driver);
-   DCHECK(client_);
+@@ -1478,11 +1465,6 @@ AutofillManager::AutofillManager(
+                                     : std::make_unique<CreditCardAccessManager>(
+                                           driver, client_, personal_data_,
+                                           credit_card_form_event_logger_.get());
 -  if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) {
 -    version_info::Channel channel = client_->GetChannel();
--    download_manager_.reset(
--        new AutofillDownloadManager(driver, this, GetAPIKeyForUrl(channel)));
+-    download_manager_.reset(new AutofillDownloadManager(
+-        driver, this, GetAPIKeyForUrl(channel), client_->GetLogManager()));
 -  }
    CountryNames::SetLocaleString(app_locale_);
  }

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

@@ -20,9 +20,9 @@ diff --git a/DEPS b/DEPS
  
    # By default, do not check out src-internal. This can be overridden e.g. with
    # custom_vars.
-@@ -97,8 +97,8 @@ vars = {
-   # By default do not checkout the OpenXR loader library.
-   'checkout_openxr' : False,
+@@ -99,8 +99,8 @@ vars = {
+   # support for other platforms may be added in the future.
+   'checkout_openxr' : 'checkout_win',
  
 -  'checkout_traffic_annotation_tools': 'checkout_configuration != "small"',
 -  'checkout_instrumented_libraries': 'checkout_linux and checkout_configuration != "small"',
@@ -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
-@@ -2323,49 +2323,6 @@ hooks = [
+@@ -3055,49 +3055,6 @@ hooks = [
      ],
    },
    {
@@ -81,8 +81,8 @@ diff --git a/DEPS b/DEPS
      # Case-insensitivity for the Win SDK. Must run before win_toolchain below.
      'name': 'ciopfs_linux',
      'pattern': '.',
-@@ -2392,43 +2349,6 @@ hooks = [
-     'condition': 'checkout_ios or checkout_mac',
+@@ -3124,43 +3081,6 @@ hooks = [
+     'condition': 'checkout_mac',
      'action': ['python', 'src/build/mac_toolchain.py'],
    },
 -  # Pull binutils for linux, enabled debug fission for faster linking /
@@ -125,7 +125,7 @@ diff --git a/DEPS b/DEPS
    {
      # 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
-@@ -2488,18 +2408,6 @@ hooks = [
+@@ -3220,18 +3140,6 @@ hooks = [
                  '-s', 'src/buildtools/mac/clang-format.sha1',
      ],
    },
@@ -144,7 +144,7 @@ diff --git a/DEPS b/DEPS
    # Pull rc binaries using checked-in hashes.
    {
      'name': 'rc_win',
-@@ -2525,29 +2433,6 @@ hooks = [
+@@ -3257,29 +3165,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
      ],
    },

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

@@ -9,7 +9,7 @@ Subject: disable AdsBlockedInfoBar
 diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
 --- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
 +++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
-@@ -147,11 +147,6 @@ void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) {
+@@ -148,11 +148,6 @@ void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) {
  }
  
  void ChromeSubresourceFilterClient::ShowUI(const GURL& url) {

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

@@ -9,7 +9,7 @@ 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
-@@ -308,7 +308,7 @@ void ContentSettingsRegistry::Init() {
+@@ -309,7 +309,7 @@ void ContentSettingsRegistry::Init() {
             ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
  
    Register(CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, "background-sync",

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

@@ -9,7 +9,7 @@ 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
-@@ -408,7 +408,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.

+ 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
-@@ -120,12 +120,12 @@ const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
+@@ -121,12 +121,12 @@ const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
  
  // Time between IPv6 probes, i.e. for how long results of each IPv6 probe are
  // cached.

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

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

+ 19 - 14
build/patches/getClientRects-getBoundingClientRect-measureText-add-fingerprinting-mitigation.patch

@@ -19,13 +19,13 @@ See also: http://www.gsd.inesc-id.pt/~mpc/pubs/fingerprinting-trustcom2016.pdf
  third_party/blink/renderer/core/dom/range.cc           | 18 +++++++++++++++++-
  .../blink/renderer/core/html/canvas/text_metrics.cc    | 18 ++++++++++++++++++
  .../blink/renderer/core/html/canvas/text_metrics.h     |  2 ++
- .../canvas/canvas2d/canvas_rendering_context_2d.cc     |  6 ++++++
- 7 files changed, 76 insertions(+), 1 deletion(-)
+ .../canvas/canvas2d/canvas_rendering_context_2d.cc     |  9 ++++++++-
+ 7 files changed, 78 insertions(+), 2 deletions(-)
 
 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
-@@ -1102,6 +1102,10 @@ Document::Document(const DocumentInit& initializer,
+@@ -1167,6 +1167,10 @@ Document::Document(const DocumentInit& initializer,
    // also depend on the url NOT getting immediately set in opened windows.
    // See fast/dom/early-frame-url.html
    // and fast/dom/location-new-window-no-crash.html, respectively.
@@ -36,7 +36,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
    // FIXME: Can/should we unify this behavior?
    if (initializer.ShouldSetURL()) {
      SetURL(initializer.Url());
-@@ -1162,6 +1166,14 @@ Range* Document::CreateRangeAdjustedToTreeScope(const TreeScope& tree_scope,
+@@ -1227,6 +1231,14 @@ Range* Document::CreateRangeAdjustedToTreeScope(const TreeScope& tree_scope,
                                       Position::BeforeNode(*shadow_host));
  }
  
@@ -54,7 +54,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
-@@ -398,6 +398,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -408,6 +408,9 @@ class CORE_EXPORT Document : public ContainerNode,
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -64,7 +64,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;
-@@ -1871,6 +1874,8 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1890,6 +1893,8 @@ class CORE_EXPORT Document : public ContainerNode,
    Vector<AXContext*> ax_contexts_;
    Member<AXObjectCache> ax_object_cache_;
    Member<DocumentMarkerController> markers_;
@@ -76,7 +76,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
-@@ -1370,6 +1370,15 @@ DOMRectList* Element::getClientRects() {
+@@ -1630,6 +1630,15 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -92,7 +92,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
    return DOMRectList::Create(quads);
  }
  
-@@ -1387,6 +1396,13 @@ DOMRect* Element::getBoundingClientRect() {
+@@ -1647,6 +1656,13 @@ DOMRect* Element::getBoundingClientRect() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
@@ -187,20 +187,25 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering
  
 +#include "base/rand_util.h"
  #include "base/metrics/histogram_functions.h"
+ #include "base/rand_util.h"
  #include "third_party/blink/public/common/features.h"
- #include "third_party/blink/public/platform/platform.h"
-@@ -814,6 +815,11 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
-   base::TimeDelta elapsed = base::TimeTicks::Now() - start_time;
-   base::UmaHistogramMicrosecondsTimesUnderTenMilliseconds(
-       "Canvas.TextMetrics.MeasureText", elapsed);
+@@ -811,9 +812,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+   else
+     direction = ToTextDirection(GetState().GetDirection(), canvas());
+ 
+-  return MakeGarbageCollected<TextMetrics>(font, direction,
++  auto *text_metrics = MakeGarbageCollected<TextMetrics>(font, direction,
+                                            GetState().GetTextBaseline(),
+                                            GetState().GetTextAlign(), text);
 +
 +  // scale text metrics by 3/1000000th
 +  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
 +  text_metrics->Shuffle(shuffleFactor);
 +
-   return text_metrics;
++  return text_metrics;
  }
  
+ void CanvasRenderingContext2D::DrawTextInternal(
 -- 
 2.11.0
 

+ 1 - 1
build/patches/google-cloud-messaging-disable-experiment-status-check.patch

@@ -30,7 +30,7 @@ diff --git a/components/gcm_driver/gcm_channel_status_request.cc b/components/gc
      return;
  
 @@ -110,6 +113,9 @@ void GCMChannelStatusRequest::Start() {
-   resource_request->allow_credentials = false;
+   resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
    resource_request->method = "POST";
    resource_request->headers.SetHeader(net::HttpRequestHeaders::kUserAgent,
 +#endif

+ 149 - 82
build/patches/kill-GCM.patch

@@ -5,35 +5,36 @@ Subject: kill GCM
 ---
  chrome/android/BUILD.gn                            |   1 -
  chrome/android/chrome_java_sources.gni             |   6 -
- chrome/android/java/AndroidManifest.xml            |  64 --------
- .../chrome/browser/BackgroundSyncLauncher.java     |  97 ------------
+ chrome/android/java/AndroidManifest.xml            |  64 -------
+ .../chrome/browser/BackgroundSyncLauncher.java     |  97 ----------
  .../chrome/browser/ChromeBackgroundService.java    |   1 -
+ .../ChromeBackgroundTaskFactory.java               |   3 -
  .../invalidation/InvalidationController.java       |   8 -
- .../browser/ntp/snippets/SnippetsLauncher.java     |  44 ------
+ .../browser/ntp/snippets/SnippetsLauncher.java     |  44 -----
  .../browser/services/gcm/GCMBackgroundTask.java    |   2 +-
  .../gcm/InvalidationGcmUpstreamSender.java         |  15 --
  components/background_task_scheduler/BUILD.gn      |   1 -
- .../BackgroundTaskSchedulerGcmNetworkManager.java  | 166 +--------------------
+ .../BackgroundTaskSchedulerGcmNetworkManager.java  | 206 +--------------------
  components/gcm_driver/android/BUILD.gn             |   1 -
  components/gcm_driver/instance_id/android/BUILD.gn |   1 -
- .../gcm_driver/instance_id/InstanceIDBridge.java   |  40 +----
+ .../gcm_driver/instance_id/InstanceIDBridge.java   |  49 +----
  components/sync/android/BUILD.gn                   |   1 -
  third_party/cacheinvalidation/BUILD.gn             |   6 -
- .../client/contrib/MultiplexingGcmListener.java    |  91 +----------
+ .../client/contrib/MultiplexingGcmListener.java    |  91 +--------
  .../android2/channel/AndroidNetworkChannel.java    |   6 +-
- 18 files changed, 9 insertions(+), 542 deletions(-)
+ 19 files changed, 9 insertions(+), 594 deletions(-)
 
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -368,7 +368,6 @@ android_library("chrome_java") {
+@@ -379,7 +379,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",
 -    "//third_party/android_sdk:android_gcm_java",
+     "//third_party/android_sdk/androidx_browser:androidx_browser_java",
      "//third_party/android_swipe_refresh:android_swipe_refresh_java",
      "//third_party/blink/public:blink_headers_java",
-     "//third_party/blink/public/mojom:android_mojo_bindings_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
@@ -45,7 +46,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",
-@@ -1395,11 +1394,6 @@ chrome_java_sources = [
+@@ -1424,11 +1423,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",
@@ -55,8 +56,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/share/ShareActivity.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
@@ -83,7 +84,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 %}
-@@ -1040,49 +1035,8 @@ by a child template that "extends" this file.
+@@ -1068,49 +1063,8 @@ by a child template that "extends" this file.
              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
              android:hardwareAccelerated="false" />
  
@@ -133,7 +134,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
          <receiver android:name="com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver"
              android:exported="false"/>
          <receiver android:name="com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver"
-@@ -1109,24 +1063,6 @@ by a child template that "extends" this file.
+@@ -1137,24 +1091,6 @@ by a child template that "extends" this file.
              android:exported="false"
              android:permission="android.permission.BIND_JOB_SERVICE"/>
  
@@ -304,6 +305,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroun
      }
  
      private void handleSnippetsOnBrowserUpgraded() {
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/background_task_scheduler/ChromeBackgroundTaskFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/background_task_scheduler/ChromeBackgroundTaskFactory.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/background_task_scheduler/ChromeBackgroundTaskFactory.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/background_task_scheduler/ChromeBackgroundTaskFactory.java
+@@ -19,7 +19,6 @@ import org.chromium.chrome.browser.offlinepages.OfflineBackgroundTask;
+ import org.chromium.chrome.browser.offlinepages.prefetch.OfflineNotificationBackgroundTask;
+ import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchBackgroundTask;
+ import org.chromium.chrome.browser.omaha.OmahaService;
+-import org.chromium.chrome.browser.services.gcm.GCMBackgroundTask;
+ import org.chromium.chrome.browser.webapps.WebApkUpdateTask;
+ import org.chromium.components.background_task_scheduler.BackgroundTask;
+ import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
+@@ -48,8 +47,6 @@ public class ChromeBackgroundTaskFactory implements BackgroundTaskFactory {
+         switch (taskId) {
+             case TaskIds.OMAHA_JOB_ID:
+                 return new OmahaService();
+-            case TaskIds.GCM_BACKGROUND_TASK_JOB_ID:
+-                return new GCMBackgroundTask();
+             case TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID:
+                 return new OfflineBackgroundTask();
+             case TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID:
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/InvalidationController.java b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/InvalidationController.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/InvalidationController.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/InvalidationController.java
@@ -470,14 +491,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/In
 diff --git a/components/background_task_scheduler/BUILD.gn b/components/background_task_scheduler/BUILD.gn
 --- a/components/background_task_scheduler/BUILD.gn
 +++ b/components/background_task_scheduler/BUILD.gn
-@@ -30,7 +30,6 @@ if (is_android) {
-   android_library("background_task_scheduler_java") {
-     java_files = [
+@@ -32,7 +32,6 @@ if (is_android) {
        "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java",
+       "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskBroadcastReceiver.java",
+       "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskFactory.java",
 -      "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java",
        "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskJobService.java",
-       "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskReflection.java",
        "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java",
+       "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerAlarmManager.java",
 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
@@ -496,32 +517,44 @@ 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;
-@@ -42,124 +34,6 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
+@@ -42,212 +34,16 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
          sClock = clock;
      }
  
--    static BackgroundTask getBackgroundTaskFromTaskParams(@NonNull TaskParams taskParams) {
--        String backgroundTaskClassName = getBackgroundTaskClassFromTaskParams(taskParams);
--        return BackgroundTaskReflection.getBackgroundTaskFromClassName(backgroundTaskClassName);
--    }
--
--    private static String getBackgroundTaskClassFromTaskParams(@NonNull TaskParams taskParams) {
--        Bundle extras = taskParams.getExtras();
--        if (extras == null) return null;
--        return extras.getString(BACKGROUND_TASK_CLASS_KEY);
--    }
--
--    static Long getDeadlineTimeFromTaskParams(@NonNull TaskParams taskParams) {
+-    /**
+-     * Checks if a task expired, based on the current time of the service.
+-     *
+-     * @param taskParams parameters sent to the service, which contain the scheduling information
+-     * regarding expiration.
+-     * @param currentTimeMs the current time of the service.
+-     * @return true if the task expired and false otherwise.
+-     */
+-    static boolean didTaskExpire(TaskParams taskParams, long currentTimeMs) {
 -        Bundle extras = taskParams.getExtras();
--        if (extras == null || !extras.containsKey(BACKGROUND_TASK_DEADLINE_KEY)) {
--            return null;
+-        if (extras == null || !extras.containsKey(BACKGROUND_TASK_SCHEDULE_TIME_KEY)) {
+-            return false;
 -        }
--        return extras.getLong(BACKGROUND_TASK_DEADLINE_KEY);
--    }
 -
--    private static long getDeadlineTime(TaskInfo taskInfo) {
--        long windowEndTimeMs = taskInfo.getOneOffInfo().getWindowEndTimeMs();
--        return sClock.currentTimeMillis() + windowEndTimeMs;
+-        long scheduleTimeMs = extras.getLong(BACKGROUND_TASK_SCHEDULE_TIME_KEY);
+-        if (extras.containsKey(BACKGROUND_TASK_END_TIME_KEY)) {
+-            long endTimeMs =
+-                    extras.getLong(BackgroundTaskSchedulerDelegate.BACKGROUND_TASK_END_TIME_KEY);
+-            return TaskInfo.OneOffInfo.getExpirationStatus(
+-                    scheduleTimeMs, endTimeMs, currentTimeMs);
+-        } else {
+-            long intervalTimeMs = extras.getLong(BACKGROUND_TASK_INTERVAL_TIME_KEY);
+-
+-            // If flex is never set, it is given a default value of 10% of the period time, as
+-            // per the GcmNetworkManager behaviour. This default value is set in
+-            // https://developers.google.com/android/reference/com/google/android/gms/gcm/PeriodicTask.
+-            double defaultFlexAsFractionOfInterval = 0.1f;
+-
+-            long flexTimeMs = extras.getLong(BACKGROUND_TASK_FLEX_TIME_KEY,
+-                    /*defaultValue=*/(long) (defaultFlexAsFractionOfInterval * intervalTimeMs));
+-
+-            return TaskInfo.PeriodicInfo.getExpirationStatus(
+-                    scheduleTimeMs, intervalTimeMs, flexTimeMs, currentTimeMs);
+-        }
 -    }
 -
 -    /**
@@ -553,22 +586,13 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -    @VisibleForTesting
 -    static Task createTaskFromTaskInfo(@NonNull TaskInfo taskInfo) {
 -        Bundle taskExtras = new Bundle();
--        taskExtras.putString(
--                BACKGROUND_TASK_CLASS_KEY, taskInfo.getBackgroundTaskClass().getName());
--        if (!taskInfo.isPeriodic() && taskInfo.getOneOffInfo().expiresAfterWindowEndTime()) {
--            taskExtras.putLong(BACKGROUND_TASK_DEADLINE_KEY, getDeadlineTime(taskInfo));
--        }
 -        taskExtras.putBundle(BACKGROUND_TASK_EXTRAS_KEY, taskInfo.getExtras());
 -
--        Task.Builder builder;
--        if (taskInfo.isPeriodic()) {
--            builder = getPeriodicTaskBuilder(taskInfo.getPeriodicInfo());
--        } else {
--            builder = getOneOffTaskBuilder(taskInfo.getOneOffInfo());
--        }
+-        TaskBuilderVisitor taskBuilderVisitor = new TaskBuilderVisitor(taskExtras);
+-        taskInfo.getTimingInfo().accept(taskBuilderVisitor);
+-        Task.Builder builder = taskBuilderVisitor.getBuilder();
 -
--        builder.setExtras(taskExtras)
--                .setPersisted(taskInfo.isPersisted())
+-        builder.setPersisted(taskInfo.isPersisted())
 -                .setRequiredNetwork(getGcmNetworkManagerNetworkTypeFromTypeFromTaskNetworkType(
 -                        taskInfo.getRequiredNetworkType()))
 -                .setRequiresCharging(taskInfo.requiresCharging())
@@ -579,27 +603,65 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -        return builder.build();
 -    }
 -
--    private static Task.Builder getPeriodicTaskBuilder(TaskInfo.PeriodicInfo periodicInfo) {
--        PeriodicTask.Builder builder = new PeriodicTask.Builder();
--        builder.setPeriod(TimeUnit.MILLISECONDS.toSeconds(periodicInfo.getIntervalMs()));
--        if (periodicInfo.hasFlex()) {
--            builder.setFlex(TimeUnit.MILLISECONDS.toSeconds(periodicInfo.getFlexMs()));
+-    private static class TaskBuilderVisitor implements TaskInfo.TimingInfoVisitor {
+-        private Task.Builder mBuilder;
+-        private final Bundle mTaskExtras;
+-
+-        TaskBuilderVisitor(Bundle taskExtras) {
+-            mTaskExtras = taskExtras;
+-        }
+-
+-        // Only valid after a TimingInfo object was visited.
+-        Task.Builder getBuilder() {
+-            return mBuilder;
+-        }
+-
+-        @Override
+-        public void visit(TaskInfo.OneOffInfo oneOffInfo) {
+-            if (oneOffInfo.expiresAfterWindowEndTime()) {
+-                mTaskExtras.putLong(BACKGROUND_TASK_SCHEDULE_TIME_KEY, sClock.currentTimeMillis());
+-                mTaskExtras.putLong(BACKGROUND_TASK_END_TIME_KEY, oneOffInfo.getWindowEndTimeMs());
+-            }
+-
+-            OneoffTask.Builder builder = new OneoffTask.Builder();
+-            long windowStartSeconds = oneOffInfo.hasWindowStartTimeConstraint()
+-                    ? TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowStartTimeMs())
+-                    : 0;
+-            long windowEndTimeMs = oneOffInfo.getWindowEndTimeMs();
+-            if (oneOffInfo.expiresAfterWindowEndTime()) {
+-                windowEndTimeMs += DEADLINE_DELTA_MS;
+-            }
+-            builder.setExecutionWindow(
+-                    windowStartSeconds, TimeUnit.MILLISECONDS.toSeconds(windowEndTimeMs));
+-            builder.setExtras(mTaskExtras);
+-            mBuilder = builder;
+-        }
+-
+-        @Override
+-        public void visit(TaskInfo.PeriodicInfo periodicInfo) {
+-            if (periodicInfo.expiresAfterWindowEndTime()) {
+-                mTaskExtras.putLong(BACKGROUND_TASK_SCHEDULE_TIME_KEY, sClock.currentTimeMillis());
+-                mTaskExtras.putLong(
+-                        BACKGROUND_TASK_INTERVAL_TIME_KEY, periodicInfo.getIntervalMs());
+-                if (periodicInfo.hasFlex()) {
+-                    mTaskExtras.putLong(BACKGROUND_TASK_FLEX_TIME_KEY, periodicInfo.getFlexMs());
+-                }
+-            }
+-
+-            PeriodicTask.Builder builder = new PeriodicTask.Builder();
+-            builder.setPeriod(TimeUnit.MILLISECONDS.toSeconds(periodicInfo.getIntervalMs()));
+-            if (periodicInfo.hasFlex()) {
+-                builder.setFlex(TimeUnit.MILLISECONDS.toSeconds(periodicInfo.getFlexMs()));
+-            }
+-            builder.setExtras(mTaskExtras);
+-            mBuilder = builder;
 -        }
--        return builder;
--    }
 -
--    private static Task.Builder getOneOffTaskBuilder(TaskInfo.OneOffInfo oneOffInfo) {
--        OneoffTask.Builder builder = new OneoffTask.Builder();
--        long windowStartSeconds = oneOffInfo.hasWindowStartTimeConstraint()
--                ? TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowStartTimeMs())
--                : 0;
--        long windowEndTimeMs = oneOffInfo.getWindowEndTimeMs();
--        if (oneOffInfo.expiresAfterWindowEndTime()) {
--            windowEndTimeMs += DEADLINE_DELTA_MS;
+-        @Override
+-        public void visit(TaskInfo.ExactInfo exactInfo) {
+-            throw new RuntimeException("Exact tasks should not be scheduled with "
+-                    + "GcmNetworkManager.");
 -        }
--        builder.setExecutionWindow(
--                windowStartSeconds, TimeUnit.MILLISECONDS.toSeconds(windowEndTimeMs));
--        return builder;
 -    }
 -
 -    private static int getGcmNetworkManagerNetworkTypeFromTypeFromTaskNetworkType(
@@ -621,11 +683,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
      @Override
      public boolean schedule(Context context, @NonNull TaskInfo taskInfo) {
          ThreadUtils.assertOnUiThread();
-@@ -170,50 +44,12 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
-                             + " has no parameterless public constructor.");
-             return false;
-         }
--
+ 
 -        GcmNetworkManager gcmNetworkManager = getGcmNetworkManager(context);
 -        if (gcmNetworkManager == null) {
 -            Log.e(TAG, "GcmNetworkManager is not available.");
@@ -687,7 +745,7 @@ diff --git a/components/gcm_driver/android/BUILD.gn b/components/gcm_driver/andr
 diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm_driver/instance_id/android/BUILD.gn
 --- a/components/gcm_driver/instance_id/android/BUILD.gn
 +++ b/components/gcm_driver/instance_id/android/BUILD.gn
-@@ -25,7 +25,6 @@ android_library("instance_id_driver_java") {
+@@ -28,7 +28,6 @@ android_library("instance_id_driver_java") {
  
    java_files = [
      "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java",
@@ -698,7 +756,7 @@ 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/InstanceIDBridge.java b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
 --- a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
 +++ b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
-@@ -26,7 +26,6 @@ public class InstanceIDBridge {
+@@ -28,7 +28,6 @@ public class InstanceIDBridge {
       * Underlying InstanceIDWithSubtype. May be shared by multiple InstanceIDBridges. Must be
       * initialized on a background thread.
       */
@@ -706,7 +764,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
  
      private static boolean sBlockOnAsyncTasksForTesting;
  
-@@ -71,7 +70,7 @@ public class InstanceIDBridge {
+@@ -73,7 +72,7 @@ public class InstanceIDBridge {
          new BridgeAsyncTask<String>() {
              @Override
              protected String doBackgroundWork() {
@@ -715,7 +773,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
              }
              @Override
              protected void sendResultToNative(String id) {
-@@ -86,7 +85,7 @@ public class InstanceIDBridge {
+@@ -88,7 +87,7 @@ public class InstanceIDBridge {
          new BridgeAsyncTask<Long>() {
              @Override
              protected Long doBackgroundWork() {
@@ -724,15 +782,21 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
              }
              @Override
              protected void sendResultToNative(Long creationTime) {
-@@ -111,15 +110,7 @@ public class InstanceIDBridge {
+@@ -113,21 +112,7 @@ public class InstanceIDBridge {
          new BridgeAsyncTask<String>() {
              @Override
              protected String doBackgroundWork() {
 -                try {
+-                    // TODO(knollr): Migrate stored LazySubscriptionsManager data to
+-                    // SubscriptionFlagManager.
 -                    LazySubscriptionsManager.storeLazinessInformation(
 -                            LazySubscriptionsManager.buildSubscriptionUniqueId(
 -                                    mSubtype, authorizedEntity),
--                            isLazy);
+-                            (flags & InstanceIDFlags.IS_LAZY) == InstanceIDFlags.IS_LAZY);
+-                    SubscriptionFlagManager.setFlags(
+-                            SubscriptionFlagManager.buildSubscriptionUniqueId(
+-                                    mSubtype, authorizedEntity),
+-                            flags);
 -                    return mInstanceID.getToken(authorizedEntity, scope, extras);
 -                } catch (IOException ex) {
 -                    return "";
@@ -741,7 +805,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
              }
              @Override
              protected void sendResultToNative(String token) {
-@@ -135,18 +126,7 @@ public class InstanceIDBridge {
+@@ -143,21 +128,7 @@ public class InstanceIDBridge {
          new BridgeAsyncTask<Boolean>() {
              @Override
              protected Boolean doBackgroundWork() {
@@ -753,6 +817,9 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
 -                        LazySubscriptionsManager.deletePersistedMessagesForSubscriptionId(
 -                                subscriptionId);
 -                    }
+-                    SubscriptionFlagManager.clearFlags(
+-                            SubscriptionFlagManager.buildSubscriptionUniqueId(
+-                                    mSubtype, authorizedEntity));
 -                    return true;
 -                } catch (IOException ex) {
 -                    return false;
@@ -761,7 +828,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
              }
              @Override
              protected void sendResultToNative(Boolean success) {
-@@ -161,12 +141,7 @@ public class InstanceIDBridge {
+@@ -172,12 +143,7 @@ public class InstanceIDBridge {
          new BridgeAsyncTask<Boolean>() {
              @Override
              protected Boolean doBackgroundWork() {
@@ -775,7 +842,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
              }
              @Override
              protected void sendResultToNative(Boolean success) {
-@@ -205,11 +180,6 @@ public class InstanceIDBridge {
+@@ -216,11 +182,6 @@ public class InstanceIDBridge {
                  @Override
                  @SuppressWarnings("NoSynchronizedThisCheck") // Only used/accessible by native.
                  protected Result doInBackground() {

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

@@ -23,7 +23,7 @@ diff --git a/chrome/android/java/res/layout/fre_tosanduma.xml b/chrome/android/j
 diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
 --- a/chrome/android/java/res/values/dimens.xml
 +++ b/chrome/android/java/res/values/dimens.xml
-@@ -179,7 +179,6 @@
+@@ -197,7 +197,6 @@
      <dimen name="fre_button_padding">12dp</dimen>
      <dimen name="fre_margin">24dp</dimen>
      <dimen name="fre_image_height">120dp</dimen>

+ 35 - 22
build/patches/kill-Vision.patch

@@ -4,24 +4,24 @@ Subject: kill Vision
 
 Barcode, face and text detection APIs
 ---
- services/shape_detection/BUILD.gn                         |  4 ----
- .../src/org/chromium/shape_detection/BitmapUtils.java     | 12 ------------
- .../shape_detection/FaceDetectionProviderImpl.java        | 15 ++-------------
- .../org/chromium/shape_detection/InterfaceRegistrar.java  |  5 -----
- 4 files changed, 2 insertions(+), 34 deletions(-)
+ services/shape_detection/BUILD.gn                           |  6 ------
+ .../java/src/org/chromium/shape_detection/BitmapUtils.java  | 12 ------------
+ .../chromium/shape_detection/FaceDetectionProviderImpl.java | 13 +------------
+ .../org/chromium/shape_detection/InterfaceRegistrar.java    | 13 -------------
+ 4 files changed, 1 insertion(+), 43 deletions(-)
 
 diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn
 --- a/services/shape_detection/BUILD.gn
 +++ b/services/shape_detection/BUILD.gn
-@@ -85,14 +85,10 @@ if (is_android) {
+@@ -84,14 +84,8 @@ if (is_android) {
  
    android_library("shape_detection_java") {
      java_files = [
 -      "android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java",
 -      "android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java",
-       "android/java/src/org/chromium/shape_detection/FaceDetectionImpl.java",
+-      "android/java/src/org/chromium/shape_detection/FaceDetectionImpl.java",
 -      "android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java",
-       "android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java",
+-      "android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java",
        "android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java",
        "android/java/src/org/chromium/shape_detection/BitmapUtils.java",
 -      "android/java/src/org/chromium/shape_detection/TextDetectionImpl.java",
@@ -68,7 +68,7 @@ diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detect
  import org.chromium.base.ContextUtils;
  import org.chromium.mojo.bindings.InterfaceRequest;
  import org.chromium.mojo.system.MojoException;
-@@ -24,16 +21,8 @@ public class FaceDetectionProviderImpl implements FaceDetectionProvider {
+@@ -23,16 +20,8 @@ public class FaceDetectionProviderImpl implements FaceDetectionProvider {
      @Override
      public void createFaceDetection(
              InterfaceRequest<FaceDetection> request, FaceDetectorOptions options) {
@@ -76,13 +76,12 @@ diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detect
 -                GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(
 -                        ContextUtils.getApplicationContext())
 -                == ConnectionResult.SUCCESS;
--
+ 
 -        if (isGmsCoreSupported) {
 -            FaceDetection.MANAGER.bind(new FaceDetectionImplGmsCore(options), request);
 -        } else {
 -            FaceDetection.MANAGER.bind(new FaceDetectionImpl(options), request);
 -        }
-+
 +        FaceDetection.MANAGER.bind(new FaceDetectionImpl(options), request);
      }
  
@@ -90,24 +89,38 @@ diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detect
 diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java
 --- a/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java
 +++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java
-@@ -8,9 +8,7 @@ import org.chromium.base.annotations.CalledByNative;
+@@ -8,9 +8,6 @@ import org.chromium.base.annotations.CalledByNative;
  import org.chromium.base.annotations.JNINamespace;
+ import org.chromium.mojo.system.MessagePipeHandle;
  import org.chromium.mojo.system.impl.CoreImpl;
- import org.chromium.services.service_manager.InterfaceRegistry;
 -import org.chromium.shape_detection.mojom.BarcodeDetectionProvider;
- import org.chromium.shape_detection.mojom.FaceDetectionProvider;
+-import org.chromium.shape_detection.mojom.FaceDetectionProvider;
 -import org.chromium.shape_detection.mojom.TextDetection;
  
  @JNINamespace("shape_detection")
  class InterfaceRegistrar {
-@@ -21,9 +19,6 @@ class InterfaceRegistrar {
-         InterfaceRegistry registry = InterfaceRegistry.create(
-                 CoreImpl.getInstance().acquireNativeHandle(nativeHandle).toMessagePipeHandle());
-         registry.addInterface(
--                BarcodeDetectionProvider.MANAGER, new BarcodeDetectionProviderImpl.Factory());
--        registry.addInterface(
-                 FaceDetectionProvider.MANAGER, new FaceDetectionProviderImpl.Factory());
--        registry.addInterface(TextDetection.MANAGER, new TextDetectionImpl.Factory());
+@@ -20,23 +17,13 @@ class InterfaceRegistrar {
+ 
+     @CalledByNative
+     static void bindBarcodeDetectionProvider(int nativeHandle) {
+-        BarcodeDetectionProvider impl = BarcodeDetectionProviderImpl.create();
+-        if (impl != null) {
+-            BarcodeDetectionProvider.MANAGER.bind(impl, messagePipeHandleFromNative(nativeHandle));
+-        }
+     }
+ 
+     @CalledByNative
+     static void bindFaceDetectionProvider(int nativeHandle) {
+-        FaceDetectionProvider.MANAGER.bind(
+-                new FaceDetectionProviderImpl(), messagePipeHandleFromNative(nativeHandle));
+     }
+ 
+     @CalledByNative
+     static void bindTextDetection(int nativeHandle) {
+-        TextDetection impl = TextDetectionImpl.create();
+-        if (impl != null) {
+-            TextDetection.MANAGER.bind(impl, messagePipeHandleFromNative(nativeHandle));
+-        }
      }
  }
 -- 

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

@@ -10,7 +10,7 @@ Out with all those tracking cookies!
 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
-@@ -134,7 +134,7 @@ void ContentSettingsRegistry::Init() {
+@@ -135,7 +135,7 @@ void ContentSettingsRegistry::Init() {
    // WARNING: The string names of the permissions passed in below are used to
    // generate preference names and should never be changed!
  

+ 10 - 10
build/patches/safe_browsing-disable-cookie-transmission.patch

@@ -8,7 +8,7 @@ prevents the long-living tracking cookie from being set.
 References: https://github.com/iridium-browser/iridium-browser/issues/37
 ---
  chrome/browser/safe_browsing/client_side_detection_service.cc         | 4 ++--
- .../download_protection/check_client_download_request.cc              | 2 +-
+ .../download_protection/check_client_download_request_base.cc         | 2 +-
  .../safe_browsing/download_protection/ppapi_download_request.cc       | 2 +-
  components/safe_browsing/browser/threat_details_cache.cc              | 1 +
  components/safe_browsing/db/v4_update_protocol_manager.cc             | 4 ++--
@@ -17,7 +17,7 @@ References: https://github.com/iridium-browser/iridium-browser/issues/37
 diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc
 --- a/chrome/browser/safe_browsing/client_side_detection_service.cc
 +++ b/chrome/browser/safe_browsing/client_side_detection_service.cc
-@@ -356,7 +356,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -346,7 +346,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetClientReportUrl(kClientReportPhishingUrl);
    resource_request->method = "POST";
@@ -26,7 +26,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
    auto loader = network::SimpleURLLoader::Create(std::move(resource_request),
                                                   traffic_annotation);
    loader->AttachStringForUpload(request_data, "application/octet-stream");
-@@ -438,7 +438,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -428,7 +428,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetClientReportUrl(kClientReportMalwareUrl);
    resource_request->method = "POST";
@@ -35,10 +35,10 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
    auto loader = network::SimpleURLLoader::Create(std::move(resource_request),
                                                   traffic_annotation);
    loader->AttachStringForUpload(request_data, "application/octet-stream");
-diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
---- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
-+++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
-@@ -773,7 +773,7 @@ void CheckClientDownloadRequest::SendRequest() {
+diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc
+--- a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc
++++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc
+@@ -596,7 +596,7 @@ void CheckClientDownloadRequestBase::SendRequest() {
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = PPAPIDownloadRequest::GetDownloadRequestUrl();
    resource_request->method = "POST";
@@ -50,7 +50,7 @@ diff --git a/chrome/browser/safe_browsing/download_protection/check_client_downl
 diff --git a/chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc b/chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc
 --- a/chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc
 +++ b/chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc
-@@ -251,7 +251,7 @@ void PPAPIDownloadRequest::SendRequest() {
+@@ -249,7 +249,7 @@ void PPAPIDownloadRequest::SendRequest() {
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetDownloadRequestUrl();
    resource_request->method = "POST";
@@ -62,7 +62,7 @@ diff --git a/chrome/browser/safe_browsing/download_protection/ppapi_download_req
 diff --git a/components/safe_browsing/browser/threat_details_cache.cc b/components/safe_browsing/browser/threat_details_cache.cc
 --- a/components/safe_browsing/browser/threat_details_cache.cc
 +++ b/components/safe_browsing/browser/threat_details_cache.cc
-@@ -114,6 +114,7 @@ void ThreatDetailsCacheCollector::OpenEntry() {
+@@ -113,6 +113,7 @@ void ThreatDetailsCacheCollector::OpenEntry() {
    // Only from cache, and don't save cookies.
    resource_request->load_flags = net::LOAD_ONLY_FROM_CACHE |
                                   net::LOAD_SKIP_CACHE_VALIDATION |
@@ -73,7 +73,7 @@ diff --git a/components/safe_browsing/browser/threat_details_cache.cc b/componen
 diff --git a/components/safe_browsing/db/v4_update_protocol_manager.cc b/components/safe_browsing/db/v4_update_protocol_manager.cc
 --- a/components/safe_browsing/db/v4_update_protocol_manager.cc
 +++ b/components/safe_browsing/db/v4_update_protocol_manager.cc
-@@ -372,8 +372,8 @@ void V4UpdateProtocolManager::IssueUpdateRequest() {
+@@ -369,8 +369,8 @@ void V4UpdateProtocolManager::IssueUpdateRequest() {
    std::string req_base64 = GetBase64SerializedUpdateRequestProto();
    GetUpdateUrlAndHeaders(req_base64, &resource_request->url,
                           &resource_request->headers);

+ 3 - 3
build/patches/safe_browsing-disable-incident-reporting.patch

@@ -28,7 +28,7 @@ diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_report_upl
 diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
 --- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
 +++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
-@@ -311,11 +311,14 @@ IncidentReportingService::UploadContext::~UploadContext() {
+@@ -312,11 +312,14 @@ IncidentReportingService::UploadContext::~UploadContext() {
  
  // static
  bool IncidentReportingService::IsEnabledForProfile(Profile* profile) {
@@ -59,10 +59,10 @@ diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc b/chrom
 diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc
 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc
 +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
-@@ -257,8 +257,10 @@ SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() {
+@@ -229,8 +229,10 @@ SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() {
  
  void SafeBrowsingService::RegisterAllDelayedAnalysis() {
- #if defined(FULL_SAFE_BROWSING)
+ #if BUILDFLAG(FULL_SAFE_BROWSING)
 +#if 0
    RegisterBinaryIntegrityAnalysis();
  #endif

+ 5 - 5
build/patches/safe_browsing-disable-reporting-of-safebrowsing-override.patch

@@ -12,7 +12,7 @@ This prevents trk:148 (phishing) and trk:149 (malware).
 diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc
 --- a/chrome/browser/safe_browsing/client_side_detection_service.cc
 +++ b/chrome/browser/safe_browsing/client_side_detection_service.cc
-@@ -63,11 +63,13 @@ enum MalwareReportTypes {
+@@ -61,11 +61,13 @@ enum MalwareReportTypes {
    REPORT_RESULT_MAX
  };
  
@@ -26,7 +26,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
  
  }  // namespace
  
-@@ -287,6 +289,10 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -277,6 +279,10 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
      return;
    }
  
@@ -37,7 +37,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
    // Fill in metadata about which model we used.
    if (is_extended_reporting) {
      request->set_model_filename(model_loader_extended_->name());
-@@ -369,6 +375,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -359,6 +365,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
  
    // Record that we made a request
    phishing_report_times_.push(base::Time::Now());
@@ -45,7 +45,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
  }
  
  void ClientSideDetectionService::StartClientReportMalwareRequest(
-@@ -383,6 +390,10 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -373,6 +380,10 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
      return;
    }
  
@@ -56,7 +56,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
    std::string request_data;
    if (!request->SerializeToString(&request_data)) {
      UpdateEnumUMAHistogram(REPORT_FAILED_SERIALIZATION);
-@@ -452,6 +463,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -442,6 +453,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
  
    // Record that we made a malware request
    malware_report_times_.push(base::Time::Now());

+ 1 - 1
build/patches/ungoogled-chromium-Always-use-local-DevTools-files-instead-of-remote-files-from-Google.patch

@@ -17,7 +17,7 @@ Related comment: https://bugs.chromium.org/p/chromium/issues/detail?id=710701#c1
 diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn
 --- a/third_party/blink/renderer/devtools/BUILD.gn
 +++ b/third_party/blink/renderer/devtools/BUILD.gn
-@@ -1281,10 +1281,8 @@ action("generate_devtools_grd") {
+@@ -1290,10 +1290,8 @@ action("generate_devtools_grd") {
        devtools_embedder_scripts +
        [ "$resources_out_dir/devtools_extension_api.js" ]
  

+ 6 - 6
build/patches/ungoogled-chromium-Disable-Gaia.patch

@@ -15,9 +15,9 @@ See also: https://github.com/Eloston/ungoogled-chromium/issues/104
 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
-@@ -337,7 +337,6 @@
-       <include name="IDR_INLINE_LOGIN_HTML" file="resources\inline_login\inline_login.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
-       <include name="IDR_INLINE_LOGIN_CSS" file="resources\inline_login\inline_login.css" flattenhtml="true" type="BINDATA" />
+@@ -270,7 +270,6 @@
+       <include name="IDR_INLINE_LOGIN_HTML" file="resources\inline_login\inline_login.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" preprocess="true" />
+       <include name="IDR_INLINE_LOGIN_CSS" file="resources\inline_login\inline_login.css" flattenhtml="true" type="BINDATA" preprocess="true" />
        <include name="IDR_INLINE_LOGIN_JS" file="resources\inline_login\inline_login.js" flattenhtml="true" type="BINDATA" />
 -      <include name="IDR_GAIA_AUTH_AUTHENTICATOR_JS" file="resources\gaia_auth_host\authenticator.js" flattenhtml="true" type="BINDATA" />
        <include name="IDR_INSPECT_CSS" file="resources\inspect\inspect.css" flattenhtml="true" type="BINDATA" />
@@ -37,7 +37,7 @@ diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/
 diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_fetcher.cc
 --- a/google_apis/gaia/gaia_auth_fetcher.cc
 +++ b/google_apis/gaia/gaia_auth_fetcher.cc
-@@ -45,7 +45,7 @@ namespace {
+@@ -44,7 +44,7 @@ namespace {
  const int kLoadFlagsIgnoreCookies = net::LOAD_DO_NOT_SEND_COOKIES |
                                      net::LOAD_DO_NOT_SAVE_COOKIES;
  
@@ -46,7 +46,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_
  
  constexpr char kBadAuthenticationError[] = "BadAuthentication";
  constexpr char kBadAuthenticationShortError[] = "badauth";
-@@ -261,6 +261,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
+@@ -260,6 +260,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
      const net::NetworkTrafficAnnotationTag& traffic_annotation) {
    DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
  
@@ -54,7 +54,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = gaia_gurl;
    original_url_ = gaia_gurl;
-@@ -311,6 +312,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
+@@ -316,6 +317,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
        base::BindOnce(&GaiaAuthFetcher::OnURLLoadComplete,
                       base::Unretained(this)),
        kMaxMessageSize);

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

@@ -5,8 +5,8 @@ Subject: ungoogled-chromium: Disable Google host detection
 Disables various detections of Google hosts and functionality specific to them
 ---
  .../page_load_metrics/page_load_metrics_util.cc    |   4 +-
- .../page_load_metrics/page_load_metrics_util.cc    |  33 +---
  components/google/core/common/google_util.cc       | 196 ++-------------------
+ .../common/page_load_metrics_util.cc               |  33 +---
  components/search_engines/template_url.cc          |   6 +-
  net/base/url_util.cc                               |  21 ---
  5 files changed, 14 insertions(+), 246 deletions(-)
@@ -14,7 +14,7 @@ Disables various detections of Google hosts and functionality specific to them
 diff --git a/chrome/browser/page_load_metrics/page_load_metrics_util.cc b/chrome/browser/page_load_metrics/page_load_metrics_util.cc
 --- a/chrome/browser/page_load_metrics/page_load_metrics_util.cc
 +++ b/chrome/browser/page_load_metrics/page_load_metrics_util.cc
-@@ -169,9 +169,7 @@ bool DidObserveLoadingBehaviorInAnyFrame(
+@@ -171,9 +171,7 @@ bool DidObserveLoadingBehaviorInAnyFrame(
  }
  
  bool IsGoogleSearchHostname(const GURL& url) {
@@ -25,53 +25,10 @@ diff --git a/chrome/browser/page_load_metrics/page_load_metrics_util.cc b/chrome
  }
  
  bool IsGoogleSearchResultUrl(const GURL& url) {
-diff --git a/chrome/common/page_load_metrics/page_load_metrics_util.cc b/chrome/common/page_load_metrics/page_load_metrics_util.cc
---- a/chrome/common/page_load_metrics/page_load_metrics_util.cc
-+++ b/chrome/common/page_load_metrics/page_load_metrics_util.cc
-@@ -12,38 +12,7 @@
- namespace page_load_metrics {
- 
- base::Optional<std::string> GetGoogleHostnamePrefix(const GURL& url) {
--  const size_t registry_length =
--      net::registry_controlled_domains::GetRegistryLength(
--          url,
--
--          // Do not include unknown registries (registries that don't have any
--          // matches in effective TLD names).
--          net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
--
--          // Do not include private registries, such as appspot.com. We don't
--          // want to match URLs like www.google.appspot.com.
--          net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
--
--  const base::StringPiece hostname = url.host_piece();
--  if (registry_length == 0 || registry_length == std::string::npos ||
--      registry_length >= hostname.length()) {
--    return base::Optional<std::string>();
--  }
--
--  // Removes the tld and the preceding dot.
--  const base::StringPiece hostname_minus_registry =
--      hostname.substr(0, hostname.length() - (registry_length + 1));
--
--  if (hostname_minus_registry == "google")
--    return std::string("");
--
--  if (!base::EndsWith(hostname_minus_registry, ".google",
--                      base::CompareCase::INSENSITIVE_ASCII)) {
--    return base::Optional<std::string>();
--  }
--
--  return std::string(hostname_minus_registry.substr(
--      0, hostname_minus_registry.length() - strlen(".google")));
-+  return base::Optional<std::string>();
- }
- 
- bool IsGoogleHostname(const GURL& url) {
 diff --git a/components/google/core/common/google_util.cc b/components/google/core/common/google_util.cc
 --- a/components/google/core/common/google_util.cc
 +++ b/components/google/core/common/google_util.cc
-@@ -45,120 +45,16 @@ bool gUseMockLinkDoctorBaseURLForTesting = false;
+@@ -46,102 +46,6 @@ bool gUseMockLinkDoctorBaseURLForTesting = false;
  
  bool g_ignore_port_numbers = false;
  
@@ -174,6 +131,8 @@ diff --git a/components/google/core/common/google_util.cc b/components/google/co
  }  // namespace
  
  // Global functions -----------------------------------------------------------
+@@ -149,19 +53,11 @@ bool IsGoogleSearchSubdomainUrl(const GURL& url) {
+ const char kGoogleHomepageURL[] = "https://www.google.com/";
  
  bool HasGoogleSearchQueryParam(base::StringPiece str) {
 -  url::Component query(0, static_cast<int>(str.length())), key, value;
@@ -193,7 +152,7 @@ diff --git a/components/google/core/common/google_util.cc b/components/google/co
  }
  
  void SetMockLinkDoctorBaseURLForTesting() {
-@@ -172,120 +68,50 @@ std::string GetGoogleLocale(const std::string& application_locale) {
+@@ -175,120 +71,50 @@ std::string GetGoogleLocale(const std::string& application_locale) {
  
  GURL AppendGoogleLocaleParam(const GURL& url,
                               const std::string& application_locale) {
@@ -324,10 +283,53 @@ diff --git a/components/google/core/common/google_util.cc b/components/google/co
  }
  
  bool IsGoogleAssociatedDomainUrl(const GURL& url) {
+diff --git a/components/page_load_metrics/common/page_load_metrics_util.cc b/components/page_load_metrics/common/page_load_metrics_util.cc
+--- a/components/page_load_metrics/common/page_load_metrics_util.cc
++++ b/components/page_load_metrics/common/page_load_metrics_util.cc
+@@ -12,38 +12,7 @@
+ namespace page_load_metrics {
+ 
+ base::Optional<std::string> GetGoogleHostnamePrefix(const GURL& url) {
+-  const size_t registry_length =
+-      net::registry_controlled_domains::GetRegistryLength(
+-          url,
+-
+-          // Do not include unknown registries (registries that don't have any
+-          // matches in effective TLD names).
+-          net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
+-
+-          // Do not include private registries, such as appspot.com. We don't
+-          // want to match URLs like www.google.appspot.com.
+-          net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
+-
+-  const base::StringPiece hostname = url.host_piece();
+-  if (registry_length == 0 || registry_length == std::string::npos ||
+-      registry_length >= hostname.length()) {
+-    return base::Optional<std::string>();
+-  }
+-
+-  // Removes the tld and the preceding dot.
+-  const base::StringPiece hostname_minus_registry =
+-      hostname.substr(0, hostname.length() - (registry_length + 1));
+-
+-  if (hostname_minus_registry == "google")
+-    return std::string("");
+-
+-  if (!base::EndsWith(hostname_minus_registry, ".google",
+-                      base::CompareCase::INSENSITIVE_ASCII)) {
+-    return base::Optional<std::string>();
+-  }
+-
+-  return std::string(hostname_minus_registry.substr(
+-      0, hostname_minus_registry.length() - strlen(".google")));
++  return base::Optional<std::string>();
+ }
+ 
+ bool IsGoogleHostname(const GURL& url) {
 diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
 --- a/components/search_engines/template_url.cc
 +++ b/components/search_engines/template_url.cc
-@@ -500,11 +500,7 @@ base::string16 TemplateURLRef::SearchTermToString16(
+@@ -505,11 +505,7 @@ base::string16 TemplateURLRef::SearchTermToString16(
  bool TemplateURLRef::HasGoogleBaseURLs(
      const SearchTermsData& search_terms_data) const {
    ParseIfNecessary(search_terms_data);
@@ -343,7 +345,7 @@ diff --git a/components/search_engines/template_url.cc b/components/search_engin
 diff --git a/net/base/url_util.cc b/net/base/url_util.cc
 --- a/net/base/url_util.cc
 +++ b/net/base/url_util.cc
-@@ -411,27 +411,6 @@ bool HasGoogleHost(const GURL& url) {
+@@ -394,27 +394,6 @@ bool HasGoogleHost(const GURL& url) {
  }
  
  bool IsGoogleHost(base::StringPiece host) {

+ 1 - 1
build/patches/ungoogled-chromium-Disable-intranet-redirect-detector.patch

@@ -12,7 +12,7 @@ See this page for more information: https://mikewest.org/2012/02/chrome-connects
 diff --git a/chrome/browser/intranet_redirect_detector.cc b/chrome/browser/intranet_redirect_detector.cc
 --- a/chrome/browser/intranet_redirect_detector.cc
 +++ b/chrome/browser/intranet_redirect_detector.cc
-@@ -75,9 +75,7 @@ void IntranetRedirectDetector::FinishSleep() {
+@@ -96,9 +96,7 @@ void IntranetRedirectDetector::FinishSleep() {
    simple_loaders_.clear();
    resulting_origins_.clear();
  

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

@@ -12,7 +12,7 @@ Added some Bromite-specific further improvements
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -1392,8 +1392,6 @@ jumbo_split_static_library("browser") {
+@@ -1449,8 +1449,6 @@ jumbo_split_static_library("browser") {
      "profiles/profile_attributes_entry.h",
      "profiles/profile_attributes_storage.cc",
      "profiles/profile_attributes_storage.h",

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

@@ -5,11 +5,11 @@ Subject: ungoogled-chromium: Disable translate integration
 Remove translate offer
 ---
  .../android/java/res/xml/languages_preferences.xml |  5 -----
- .../languages/LanguagesPreferences.java            | 23 ----------------------
+ .../languages/LanguagesPreferences.java            | 22 ----------------------
  .../java/strings/android_chrome_strings.grd        |  3 ---
  .../translate/core/browser/translate_manager.cc    |  5 +++--
  .../translate/core/browser/translate_script.cc     |  3 +--
- 5 files changed, 4 insertions(+), 35 deletions(-)
+ 5 files changed, 4 insertions(+), 34 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/languages_preferences.xml b/chrome/android/java/res/xml/languages_preferences.xml
 --- a/chrome/android/java/res/xml/languages_preferences.xml
@@ -18,24 +18,16 @@ diff --git a/chrome/android/java/res/xml/languages_preferences.xml b/chrome/andr
          android:layout="@layout/languages_preference"
          android:widgetLayout="@layout/accept_languages_list" />
  
--    <org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat
+-    <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
 -        android:key="translate_switch"
 -        android:summaryOn="@string/languages_offer_translate_switch"
 -        android:summaryOff="@string/languages_offer_translate_switch" />
 -
- </android.support.v7.preference.PreferenceScreen>
+ </PreferenceScreen>
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
-@@ -10,7 +10,6 @@ import android.support.v7.preference.Preference;
- import android.support.v7.preference.PreferenceFragmentCompat;
- 
- import org.chromium.chrome.R;
--import org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat;
- import org.chromium.chrome.browser.preferences.PrefServiceBridge;
- import org.chromium.chrome.browser.preferences.PreferenceUtils;
- import org.chromium.chrome.browser.preferences.PreferencesLauncher;
-@@ -25,7 +24,6 @@ public class LanguagesPreferences
+@@ -25,7 +25,6 @@ public class LanguagesPreferences
  
      // The keys for each preference shown on the languages page.
      static final String PREFERRED_LANGUAGES_KEY = "preferred_languages";
@@ -43,13 +35,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/lan
  
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-@@ -35,27 +33,6 @@ public class LanguagesPreferences
+@@ -35,27 +34,6 @@ public class LanguagesPreferences
          LanguageListPreference mLanguageListPref =
                  (LanguageListPreference) findPreference(PREFERRED_LANGUAGES_KEY);
          mLanguageListPref.registerActivityLauncher(this);
 -
--        ChromeSwitchPreferenceCompat translateSwitch =
--                (ChromeSwitchPreferenceCompat) findPreference(TRANSLATE_SWITCH_KEY);
+-        ChromeSwitchPreference translateSwitch =
+-                (ChromeSwitchPreference) findPreference(TRANSLATE_SWITCH_KEY);
 -        boolean isTranslateEnabled = PrefServiceBridge.getInstance().isTranslateEnabled();
 -        translateSwitch.setChecked(isTranslateEnabled);
 -
@@ -74,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/lan
 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
-@@ -1193,9 +1193,6 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -1211,9 +1211,6 @@ Your Google account may have other forms of browsing history like searches and a
        <message name="IDS_LANGUAGES_LIST_PREFS_DESCRIPTION" desc="Description on the Languages settings screen. Appears above a list of one or more languages that the user selects, to tell Chrome which languages they prefer to use to read website content.">
          Websites will show text in your preferred language, when possible.
        </message>

+ 9 - 9
build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch

@@ -9,30 +9,30 @@ Subject: ungoogled-chromium: Disable webRTC log uploader
 diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc
 --- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc
 +++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc
-@@ -127,29 +127,7 @@ void WebRtcLogUploader::LoggingStoppedDoUpload(
+@@ -125,29 +125,7 @@ void WebRtcLogUploader::LoggingStoppedDoUpload(
    DCHECK(meta_data.get());
-   DCHECK(!upload_done_data.log_path.empty());
+   DCHECK(!upload_done_data.paths.directory.empty());
  
 -  std::string compressed_log = CompressLog(log_buffer.get());
 -
 -  std::string local_log_id;
 -
--  if (base::PathExists(upload_done_data.log_path)) {
--    webrtc_logging::DeleteOldWebRtcLogFiles(upload_done_data.log_path);
+-  if (base::PathExists(upload_done_data.paths.directory)) {
+-    webrtc_logging::DeleteOldWebRtcLogFiles(upload_done_data.paths.directory);
 -
 -    local_log_id = base::NumberToString(base::Time::Now().ToDoubleT());
 -    base::FilePath log_file_path =
--        upload_done_data.log_path.AppendASCII(local_log_id)
+-        upload_done_data.paths.directory.AppendASCII(local_log_id)
 -            .AddExtension(FILE_PATH_LITERAL(".gz"));
 -    WriteCompressedLogToFile(compressed_log, log_file_path);
 -
 -    base::FilePath log_list_path =
 -        webrtc_logging::TextLogList::GetWebRtcLogListFileForDirectory(
--            upload_done_data.log_path);
+-            upload_done_data.paths.directory);
 -    AddLocallyStoredLogInfoToUploadListFile(log_list_path, local_log_id);
 -  }
 -
--  WebRtcLogUploadDoneData upload_done_data_with_log_id = upload_done_data;
+-  UploadDoneData upload_done_data_with_log_id = upload_done_data;
 -  upload_done_data_with_log_id.local_log_id = local_log_id;
 -  PrepareMultipartPostData(compressed_log, std::move(meta_data),
 -                           upload_done_data_with_log_id);
@@ -40,7 +40,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser
  }
  
  void WebRtcLogUploader::PrepareMultipartPostData(
-@@ -160,6 +138,9 @@ void WebRtcLogUploader::PrepareMultipartPostData(
+@@ -158,6 +136,9 @@ void WebRtcLogUploader::PrepareMultipartPostData(
    DCHECK(!compressed_log.empty());
    DCHECK(meta_data.get());
  
@@ -49,7 +49,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser
 +
    std::unique_ptr<std::string> post_data(new std::string());
    SetupMultipart(post_data.get(), compressed_log,
-                  upload_done_data.incoming_rtp_dump,
+                  upload_done_data.paths.incoming_rtp_dump,
 -- 
 2.11.0
 

+ 2 - 1
build/patches_list.txt

@@ -65,7 +65,6 @@ Add-exit-menu-item.patch
 Remove-help-menu-item.patch
 Add-menu-option-to-toggle-global-Javascript-preference.patch
 Add-global-menu-entry-to-toggle-AdBlocker.patch
-Bromite-AdBlock-engine-for-SystemWebView.patch
 User-Agent-anonymize.patch
 AudioBuffer-AnalyserNode-fingerprinting-mitigations-via-IDL.patch
 getClientRects-getBoundingClientRect-measureText-add-fingerprinting-mitigation.patch
@@ -123,6 +122,8 @@ disable-sensors-access-site-setting-by-default.patch
 Disable-media-router-and-remoting-by-default.patch
 Do-not-record-UMA-for-network-errors.patch
 Disable-unified-consent-on-Android.patch
+Revert-Cleanup-Search-Ready-Omnibox-flag-since-it-has-launched.patch
 Disable-search-ready-omnibox-by-default.patch
 disable-AdsBlockedInfoBar.patch
 Bromite-AdBlockUpdaterService.patch
+Revert-Merge-to-M78-Enable-AImageReader-by-default.patch

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.