Forráskód Böngészése

Release 77.0.3865.81

csagan5 5 éve
szülő
commit
5330cb879f
100 módosított fájl, 3469 hozzáadás és 2487 törlés
  1. 12 0
      CHANGELOG.md
  2. 1 1
      build/GN_ARGS
  3. 130 4
      build/filters/adblock_entries.h
  4. 1 1
      build/patches/AV1-codec-support.patch
  5. 25 56
      build/patches/Add-a-flag-for-DNS-over-HTTPS.patch
  6. 30 34
      build/patches/Add-a-proxy-configuration-page.patch
  7. 27 27
      build/patches/Add-an-always-incognito-mode.patch
  8. 55 69
      build/patches/Add-bookmark-import-export-actions.patch
  9. 43 42
      build/patches/Add-custom-tab-intents-privacy-option.patch
  10. 2 2
      build/patches/Add-exit-menu-item.patch
  11. 20 8
      build/patches/Add-flag-to-configure-maximum-connections-per-host.patch
  12. 3 3
      build/patches/Add-flag-to-control-video-playback-resume-feature.patch
  13. 59 14
      build/patches/Add-flag-to-disable-IPv6-probes.patch
  14. 16 16
      build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch
  15. 193 0
      build/patches/Add-global-menu-entry-to-toggle-AdBlocker.patch
  16. 5 5
      build/patches/Add-menu-option-to-toggle-global-Javascript-preference.patch
  17. 47 49
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  18. 28 32
      build/patches/Add-option-to-use-home-page-as-NTP.patch
  19. 19 19
      build/patches/Add-site-settings-option-for-session-only-cookies.patch
  20. 0 862
      build/patches/Allow-building-without-safebrowsing-for-Android.patch
  21. 2 2
      build/patches/Allow-playing-audio-in-background.patch
  22. 1 1
      build/patches/Allow-website-sign-in-without-account-sign-in.patch
  23. 1 1
      build/patches/Always-allow-partner-customisation.patch
  24. 2 2
      build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch
  25. 10 10
      build/patches/Always-show-home-page-settings.patch
  26. 2 2
      build/patches/AudioBuffer-AnalyserNode-fingerprinting-mitigations-via-IDL.patch
  27. 4 320
      build/patches/Bromite-AdBlock-engine-for-SystemWebView.patch
  28. 1351 0
      build/patches/Bromite-AdBlockUpdaterService.patch
  29. 10 11
      build/patches/Canvas-fingerprinting-mitigations-for-image-data-and-webGL.patch
  30. 5 5
      build/patches/Disable-NTP-remote-suggestions-by-default.patch
  31. 1 1
      build/patches/Disable-Omaha-update-checks.patch
  32. 31 16
      build/patches/Disable-data-saver.patch
  33. 25 25
      build/patches/Disable-dynamic-module-loading.patch
  34. 3 3
      build/patches/Disable-media-router-and-remoting-by-default.patch
  35. 1 1
      build/patches/Disable-metrics-collection-for-NTP-tiles.patch
  36. 3 3
      build/patches/Disable-metrics-on-all-I-O-threads.patch
  37. 0 23
      build/patches/Disable-network-service-by-default.patch
  38. 1 1
      build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch
  39. 1 1
      build/patches/Disable-plugins-enumeration.patch
  40. 74 17
      build/patches/Disable-promos-displayed-in-bookmarks-manager.patch
  41. 4 4
      build/patches/Disable-references-to-fonts.googleapis.com.patch
  42. 667 89
      build/patches/Disable-safe-browsing.patch
  43. 1 1
      build/patches/Disable-search-ready-omnibox-by-default.patch
  44. 1 1
      build/patches/Disable-seed-based-field-trials.patch
  45. 80 95
      build/patches/Disable-signin-and-data-saver-preferences.patch
  46. 1 1
      build/patches/Disable-signin-data-reduction-promos.patch
  47. 3 3
      build/patches/Disable-third-party-cookies-by-default.patch
  48. 2 2
      build/patches/Disable-unified-consent-on-Android.patch
  49. 10 10
      build/patches/Disable-unused-permissions.patch
  50. 1 1
      build/patches/Do-not-grant-notifications-to-default-search-engine.patch
  51. 1 1
      build/patches/Do-not-record-UMA-for-network-errors.patch
  52. 1 1
      build/patches/Do-not-store-passwords-by-default.patch
  53. 1 1
      build/patches/Enable-changing-default-downloads-storage-location-by-default.patch
  54. 1 1
      build/patches/Enable-download-rename-option-by-default.patch
  55. 1 1
      build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
  56. 1 1
      build/patches/Enable-night-mode-menu-entry-by-default.patch
  57. 0 23
      build/patches/Enable-secure-DNS-mode-by-default-in-DnsTransaction.patch
  58. 2 2
      build/patches/Enable-site-per-process-isolation-for-devices-with-enough-memory.patch
  59. 0 56
      build/patches/Expose-flag-to-toggle-network-service.patch
  60. 1 1
      build/patches/Fix-crash-when-accessing-page-info-site-settings.patch
  61. 3 3
      build/patches/Hide-passwords-manager-link.patch
  62. 11 12
      build/patches/Inject-scripts-for-AMP-tracking-ads-and-video-functionality.patch
  63. 11 11
      build/patches/Modify-default-preferences.patch
  64. 1 1
      build/patches/Never-fetch-popular-sites.patch
  65. 1 1
      build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch
  66. 1 1
      build/patches/Punt-the-Widevine-version-string.patch
  67. 12 188
      build/patches/Remove-background-sync-and-translate-menu-options.patch
  68. 24 4
      build/patches/Remove-help-menu-item.patch
  69. 64 64
      build/patches/Remove-recent-tabs-signin.patch
  70. 1 1
      build/patches/Switch-to-fstack-protector-strong.patch
  71. 10 10
      build/patches/Use-4-tile-rows-never-show-logo.patch
  72. 1 1
      build/patches/Use-64-bit-WebView-processes.patch
  73. 4 4
      build/patches/User-Agent-anonymize.patch
  74. 67 34
      build/patches/autofill-disable-autofill-download-manager.patch
  75. 2 2
      build/patches/battery_status_service-disable-more-privacy-nightmares.patch
  76. 8 8
      build/patches/build-remove-calling-untrusted-hooks.patch
  77. 26 0
      build/patches/disable-AdsBlockedInfoBar.patch
  78. 1 1
      build/patches/disable-sensors-access-site-setting-by-default.patch
  79. 1 1
      build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch
  80. 68 0
      build/patches/enable-subresource-filter-on-all-sites.patch
  81. 0 36
      build/patches/extensions-always-show-component-extensions-in-the-ext-list.patch
  82. 18 32
      build/patches/getClientRects-getBoundingClientRect-measureText-add-fingerprinting-mitigation.patch
  83. 2 2
      build/patches/google-cloud-messaging-disable-experiment-status-check.patch
  84. 47 24
      build/patches/kill-GCM.patch
  85. 1 1
      build/patches/kill-Location-fall-back-to-system.patch
  86. 1 1
      build/patches/kill-TOS-and-metrics-opt-out.patch
  87. 4 4
      build/patches/kill-Translate.patch
  88. 1 1
      build/patches/kill-Vision.patch
  89. 6 6
      build/patches/openH264-enable-ARM-ARM64-optimizations.patch
  90. 7 7
      build/patches/prefs-disable-signinallowed-by-default.patch
  91. 1 1
      build/patches/promo-disable-Google-promotion-fetching.patch
  92. 4 4
      build/patches/safe_browsing-disable-cookie-transmission.patch
  93. 1 1
      build/patches/safe_browsing-disable-incident-reporting.patch
  94. 4 4
      build/patches/safe_browsing-disable-reporting-of-safebrowsing-override.patch
  95. 12 12
      build/patches/ungoogled-chromium-Always-use-local-DevTools-files-instead-of-remote-files-from-Google.patch
  96. 13 13
      build/patches/ungoogled-chromium-Disable-GCM.patch
  97. 4 4
      build/patches/ungoogled-chromium-Disable-Gaia.patch
  98. 1 1
      build/patches/ungoogled-chromium-Disable-Google-host-detection.patch
  99. 1 1
      build/patches/ungoogled-chromium-Disable-intranet-redirect-detector.patch
  100. 1 1
      build/patches/ungoogled-chromium-Disable-profile-avatar-downloading.patch

+ 12 - 0
CHANGELOG.md

@@ -1,3 +1,15 @@
+# 77.0.3865.81
+* use native subresource filtering instead of Bromite engine
+* introduce Bromite AdBlockUpdate service
+* keep using Bromite engine for SystemWebView
+* enable subresource filter for all sites
+* disable subresource filter popup
+* enable IPv6 probing by default
+* drop DnsTransaction default security level patch
+* drop patch to visualize all type of extensions
+* drop patches for Network Service
+* enable CFI for all architectures except x86
+
 # 76.0.3809.129
 * disable CFI to fix x86 crashes (fixes https://github.com/bromite/bromite/issues/357)
 

+ 1 - 1
build/GN_ARGS

@@ -14,7 +14,7 @@ enable_reporting=false
 enable_resource_whitelist_generation=false
 enable_vr=false
 fieldtrial_testing_like_official_build=true
-is_cfi=false
+is_cfi=true
 is_component_build=false
 is_debug=false
 is_official_build=true

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 130 - 4
build/filters/adblock_entries.h


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

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

+ 25 - 56
build/patches/Add-a-flag-for-DNS-over-HTTPS.patch

@@ -10,22 +10,22 @@ 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 +++
- .../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                         | 27 +++-------------------
- net/url_request/url_request_http_job.cc            | 16 +++++++++----
- 10 files changed, 58 insertions(+), 41 deletions(-)
+ 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(-)
 
 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
-@@ -391,6 +391,14 @@ const FeatureEntry::FeatureVariation kCCTModuleCacheVariations[] = {
+@@ -403,6 +403,14 @@ const FeatureEntry::FeatureVariation kCCTModuleCacheVariations[] = {
       base::size(kCCTModuleCache_ThirtyMinutes), nullptr},
  };
  
@@ -40,7 +40,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  #endif  // OS_ANDROID
  
  const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = {
-@@ -3273,6 +3281,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3438,6 +3446,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kEnableSyncUSSBookmarksName,
       flag_descriptions::kEnableSyncUSSBookmarksDescription, kOsAll,
       FEATURE_VALUE_TYPE(switches::kSyncUSSBookmarks)},
@@ -53,7 +53,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
-@@ -2063,6 +2063,9 @@ const char kAutoFetchOnNetErrorPageDescription[] =
+@@ -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.";
  
@@ -66,7 +66,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
-@@ -1229,6 +1229,9 @@ extern const char kAsyncDnsDescription[];
+@@ -1294,6 +1294,9 @@ extern const char kAsyncDnsDescription[];
  extern const char kAutoFetchOnNetErrorPageName[];
  extern const char kAutoFetchOnNetErrorPageDescription[];
  
@@ -79,15 +79,15 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 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
-@@ -24,6 +24,7 @@
+@@ -23,6 +23,7 @@
+ #include "chrome/browser/chrome_content_browser_client.h"
  #include "chrome/browser/component_updater/crl_set_component_installer.h"
- #include "chrome/browser/io_thread.h"
  #include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
 +#include "components/network_session_configurator/common/network_switches.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"
-@@ -124,6 +125,7 @@ void GetStubResolverConfig(
+@@ -111,6 +112,7 @@ void GetStubResolverConfig(
        if (!net::dns_util::IsValidDoHTemplate(
                doh_server_list[i].GetString(),
                doh_server_method_list[i].GetString())) {
@@ -95,7 +95,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
          continue;
        }
  
-@@ -400,15 +402,12 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -378,15 +380,12 @@ SystemNetworkContextManager::SystemNetworkContextManager(
                                      base::Value(ShouldEnableAsyncDns()));
    base::ListValue default_doh_servers;
    base::ListValue default_doh_server_methods;
@@ -180,38 +180,7 @@ diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/net/dns/dns_transaction.cc
-@@ -358,29 +358,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
-     extra_request_headers.SetHeader("Accept", kDnsOverHttpResponseContentType);
- 
-     DCHECK(url_request_context);
--    request_ = url_request_context->CreateRequest(
--        url, request_priority_, this,
--        net::DefineNetworkTrafficAnnotation("dns_over_https", R"(
--        semantics {
--          sender: "DNS over HTTPS"
--          description: "Domain name resolution over HTTPS"
--          trigger: "User enters a navigates to a domain or Chrome otherwise "
--                   "makes a connection to a domain whose IP address isn't cached"
--          data: "The domain name that is being requested"
--          destination: OTHER
--          destination_other: "The user configured DNS over HTTPS server, which"
--                             "may be dns.google.com"
--        }
--        policy {
--          cookies_allowed: NO
--          setting:
--            "You can configure this feature via that 'dns_over_https_servers' and"
--            "'dns_over_https.method' prefs. Empty lists imply this feature is"
--            "disabled"
--          policy_exception_justification: "Experimental feature that"
--                                          "is disabled by default"
--        }
--      )"));
-+    request_ = url_request_context->CreateRequest(url, request_priority_, this);
-     net_log_ = request_->net_log();
- 
-     if (use_post) {
-@@ -396,6 +374,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
+@@ -392,6 +392,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
  
      request_->SetExtraRequestHeaders(extra_request_headers);
      request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE |
@@ -219,7 +188,7 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
                             LOAD_BYPASS_PROXY);
      request_->set_allow_credentials(false);
    }
-@@ -811,7 +790,7 @@ class DnsTransactionImpl : public DnsTransaction,
+@@ -806,7 +807,7 @@ class DnsTransactionImpl : public DnsTransaction,
          doh_attempt_(false),
          first_server_index_(0),
          url_request_context_(url_request_context),
@@ -231,7 +200,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
-@@ -345,6 +345,7 @@ void URLRequestHttpJob::Start() {
+@@ -340,6 +340,7 @@ void URLRequestHttpJob::Start() {
    // plugin could set a referrer although sending the referrer is inhibited.
    request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
  
@@ -239,7 +208,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()) {
-@@ -360,11 +361,14 @@ void URLRequestHttpJob::Start() {
+@@ -355,11 +356,14 @@ void URLRequestHttpJob::Start() {
      request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
                                            referer_value);
    }
@@ -254,7 +223,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
  
    AddExtraHeaders();
    AddCookieHeaderAndStart();
-@@ -588,10 +592,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -582,10 +586,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
      } else {
        // Advertise "br" encoding only if transferred data is opaque to proxy.
        bool advertise_brotli = false;
@@ -271,7 +240,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
          }
        }
  
-@@ -609,7 +615,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -603,7 +609,7 @@ void URLRequestHttpJob::AddExtraHeaders() {
      }
    }
  

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

@@ -8,7 +8,7 @@ settings.
 Offer auto-complete for the proxy page URL.
 ---
  chrome/android/java/res/values/values.xml          |   3 +
- .../android/java/res/xml/privacy_preferences.xml   |   5 +
+ .../android/java/res/xml/privacy_preferences.xml   |   4 +
  .../chrome_autocomplete_provider_client.cc         |   2 +
  chrome/browser/browser_resources.grd               |   2 +
  .../prefs/chrome_command_line_pref_store.cc        |   2 +-
@@ -17,7 +17,7 @@ Offer auto-complete for the proxy page URL.
  chrome/browser/resources/proxy_config.js           | 252 +++++++++++++
  chrome/browser/ui/BUILD.gn                         |   2 +
  .../ui/webui/chrome_web_ui_controller_factory.cc   |   3 +
- chrome/browser/ui/webui/proxy_config_ui.cc         | 398 +++++++++++++++++++++
+ chrome/browser/ui/webui/proxy_config_ui.cc         | 397 +++++++++++++++++++++
  chrome/browser/ui/webui/proxy_config_ui.h          |  33 ++
  chrome/common/webui_url_constants.cc               |   4 +
  chrome/common/webui_url_constants.h                |   2 +
@@ -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, 913 insertions(+), 12 deletions(-)
+ 19 files changed, 911 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
-@@ -81,6 +81,9 @@
+@@ -80,6 +80,9 @@
      <integer name="list_item_level_selected">1</integer>
      <integer name="list_item_level_incognito">2</integer>
  
@@ -49,24 +49,21 @@ 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
-@@ -5,8 +5,13 @@
- 
- <PreferenceScreen
-     xmlns:android="http://schemas.android.com/apk/res/android"
-+    xmlns:app="http://schemas.android.com/apk/res-auto"
-     xmlns:tools="http://schemas.android.com/tools">
+@@ -6,6 +6,10 @@
+ <android.support.v7.preference.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.ChromeBaseCheckBoxPreference
-         android:key="navigation_error"
-         android:title="@string/navigation_error_title"
+     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
+         android:key="can_make_payment"
+         android:title="@string/can_make_payment_title"
 diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
-@@ -236,6 +236,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
+@@ -257,6 +257,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
    builtins_to_provide.push_back(
        base::ASCIIToUTF16(chrome::kChromeUIFlagsURL));
    builtins_to_provide.push_back(
@@ -78,7 +75,7 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 +++ b/chrome/browser/browser_resources.grd
-@@ -178,6 +178,8 @@
+@@ -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" />
        </if>
        <include name="IDR_SUPERVISED_USER_INTERNALS_HTML" file="resources\supervised_user_internals\supervised_user_internals.html" allowexternalscript="true" compress="gzip" type="BINDATA" />
@@ -90,7 +87,7 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou
 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
-@@ -155,7 +155,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() {
+@@ -153,7 +153,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() {
      SetValue(
          proxy_config::prefs::kProxy,
          std::make_unique<base::Value>(ProxyConfigDictionary::CreateFixedServers(
@@ -508,7 +505,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
-@@ -269,6 +269,8 @@ jumbo_split_static_library("ui") {
+@@ -271,6 +271,8 @@ jumbo_split_static_library("ui") {
      "webui/metrics_handler.h",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.h",
@@ -516,11 +513,11 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
 +    "webui/proxy_config_ui.h",
      "webui/net_internals/net_internals_ui.cc",
      "webui/net_internals/net_internals_ui.h",
-     "webui/ntp_tiles_internals_ui.cc",
+     "webui/notifications_internals/notifications_internals_ui.cc",
 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
-@@ -53,6 +53,7 @@
+@@ -54,6 +54,7 @@
  #include "chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.h"
  #include "chrome/browser/ui/webui/policy_ui.h"
  #include "chrome/browser/ui/webui/predictors/predictors_ui.h"
@@ -528,7 +525,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
  #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
  #include "chrome/browser/ui/webui/settings/settings_ui.h"
  #include "chrome/browser/ui/webui/settings_utils.h"
-@@ -391,6 +392,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+@@ -386,6 +387,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
@@ -536,12 +533,12 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom
 +    return &NewWebUI<ProxyConfigUI>;
    if (url.host_piece() == chrome::kChromeUINetInternalsHost)
      return &NewWebUI<NetInternalsUI>;
-   if (url.host_piece() == chrome::kChromeUINTPTilesInternalsHost)
+   if (url.host_piece() == chrome::kChromeUINotificationsInternalsHost)
 diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webui/proxy_config_ui.cc
 new file mode 100644
 --- /dev/null
 +++ b/chrome/browser/ui/webui/proxy_config_ui.cc
-@@ -0,0 +1,398 @@
+@@ -0,0 +1,397 @@
 +/*
 +    This file is part of Bromite.
 +
@@ -577,7 +574,6 @@ new file mode 100644
 +#include "base/strings/utf_string_conversions.h"
 +#include "base/values.h"
 +#include "chrome/browser/browser_process.h"
-+#include "chrome/browser/io_thread.h"
 +#include "chrome/browser/net/proxy_service_factory.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/profiles/profile.h"
@@ -981,7 +977,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
-@@ -181,6 +181,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
+@@ -180,6 +180,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] =
  const char kChromeUINativeScheme[] = "chrome-native";
  const char kChromeUIOfflineInternalsHost[] = "offline-internals";
  const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics";
@@ -990,15 +986,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
-@@ -401,6 +403,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) {
-                                           kPowerSubPage,
-                                           kSmartLockSettingsSubPage,
-                                           kSmbSharesSubPage,
-+    kChromeUIProxyConfigHost,
-                                           kStorageSubPage,
-                                           kStylusSubPage};
-   // Sub-pages may have query parameters, e.g. networkDetail?guid=123456.
-@@ -495,6 +498,7 @@ const char* const kChromeHostURLs[] = {
+@@ -439,6 +441,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
+@@ -538,6 +541,7 @@ const char* const kChromeHostURLs[] = {
  #if !defined(OS_ANDROID)
  #if !defined(OS_CHROMEOS)
      kChromeUIAppLauncherPageHost,
@@ -1009,7 +1005,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
-@@ -107,6 +107,8 @@ extern const char kChromeUIMemoryInternalsHost[];
+@@ -108,6 +108,8 @@ extern const char kChromeUIMemoryInternalsHost[];
  extern const char kChromeUINTPTilesInternalsHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINetExportHost[];

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

@@ -12,8 +12,8 @@ clicked links to launch as incognito.
  .../chrome/browser/appmenu/AppMenuHandlerImpl.java | 11 ++++
  .../contextmenu/ChromeContextMenuPopulator.java    |  9 ++-
  .../chrome/browser/tabmodel/ChromeTabCreator.java  | 24 ++++++-
- .../java/strings/android_chrome_strings.grd        |  6 ++
- 8 files changed, 132 insertions(+), 2 deletions(-)
+ .../java/strings/android_chrome_strings.grd        |  8 +++
+ 8 files changed, 134 insertions(+), 2 deletions(-)
  create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
 
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
@@ -30,18 +30,16 @@ 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
-@@ -39,6 +39,11 @@
-         android:key="usage_and_crash_reports"
-         android:title="@string/usage_and_crash_reports_title_legacy"
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.UsageAndCrashReportsPreferenceFragment" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+@@ -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
 +        android:key="always_incognito"
 +        android:title="@string/always_incognito_title"
 +        android:summary="@string/always_incognito_summary"
 +        android:defaultValue="false" />
-     <Preference
-         android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference"
-         android:key="do_not_track"
+ </android.support.v7.preference.PreferenceScreen>
 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
@@ -123,7 +121,7 @@ new file mode 100644
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
-@@ -228,6 +228,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -225,6 +225,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
      private static final int RECORD_MULTI_WINDOW_SCREEN_WIDTH_DELAY_MS = 5000;
  
@@ -132,7 +130,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      /**
       * Timeout in ms for reading PartnerBrowserCustomizations provider.
       */
-@@ -1627,6 +1629,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1659,6 +1661,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }
@@ -186,9 +184,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;
-@@ -45,6 +46,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+ import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
+@@ -44,6 +45,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
      private static final String TAG = "CCMenuPopulator";
      private final ContextMenuItemDelegate mDelegate;
      private final @ContextMenuMode int mMode;
@@ -196,7 +194,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
  
      /**
       * Defines the Groups of each Context Menu Item
-@@ -266,7 +268,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
+@@ -270,7 +272,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
              if (FirstRunStatus.getFirstRunFlowComplete() && mMode == ContextMenuMode.NORMAL
                      && !isEmptyUrl(params.getUrl())
                      && UrlUtilities.isAcceptedScheme(params.getUrl())) {
@@ -232,7 +230,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;
-@@ -35,6 +38,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -36,6 +39,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
  
      private final ChromeActivity mActivity;
      private final boolean mIncognito;
@@ -240,7 +238,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
  
      private WindowAndroid mNativeWindow;
      private TabModel mTabModel;
-@@ -45,6 +49,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -46,6 +50,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
          mActivity = activity;
          mNativeWindow = nativeWindow;
          mIncognito = incognito;
@@ -252,7 +250,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
      }
  
      @Override
-@@ -169,6 +178,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -170,6 +179,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                          tab.getWebContents());
              }
  
@@ -263,7 +261,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
              mTabModel.addTab(tab, position, type);
              return tab;
          } finally {
-@@ -197,6 +210,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -198,6 +211,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                            .setWindow(mNativeWindow)
                            .setLaunchType(type)
                            .build();
@@ -275,7 +273,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;
-@@ -240,7 +258,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -241,7 +259,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
       */
      public Tab launchUrlFromExternalApp(String url, String referer, String headers,
              String appId, boolean forceNewTab, Intent intent, long intentTimestamp) {
@@ -283,7 +281,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
          boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
  
          // If an external app sends an intent for a Weblite URL and the Data Reduction Proxy is
-@@ -305,6 +322,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -306,6 +323,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                  state.isIncognito());
          tab.initialize(null, createDefaultTabDelegateFactory(), !selectTab, state, false);
          assert state.isIncognito() == mIncognito;
@@ -298,19 +296,21 @@ 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
-@@ -704,6 +704,12 @@ CHAR-LIMIT guidelines:
-       <message name="IDS_PREFS_PRIVACY" desc="Title for the Privacy preferences. [CHAR-LIMIT=32]">
-         Privacy
+@@ -692,6 +692,14 @@ CHAR-LIMIT guidelines:
+         Search and site suggestions disabled
        </message>
+ 
++      <!-- always incognito -->
 +      <message name="IDS_ALWAYS_INCOGNITO_TITLE" desc="Title for always incognito mode">
 +        Open links in incognito tabs always
 +      </message>
 +      <message name="IDS_ALWAYS_INCOGNITO_SUMMARY" desc="Summary for always incognito mode">
 +        Opens links in incognito tabs when you click on new tab or on a link
 +      </message>
-       <message name="IDS_NAVIGATION_ERROR_TITLE" desc="Title for checkbox to enable or disable navigation error suggestions.">
-         Navigation error suggestions
-       </message>
++
+       <!-- Themes preferences -->
+       <message name="IDS_PREFS_THEMES" desc="Title for the Themes preferences. [CHAR-LIMIT=32]">
+         Themes
 -- 
 2.11.0
 

+ 55 - 69
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   | 215 +++++++++++++++++++++
+ .../browser/android/bookmarks/bookmark_bridge.cc   | 216 +++++++++++++++++++++
  chrome/browser/android/bookmarks/bookmark_bridge.h |  20 +-
  chrome/browser/importer/profile_writer.cc          |  12 ++
  chrome/browser/importer/profile_writer.h           |   6 +
@@ -24,16 +24,16 @@ Completely remove contacts picker permission from the file dialog
  chrome/utility/BUILD.gn                            |   7 +-
  chrome/utility/importer/bookmark_html_reader.cc    |  27 ++-
  chrome/utility/importer/bookmark_html_reader.h     |   9 +
- .../src/org/chromium/ui/base/SelectFileDialog.java |  16 +-
+ .../src/org/chromium/ui/base/SelectFileDialog.java |  18 +-
  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, 445 insertions(+), 13 deletions(-)
+ 22 files changed, 447 insertions(+), 14 deletions(-)
 
 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
-@@ -35,7 +35,6 @@ by a child template that "extends" this file.
+@@ -34,7 +34,6 @@ by a child template that "extends" this file.
      {% endif %}
      <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
      <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
@@ -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
-@@ -89,6 +89,12 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -86,6 +86,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();
-@@ -132,6 +138,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -129,6 +135,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);
      }
-@@ -141,6 +149,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -138,6 +146,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);
          }
-@@ -173,6 +183,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
+@@ -170,6 +180,8 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
      public void onFolderStateSet(BookmarkId folder) {
          mCurrentFolder = mDelegate.getModel().getBookmarkById(folder);
  
@@ -113,7 +113,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java
 @@ -12,6 +12,7 @@ import org.chromium.base.VisibleForTesting;
  import org.chromium.chrome.browser.SnackbarActivity;
- import org.chromium.chrome.browser.UrlConstants;
+ import org.chromium.chrome.browser.util.UrlConstants;
  import org.chromium.components.bookmarks.BookmarkId;
 +import org.chromium.ui.base.ActivityWindowAndroid;
  
@@ -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;
-@@ -507,6 +515,24 @@ public class BookmarkBridge {
+@@ -506,6 +514,24 @@ public class BookmarkBridge {
      }
  
      /**
@@ -210,7 +210,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
       * Synchronously gets a list of bookmarks that match the specified search query.
       * @param query Keyword used for searching bookmarks.
       * @param maxNumberOfResult Maximum number of result to fetch.
-@@ -839,6 +865,24 @@ public class BookmarkBridge {
+@@ -848,6 +874,24 @@ public class BookmarkBridge {
          depthList.add(depth);
      }
  
@@ -235,7 +235,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) {
          List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
          for (int i = 0; i < left.length; i++) {
-@@ -905,6 +949,8 @@ public class BookmarkBridge {
+@@ -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);
@@ -247,7 +247,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/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
-@@ -69,6 +69,16 @@ interface BookmarkDelegate {
+@@ -70,6 +70,16 @@ interface BookmarkDelegate {
      void openSearchUI();
  
      /**
@@ -267,15 +267,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
-@@ -21,6 +21,7 @@ import org.chromium.base.metrics.RecordUserAction;
- import org.chromium.chrome.R;
+@@ -22,6 +22,7 @@ import org.chromium.chrome.R;
+ import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
 +import org.chromium.chrome.browser.ChromeActivity;
  import org.chromium.chrome.browser.favicon.LargeIconBridge;
  import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
  import org.chromium.chrome.browser.native_page.BasicNativePage;
-@@ -32,6 +33,7 @@ import org.chromium.chrome.browser.widget.selection.SelectableListLayout;
+@@ -34,6 +35,7 @@ import org.chromium.chrome.browser.widget.selection.SelectableListLayout;
  import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.SearchDelegate;
  import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
  import org.chromium.components.bookmarks.BookmarkId;
@@ -283,7 +283,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
  
  import java.util.Stack;
  
-@@ -56,6 +58,7 @@ public class BookmarkManager implements BookmarkDelegate, SearchDelegate,
+@@ -58,6 +60,7 @@ public class BookmarkManager
      private Activity mActivity;
      private ViewGroup mMainView;
      private BookmarkModel mBookmarkModel;
@@ -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;
-@@ -275,6 +278,13 @@ public class BookmarkManager implements BookmarkDelegate, SearchDelegate,
+@@ -358,6 +361,13 @@ public class BookmarkManager
      }
  
      /**
@@ -305,7 +305,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
       * @return Current URL representing the UI state of bookmark manager. If no state has been shown
       *         yet in this session, on phone return last used state stored in preference; on tablet
       *         return the url previously set by {@link #updateForUrl(String)}.
-@@ -422,6 +432,16 @@ public class BookmarkManager implements BookmarkDelegate, SearchDelegate,
+@@ -523,6 +533,16 @@ public class BookmarkManager
      }
  
      @Override
@@ -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
-@@ -174,6 +174,10 @@ jumbo_split_static_library("browser") {
+@@ -170,6 +170,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,8 +363,8 @@ 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",
-@@ -2857,8 +2861,6 @@ jumbo_split_static_library("browser") {
-       "badging/badge_service_impl.h",
+@@ -2921,8 +2925,6 @@ jumbo_split_static_library("browser") {
+       "badging/badge_manager_factory.h",
        "banners/app_banner_manager_desktop.cc",
        "banners/app_banner_manager_desktop.h",
 -      "bookmarks/bookmark_html_writer.cc",
@@ -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",
-@@ -2958,8 +2960,6 @@ jumbo_split_static_library("browser") {
+@@ -3034,8 +3036,6 @@ jumbo_split_static_library("browser") {
        "importer/importer_uma.h",
        "importer/in_process_importer_bridge.cc",
        "importer/in_process_importer_bridge.h",
@@ -384,52 +384,29 @@ 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
-@@ -9,19 +9,30 @@
- 
- #include <memory>
+@@ -38,6 +38,21 @@
+ #include "components/undo/undo_manager.h"
+ #include "content/public/browser/browser_thread.h"
  
 +#include "base/android/content_uri_utils.h"
- #include "base/android/jni_array.h"
- #include "base/android/jni_string.h"
- #include "base/bind.h"
 +#include "base/android/path_utils.h"
- #include "base/containers/stack.h"
- #include "base/containers/stack_container.h"
- #include "base/i18n/string_compare.h"
 +#include "base/strings/utf_string_conversions.h"
 +#include "chrome/utility/importer/bookmark_html_reader.h"
 +#include "chrome/browser/bookmarks/bookmark_html_writer.h"
- #include "chrome/browser/bookmarks/bookmark_model_factory.h"
- #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
 +#include "chrome/browser/importer/profile_writer.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/ui/chrome_select_file_policy.h"
- #include "chrome/browser/profiles/incognito_helpers.h"
- #include "chrome/browser/profiles/profile.h"
- #include "chrome/browser/profiles/profile_android.h"
- #include "chrome/browser/signin/identity_manager_factory.h"
- #include "chrome/browser/undo/bookmark_undo_service_factory.h"
 +#include "chrome/common/importer/imported_bookmark_entry.h"
 +#include "chrome/common/importer/importer_data_types.h"
 +#include "chrome/common/url_constants.h"
- #include "components/bookmarks/browser/bookmark_model.h"
- #include "components/bookmarks/browser/bookmark_utils.h"
- #include "components/bookmarks/browser/scoped_group_bookmark_actions.h"
-@@ -31,10 +42,13 @@
- #include "components/bookmarks/managed/managed_bookmark_service.h"
- #include "components/prefs/pref_service.h"
- #include "components/query_parser/query_parser.h"
 +#include "components/search_engines/template_url.h"
- #include "components/undo/bookmark_undo_service.h"
- #include "components/undo/undo_manager.h"
 +#include "components/url_formatter/url_fixer.h"
- #include "content/public/browser/browser_thread.h"
- #include "jni/BookmarkBridge_jni.h"
 +#include "ui/android/window_android.h"
- #include "services/identity/public/cpp/identity_manager.h"
- 
++
  using base::android::AttachCurrentThread;
-@@ -54,6 +68,57 @@ using bookmarks::BookmarkPermanentNode;
+ using base::android::ConvertUTF8ToJavaString;
+ using base::android::ConvertUTF16ToJavaString;
+@@ -55,6 +70,57 @@ using bookmarks::BookmarkPermanentNode;
  using bookmarks::BookmarkType;
  using content::BrowserThread;
  
@@ -487,7 +464,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  namespace {
  
  class BookmarkTitleComparer {
-@@ -130,6 +195,10 @@ BookmarkBridge::~BookmarkBridge() {
+@@ -131,6 +197,10 @@ BookmarkBridge::~BookmarkBridge() {
    bookmark_model_->RemoveObserver(this);
    if (partner_bookmarks_shim_)
      partner_bookmarks_shim_->RemoveObserver(this);
@@ -498,7 +475,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  }
  
  void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) {
-@@ -475,6 +544,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
+@@ -444,6 +514,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
    return count;
  }
  
@@ -686,7 +663,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
    jboolean IsEditBookmarksEnabled(
        JNIEnv* env,
        const base::android::JavaParamRef<jobject>& obj);
-@@ -116,6 +125,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
+@@ -122,6 +131,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
                               jlong id,
                               jint type);
  
@@ -700,7 +677,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,
-@@ -261,12 +277,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
+@@ -267,12 +283,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
    void ShimBeingDeleted(PartnerBookmarksShim* shim) override;
  
    Profile* profile_;
@@ -718,7 +695,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
 diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc
 --- a/chrome/browser/importer/profile_writer.cc
 +++ b/chrome/browser/importer/profile_writer.cc
-@@ -97,12 +97,14 @@ void ProfileWriter::AddHistoryPage(const history::URLRows& page,
+@@ -96,12 +96,14 @@ void ProfileWriter::AddHistoryPage(const history::URLRows& page,
      HistoryServiceFactory::GetForProfile(profile_,
                                           ServiceAccessType::EXPLICIT_ACCESS)
          ->AddPagesWithDetails(page, visit_source);
@@ -733,7 +710,7 @@ diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer
  }
  
  void ProfileWriter::AddHomepage(const GURL& home_page) {
-@@ -123,6 +125,16 @@ void ProfileWriter::AddBookmarks(
+@@ -122,6 +124,16 @@ void ProfileWriter::AddBookmarks(
      return;
  
    BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_);
@@ -776,7 +753,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
-@@ -438,6 +438,9 @@ static_library("common") {
+@@ -445,6 +445,9 @@ static_library("common") {
      sources += [
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.h",
@@ -789,7 +766,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
 diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
 --- a/chrome/utility/BUILD.gn
 +++ b/chrome/utility/BUILD.gn
-@@ -66,8 +66,6 @@ static_library("utility") {
+@@ -64,8 +64,6 @@ static_library("utility") {
  
    if (!is_android) {
      sources += [
@@ -798,7 +775,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",
-@@ -165,6 +163,11 @@ static_library("utility") {
+@@ -163,6 +161,11 @@ static_library("utility") {
      }
    }
  
@@ -956,16 +933,25 @@ 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())
-@@ -183,7 +190,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
-                             return;
+@@ -184,7 +191,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
                          }
  
--                        if (shouldUsePhotoPicker
-+                        if ((shouldUsePhotoPicker || shouldShowHtmlTypes())
-                                 && requestPermissions[i].equals(storagePermission)) {
+                         // TODO(finnur): Remove once we figure out the cause of crbug.com/950024.
+-                        if (shouldUsePhotoPicker) {
++                        if (shouldUsePhotoPicker || shouldShowHtmlTypes()) {
+                             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
+                             }
+                         }
+ 
+-                        if (shouldUsePhotoPicker && permissions[i].equals(storagePermission)) {
++                        if ((shouldUsePhotoPicker || shouldShowHtmlTypes()) && permissions[i].equals(storagePermission)) {
                              onFileNotSelected();
                              return;
-@@ -333,6 +340,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+                         }
+@@ -347,6 +354,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
              }
              if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType);
          }
@@ -973,7 +959,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui
          return mimeTypes;
      }
  
-@@ -605,6 +613,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
+@@ -619,6 +627,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
          return countAcceptTypesFor(specificType) > 0;
      }
  

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

@@ -3,12 +3,12 @@ Date: Wed, 29 Aug 2018 11:03:44 +0200
 Subject: Add custom tab intents privacy option
 
 ---
- chrome/android/java/res/values/values.xml                      |  3 +++
- chrome/android/java/res/xml/privacy_preferences.xml            |  5 +++++
- .../org/chromium/chrome/browser/LaunchIntentDispatcher.java    |  2 ++
- .../chrome/browser/preferences/privacy/PrivacyPreferences.java | 10 ++++++++++
- chrome/android/java/strings/android_chrome_strings.grd         |  7 +++++++
- 5 files changed, 27 insertions(+)
+ chrome/android/java/res/values/values.xml                     |  3 +++
+ chrome/android/java/res/xml/privacy_preferences.xml           |  5 +++++
+ .../org/chromium/chrome/browser/LaunchIntentDispatcher.java   |  2 ++
+ .../browser/preferences/privacy/PrivacyPreferences.java       | 11 +++++++++++
+ chrome/android/java/strings/android_chrome_strings.grd        |  7 +++++++
+ 5 files changed, 28 insertions(+)
 
 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
@@ -26,18 +26,18 @@ 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
-@@ -42,6 +42,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.ChromeBaseCheckBoxPreference
+@@ -15,6 +15,11 @@
+         android:title="@string/preload_pages_title"
+         android:summary="@string/preload_pages_summary"
+         android:persistent="false" />
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
 +        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" />
-     <Preference
-         android:key="clear_browsing_data"
-         android:title="@string/clear_browsing_data_title"
+     <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
+         android:key="usage_stats_reporting"
+         android:title="@string/usage_stats_setting_title"
 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
@@ -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;
-@@ -270,6 +271,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
+@@ -271,6 +272,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
       */
      public static boolean isCustomTabIntent(Intent intent) {
          if (intent == null) return false;
@@ -60,51 +60,52 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-@@ -39,6 +39,7 @@ public class PrivacyPreferences extends PreferenceFragment
-         implements OnPreferenceChangeListener {
-     private static final String PREF_NAVIGATION_ERROR = "navigation_error";
-     private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
-+    public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
-     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";
-@@ -100,6 +101,11 @@ public class PrivacyPreferences extends PreferenceFragment
-         navigationErrorPref.setOnPreferenceChangeListener(this);
-         navigationErrorPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
+@@ -39,6 +39,8 @@ public class PrivacyPreferences
  
-+        ChromeBaseCheckBoxPreference allowCustomTabIntentsPref =
-+                (ChromeBaseCheckBoxPreference) findPreference(PREF_ALLOW_CUSTOM_TAB_INTENTS);
-+        allowCustomTabIntentsPref.setOnPreferenceChangeListener(this);
-+        allowCustomTabIntentsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
+     private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
+ 
++    public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
 +
-         ChromeBaseCheckBoxPreference searchSuggestionsPref =
-                 (ChromeBaseCheckBoxPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
-         searchSuggestionsPref.setOnPreferenceChangeListener(this);
-@@ -122,6 +128,10 @@ public class PrivacyPreferences extends PreferenceFragment
-             recordNetworkPredictionEnablingUMA((boolean) newValue);
-         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
-             PrefServiceBridge.getInstance().setResolveNavigationErrorEnabled((boolean) newValue);
+     @Override
+     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+         PrivacyPreferencesManager privacyPrefManager = PrivacyPreferencesManager.getInstance();
+@@ -69,6 +71,10 @@ public class PrivacyPreferences
+         if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
+             PrefServiceBridge.getInstance().setBoolean(
+                     Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
 +        } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
 +            sharedPreferencesEditor.apply();
-         } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
-             PrefServiceBridge.getInstance().setBoolean(
-                     Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
+         } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
+             PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
+         }
+@@ -98,6 +104,11 @@ public class PrivacyPreferences
+                     prefServiceBridge.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
+         }
+ 
++        ChromeBaseCheckBoxPreferenceCompat allowCustomTabIntentsPref =
++                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_ALLOW_CUSTOM_TAB_INTENTS);
++        allowCustomTabIntentsPref.setOnPreferenceChangeListener(this);
++        allowCustomTabIntentsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
++
+         Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
+         if (doNotTrackPref != null) {
+             doNotTrackPref.setSummary(prefServiceBridge.isDoNotTrackEnabled() ? textOn : textOff);
 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
-@@ -4070,6 +4070,13 @@ The site does NOT gain access to the camera. The camera images are only visible
+@@ -3965,6 +3965,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>
++      <!-- Allow custom tab intents -->
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
 +        Allow custom tab intents
 +      </message>
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_SUMMARY" desc="Summary text for 'Allow custom tab intents' settings-privacy option.">
 +        Allow applications to open custom tab intents, similar to webview.
 +      </message>
-+
  
        <!-- Autofill Assistant preferences -->
        <message name="IDS_PREFS_AUTOFILL_ASSISTANT_TITLE" desc="Title for the Autofill Assistant preferences screen. [CHAR-LIMIT=32]">

+ 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
-@@ -2151,6 +2151,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2148,6 +2148,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
-@@ -3070,6 +3070,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -2959,6 +2959,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>

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

@@ -12,13 +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 +
  net/socket/client_socket_pool_manager.cc                | 17 +++++++++++++++++
- 7 files changed, 43 insertions(+)
+ 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
-@@ -581,6 +581,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+@@ -593,6 +593,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
       net::kEffectiveConnectionType4G},
  };
  
@@ -30,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 ==
-@@ -2183,6 +2188,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2363,6 +2368,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kPassiveDocumentEventListenersName,
       flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kPassiveDocumentEventListeners)},
@@ -43,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
-@@ -1163,6 +1163,10 @@ const char kLookalikeUrlNavigationSuggestionsDescription[] =
+@@ -1219,6 +1219,10 @@ const char kLookalikeUrlNavigationSuggestionsDescription[] =
  const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure";
  const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
  
@@ -57,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
-@@ -714,6 +714,9 @@ extern const char kMarkHttpAsWarning[];
+@@ -742,6 +742,9 @@ extern const char kMarkHttpAsWarning[];
  extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[];
  extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
  
@@ -97,17 +98,28 @@ diff --git a/components/network_session_configurator/common/network_features.h b
 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
-@@ -21,6 +21,10 @@ NETWORK_SWITCH(kEnableUserAlternateProtocolPorts,
- 
+@@ -22,6 +22,10 @@ NETWORK_SWITCH(kEnableUserAlternateProtocolPorts,
  // Enables the QUIC protocol.  This is a temporary testing flag.
  NETWORK_SWITCH(kEnableQuic, "enable-quic")
+ 
 +// Allows specifying a higher number of maximum connections per host
 +// (15 instead of 6, mirroring the value Mozilla uses).
 +NETWORK_SWITCH(kMaxConnectionsPerHost, "max-connections-per-host")
 +
- 
  // 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") {
+     "//base",
+     "//base:i18n",
+     "//third_party/icu",
++    "//components/network_session_configurator/common"
+   ]
+   if (is_ios) {
+     libs = [ "UIKit.framework" ]
 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

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

@@ -12,7 +12,7 @@ Disable it by default on Android as it is everywhere else
 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
-@@ -803,6 +803,11 @@ const char kMemlogStackModeNative[] = "Native";
+@@ -848,6 +848,11 @@ const char kMemlogStackModeNative[] = "Native";
  const char kMemlogStackModeNativeWithThreadNames[] = "Native with thread names";
  const char kMemlogStackModePseudo[] = "Trace events";
  
@@ -27,7 +27,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
-@@ -480,6 +480,9 @@ extern const char kEnablePortalsDescription[];
+@@ -501,6 +501,9 @@ extern const char kEnablePortalsDescription[];
  extern const char kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  
@@ -40,7 +40,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
 diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
 --- a/media/base/media_switches.cc
 +++ b/media/base/media_switches.cc
-@@ -208,11 +208,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
+@@ -212,11 +212,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
  // when in background.
  const base::Feature kResumeBackgroundVideo {
    "resume-background-video",

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

@@ -3,18 +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 +++
- net/dns/host_resolver_manager.cc        | 10 ++++++++--
- services/network/public/cpp/features.cc |  4 ++++
- services/network/public/cpp/features.h  |  2 ++
- 6 files changed, 26 insertions(+), 2 deletions(-)
+ chrome/browser/about_flags.cc                 |  5 +++++
+ chrome/browser/flag_descriptions.cc           |  4 ++++
+ chrome/browser/flag_descriptions.h            |  3 +++
+ components/subresource_filter/tools/BUILD.gn  |  6 ++++++
+ 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 ++
+ 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
-@@ -2867,6 +2867,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3037,6 +3037,11 @@ const FeatureEntry kFeatureEntries[] = {
           kMarkHttpAsFeatureVariations,
           "HTTPReallyBadFinal")},
  
@@ -29,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
-@@ -2265,6 +2265,10 @@ const char kForegroundNotificationManagerDescription[] =
+@@ -2394,6 +2394,10 @@ const char kForegroundNotificationManagerDescription[] =
  const char kHomePageButtonName[] = "Force Enable Home Page Button";
  const char kHomePageButtonDescription[] = "Displays a home button if enabled.";
  
@@ -43,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
-@@ -483,6 +483,9 @@ extern const char kEnableNewDownloadBackendDescription[];
+@@ -504,6 +504,9 @@ extern const char kEnableNewDownloadBackendDescription[];
  extern const char kEnablePortalsName[];
  extern const char kEnablePortalsDescription[];
  
@@ -53,10 +55,53 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio
  extern const char kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  
+diff --git a/components/subresource_filter/tools/BUILD.gn b/components/subresource_filter/tools/BUILD.gn
+--- a/components/subresource_filter/tools/BUILD.gn
++++ b/components/subresource_filter/tools/BUILD.gn
+@@ -52,6 +52,8 @@ if (!is_ios) {
+     deps = [
+       ":tools_lib",
+       "//base",
++      "//components/network_session_configurator/common",
++      "//services/network/public/cpp"
+     ]
+   }
+ 
+@@ -65,6 +67,8 @@ if (!is_ios) {
+       ":tools_lib",
+       "../core/common",
+       "//base",
++      "//components/network_session_configurator/common",
++      "//services/network/public/cpp",
+     ]
+   }
+ 
+@@ -76,6 +80,8 @@ if (!is_ios) {
+       "ruleset_converter:support",
+       "//base",
+       "//third_party/protobuf:protobuf_lite",
++      "//components/network_session_configurator/common",
++      "//services/network/public/cpp"
+     ]
+   }
+ 
+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") {
+     "//base",
+     "//base:i18n",
+     "//third_party/icu",
+-    "//components/network_session_configurator/common"
++    "//components/network_session_configurator/common",
++    "//services/network/public/cpp",
+   ]
+   if (is_ios) {
+     libs = [ "UIKit.framework" ]
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/net/dns/host_resolver_manager.cc
-@@ -87,6 +87,7 @@
+@@ -86,6 +86,7 @@
  #include "net/socket/client_socket_factory.h"
  #include "net/socket/datagram_client_socket.h"
  #include "net/url_request/url_request_context.h"
@@ -64,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)
-@@ -2952,8 +2953,13 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
+@@ -3178,8 +3179,13 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
    bool cached = true;
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
        kIPv6ProbePeriodMs) {
@@ -83,13 +128,13 @@ 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
-@@ -44,6 +44,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT};
+@@ -50,6 +50,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT};
  const base::Feature kThrottleDelayable{"ThrottleDelayable",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
  
 +// Enable IPv6 ping probes to RIPE DNS.
 +const base::Feature kIPv6Probing{"IPv6Probing",
-+                                       base::FEATURE_DISABLED_BY_DEFAULT};
++                                       base::FEATURE_ENABLED_BY_DEFAULT};
 +
  // When kPriorityRequestsDelayableOnSlowConnections is enabled, HTTP
  // requests fetched from a SPDY/QUIC/H2 proxies can be delayed by the

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

@@ -20,7 +20,7 @@ legacy acceleration events.
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -2251,6 +2251,12 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2437,6 +2437,12 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-generic-sensor", flag_descriptions::kEnableGenericSensorName,
       flag_descriptions::kEnableGenericSensorDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kGenericSensor)},
@@ -36,7 +36,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -574,6 +574,14 @@ const char kEnableGenericSensorDescription[] =
+@@ -620,6 +620,14 @@ const char kEnableGenericSensorDescription[] =
      "Accelerometer, LinearAccelerationSensor, Gyroscope, "
      "AbsoluteOrientationSensor and RelativeOrientationSensor interfaces.";
  
@@ -54,7 +54,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -361,6 +361,12 @@ extern const char kEnableTLS13EarlyDataDescription[];
+@@ -379,6 +379,12 @@ extern const char kWinrtSensorsImplementationDescription[];
  extern const char kEnableGenericSensorName[];
  extern const char kEnableGenericSensorDescription[];
  
@@ -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
-@@ -95,6 +95,9 @@ void SetIndividualRuntimeFeatures(
+@@ -85,6 +85,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
-@@ -632,6 +632,16 @@ const base::Feature kExperimentalProductivityFeatures{
+@@ -667,6 +667,16 @@ const base::Feature kExperimentalProductivityFeatures{
  // TODO(rouslan): Remove this.
  const base::Feature kWebPayments{"WebPayments",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
@@ -103,19 +103,19 @@ 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
-     kBackgroundMediaRendererHasModerateBinding;
- CONTENT_EXPORT extern const base::Feature kForce60HzRefreshRate;
- CONTENT_EXPORT extern const base::Feature kHideIncorrectlySizedFullscreenFrames;
+@@ -156,6 +156,8 @@ CONTENT_EXPORT extern const base::Feature kScriptStreamingOnPreload;
+ CONTENT_EXPORT extern const base::Feature kTrustedDOMTypes;
+ CONTENT_EXPORT extern const base::Feature kBrowserUseDisplayThreadPriority;
+ 
 +CONTENT_EXPORT extern const base::Feature kDeviceMotion, kDeviceOrientation;
 +
- CONTENT_EXPORT extern const base::Feature kWarmUpNetworkProcess;
- CONTENT_EXPORT extern const base::Feature kWebNfc;
- #endif  // defined(OS_ANDROID)
+ #if defined(OS_ANDROID)
+ CONTENT_EXPORT extern const base::Feature kAndroidAutofillAccessibility;
+ CONTENT_EXPORT extern const base::Feature
 diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
 --- a/third_party/blink/public/platform/web_runtime_features.h
 +++ b/third_party/blink/public/platform/web_runtime_features.h
-@@ -95,6 +95,8 @@ class WebRuntimeFeatures {
+@@ -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 EnableScrollTopLeftInterop(bool);
@@ -127,7 +127,7 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa
 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
-@@ -244,9 +244,12 @@ void ModulesInitializer::InitInspectorAgentSession(
+@@ -252,9 +252,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
-@@ -160,6 +160,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
+@@ -144,6 +144,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
-@@ -1009,6 +1009,14 @@
+@@ -1064,6 +1064,14 @@
        status: "experimental",
      },
      {

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

@@ -0,0 +1,193 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sat, 14 Sep 2019 10:19:07 +0200
+Subject: Add global menu entry to toggle AdBlocker
+
+---
+ chrome/android/java/res/menu/custom_tabs_menu.xml  | 12 +++++++
+ chrome/android/java/res/menu/main_menu.xml         | 11 ++++++
+ .../chromium/chrome/browser/ChromeActivity.java    |  8 +++++
+ .../chrome/browser/ChromeTabbedActivity.java       |  8 +++++
+ .../appmenu/AppMenuPropertiesDelegateImpl.java     | 40 ++++++++++++++++++++++
+ .../CustomTabAppMenuPropertiesDelegate.java        |  2 ++
+ .../java/strings/android_chrome_strings.grd        | 11 ++++++
+ 7 files changed, 92 insertions(+)
+
+diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
+--- a/chrome/android/java/res/menu/custom_tabs_menu.xml
++++ b/chrome/android/java/res/menu/custom_tabs_menu.xml
+@@ -75,6 +75,18 @@
+                   android:checkable="true" />
+           </menu>
+         </item>
++        <item android:id="@+id/enable_adblock_row_menu_id"
++            android:title="@null"
++            android:orderInCategory="2">
++          <menu>
++              <item android:id="@+id/enable_adblock_id"
++                  android:title="@string/menu_enable_adblock" />
++              <item android:id="@+id/enable_adblock_check_id"
++                  android:title="@null"
++                  android:checkable="true" />
++          </menu>
++        </item>
++
+         <!-- Title is intentionally left blank in xml and will be set in java. -->
+         <item android:id="@+id/open_in_browser_id"
+             android:title=""
+diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
+--- a/chrome/android/java/res/menu/main_menu.xml
++++ b/chrome/android/java/res/menu/main_menu.xml
+@@ -84,6 +84,17 @@
+           </menu>
+         </item>
+ 
++        <item android:id="@+id/enable_adblock_row_menu_id"
++            android:title="@null">
++          <menu>
++              <item android:id="@+id/enable_adblock_id"
++                  android:title="@string/menu_enable_adblock" />
++              <item android:id="@+id/enable_adblock_check_id"
++                  android:title="@null"
++                  android:checkable="true" />
++          </menu>
++        </item>
++
+         <item android:id="@+id/reader_mode_prefs_id"
+             android:title="@string/menu_reader_mode_prefs"
+             android:icon="@drawable/reader_mode_prefs_icon" />
+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>
+             RecordUserAction.record("MobileMenuRequestEnableJavascript");
+         } else if (id == R.id.reader_mode_prefs_id) {
+             DomDistillerUIUtils.openSettings(currentTab.getWebContents());
++        } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) {
++            final boolean reloadOnChange = !currentTab.isNativePage();
++            final boolean adblockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
++            PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS, adblockEnabled);
++            if (reloadOnChange) {
++                currentTab.reload();
++            }
++            RecordUserAction.record("MobileMenuRequestEnableAdBlock");
+         } else {
+             return false;
+         }
+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
+                 reportNewTabShortcutUsed(true);
+                 getTabCreator(true).launchNTP();
+             }
++        } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) {
++            final boolean reloadOnChange = !currentTab.isNativePage();
++            final boolean adblockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
++            PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS, adblockEnabled);
++            if (reloadOnChange) {
++                currentTab.reload();
++            }
++            RecordUserAction.record("MobileMenuRequestEnableAdBlock");
+         } else if (id == R.id.all_bookmarks_menu_id) {
+             if (currentTab != null) {
+                 getCompositorViewHolder().hideKeyboard(() -> {
+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;
+ 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
+             // Prepare translate menu button.
+             prepareTranslateMenuItem(menu, currentTab);
+ 
++            updateEnableAdBlockMenuItem(menu, currentTab);
++
+             // 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
+                 PrefServiceBridge.getInstance().isIncognitoModeManaged());
+     }
+ 
++     /**
++     * Updates the enable AdBlock item's state.
++     *
++     * @param menu {@link Menu} for enable adblock
++     * @param currentTab      Current tab being displayed.
++     */
++    protected void updateEnableAdBlockMenuItem(
++            Menu menu, Tab currentTab) {
++        MenuItem enableMenuRow = menu.findItem(R.id.enable_adblock_row_menu_id);
++        MenuItem enableMenuLabel = menu.findItem(R.id.enable_adblock_id);
++        MenuItem enableMenuCheck = menu.findItem(R.id.enable_adblock_check_id);
++
++
++        // Hide enable adblock on all chrome:// pages except for the NTP.
++        String url = currentTab.getUrl();
++        boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
++                || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
++        // Also hide enable javascsript on Reader Mode.
++        boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
++
++        boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
++        enableMenuRow.setVisible(itemVisible);
++        if (!itemVisible) return;
++
++        boolean adBlockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
++
++        // Mark the checkbox if adblock is globally activate.
++        enableMenuCheck.setChecked(adBlockEnabled);
++
++        // This title doesn't seem to be displayed by Android, but it is used to set up
++        // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
++        enableMenuLabel.setTitleCondensed(adBlockEnabled
++                        ? mContext.getString(R.string.menu_enable_adblock_on)
++                        : mContext.getString(R.string.menu_enable_adblock_off));
++    }
++
++
+     /**
+      * Sets the visibility and labels of the "Add to Home screen" and "Open WebAPK" menu items.
+      */
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
+@@ -201,6 +201,8 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
+                 }
+             }
+ 
++            updateEnableAdBlockMenuItem(menu, currentTab);
++
+             updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
+             updateEnableJavascriptMenuItem(menu, currentTab);
+             prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible);
+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
+@@ -2964,6 +2964,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>
++
++      <message name="IDS_MENU_ENABLE_ADBLOCK" desc="Menu item in Chrome's overflow/options menu. If this menu item is unselected, Bromite will disable AdBlock engine for the page. [CHAR-LIMIT=27]">
++        Enable AdBlock
++      </message>
++      <message name="IDS_MENU_ENABLE_ADBLOCK_ON" desc="Accessibility description for when Enable AdBlock is selected.">
++        Turn off AdBlock
++      </message>
++      <message name="IDS_MENU_ENABLE_ADBLOCK_OFF" desc="Accessibility description for when Enable AdBlock is unselected.">
++        Turn on AdBlock
++      </message>
++
+       <message name="IDS_MENU_READER_MODE_PREFS" desc="Menu item to show reader mode preferences pane, which allows users to change the appearance (font size, theme, etc.) of the page. [CHAR-LIMIT=27]">
+         Appearance
+       </message>
+-- 
+2.11.0
+

+ 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
-@@ -2163,6 +2163,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2160,6 +2160,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
-@@ -1804,6 +1804,14 @@ public class ChromeTabbedActivity
+@@ -1751,6 +1751,14 @@ public class ChromeTabbedActivity
                  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
-@@ -241,6 +241,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -242,6 +242,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()));
-@@ -438,6 +440,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
+@@ -437,6 +439,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
-@@ -3055,6 +3055,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
+@@ -2944,6 +2944,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>

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

@@ -1,19 +1,19 @@
-From: samartnik <artem@brave.com>
-Date: Tue, 17 Apr 2018 17:14:00 +0300
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sat, 7 Sep 2019 15:07:42 +0200
 Subject: Add option to not persist tabs across sessions
 
 ---
- chrome/android/java/res/values/values.xml                  |  3 +++
- chrome/android/java/res/xml/privacy_preferences.xml        |  5 +++++
- .../org/chromium/chrome/browser/ChromeTabbedActivity.java  |  4 +++-
- .../browser/preferences/privacy/PrivacyPreferences.java    | 14 ++++++++++++++
- chrome/android/java/strings/android_chrome_strings.grd     |  6 ++++++
- 5 files changed, 31 insertions(+), 1 deletion(-)
+ chrome/android/java/res/values/values.xml                    |  3 +++
+ chrome/android/java/res/xml/privacy_preferences.xml          |  5 +++++
+ .../org/chromium/chrome/browser/ChromeTabbedActivity.java    |  4 +++-
+ .../browser/preferences/privacy/PrivacyPreferences.java      | 12 ++++++++++++
+ chrome/android/java/strings/android_chrome_strings.grd       |  6 ++++++
+ 5 files changed, 29 insertions(+), 1 deletion(-)
 
 diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
 --- a/chrome/android/java/res/values/values.xml
 +++ b/chrome/android/java/res/values/values.xml
-@@ -67,6 +67,9 @@
+@@ -66,6 +66,9 @@
      <!-- TODO(peconn): Add help section. -->
      <!-- <string name="help_context_suggestions">mobile_content_suggestions</string> -->
  
@@ -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
-@@ -13,6 +13,11 @@
-         android:summary="@string/navigation_error_summary"
-         android:defaultValue="true" />
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+@@ -28,6 +28,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
 +        android:key="close_tabs_on_exit"
 +        android:title="@string/close_tabs_on_exit_title"
 +        android:summary="@string/close_tabs_on_exit_summary"
 +        android:defaultValue="false" />
-+    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
-         android:key="search_suggestions"
-         android:title="@string/search_suggestions_title"
-         android:summary="@string/search_suggestions_summary"
+     <android.support.v7.preference.Preference
+         android:key="clear_browsing_data"
+         android:title="@string/clear_browsing_data_title"
 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
-@@ -1158,8 +1158,10 @@ public class ChromeTabbedActivity
+@@ -1132,8 +1132,10 @@ public class ChromeTabbedActivity
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -62,53 +62,51 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pri
  
 +import android.content.SharedPreferences;
  import android.os.Bundle;
- import android.preference.CheckBoxPreference;
- import android.preference.Preference;
-@@ -15,6 +16,7 @@ import android.view.Menu;
+ import android.support.graphics.drawable.VectorDrawableCompat;
+ import android.support.v7.preference.CheckBoxPreference;
+@@ -13,6 +14,7 @@ import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  
 +import org.chromium.base.ContextUtils;
  import org.chromium.base.BuildInfo;
- import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.chrome.R;
-@@ -43,6 +45,7 @@ public class PrivacyPreferences extends PreferenceFragment
-     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";
+ import org.chromium.chrome.browser.help.HelpAndFeedback;
+@@ -32,6 +34,7 @@ import org.chromium.ui.text.SpanApplier;
+  */
+ public class PrivacyPreferences
+         extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
 +    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_USAGE_AND_CRASH_REPORTING = "usage_and_crash_reports";
-     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
-@@ -67,6 +70,11 @@ public class PrivacyPreferences extends PreferenceFragment
-                 (ChromeBaseCheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
-         canMakePaymentPref.setOnPreferenceChangeListener(this);
- 
-+        ChromeBaseCheckBoxPreference closeTabsOnExitPref =
-+                (ChromeBaseCheckBoxPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
-+        closeTabsOnExitPref.setOnPreferenceChangeListener(this);
-+        closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
-+
-         ChromeBaseCheckBoxPreference networkPredictionPref =
-                 (ChromeBaseCheckBoxPreference) findPreference(PREF_NETWORK_PREDICTIONS);
-         networkPredictionPref.setChecked(prefServiceBridge.getNetworkPredictionEnabled());
-@@ -126,6 +134,12 @@ public class PrivacyPreferences extends PreferenceFragment
+     private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
+     private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
+     private static final String PREF_USAGE_STATS = "usage_stats_reporting";
+@@ -77,6 +80,10 @@ public class PrivacyPreferences
+             sharedPreferencesEditor.apply();
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
-             recordNetworkPredictionEnablingUMA((boolean) newValue);
 +        } else if (PREF_CLOSE_TABS_ON_EXIT.equals(key)) {
-+//            PrefServiceBridge.getInstance().setBoolean(
-+//                    Pref.CLOSE_TABS_ON_EXIT_ENABLED, (boolean) newValue);
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean)newValue);
 +            sharedPreferencesEditor.apply();
-         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
-             PrefServiceBridge.getInstance().setResolveNavigationErrorEnabled((boolean) newValue);
-         } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
+         }
+ 
+         return true;
+@@ -114,6 +121,11 @@ public class PrivacyPreferences
+             doNotTrackPref.setSummary(prefServiceBridge.isDoNotTrackEnabled() ? textOn : textOff);
+         }
+ 
++        ChromeBaseCheckBoxPreferenceCompat closeTabsOnExitPref =
++                (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_CLOSE_TABS_ON_EXIT);
++        closeTabsOnExitPref.setOnPreferenceChangeListener(this);
++        closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
++
+         Preference usageStatsPref = findPreference(PREF_USAGE_STATS);
+         if (usageStatsPref != null) {
+             if (BuildInfo.isAtLeastQ() && prefServiceBridge.getBoolean(Pref.USAGE_STATS_ENABLED)) {
 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
-@@ -3890,6 +3890,12 @@ The site does NOT gain access to the camera. The camera images are only visible
+@@ -3768,6 +3768,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>

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

@@ -6,27 +6,29 @@ Use about:blank as default homepage
 ---
  .../android/java/res/xml/homepage_preferences.xml  |  5 +++++
  .../partnercustomizations/HomepageManager.java     | 24 ++++++++++++++++++++--
- .../browser/preferences/HomepagePreferences.java   | 14 ++++++++++++-
+ .../browser/preferences/HomepagePreferences.java   | 10 +++++++++
  .../chrome/browser/tabmodel/TabCreatorManager.java | 11 ++++++++--
  .../java/strings/android_chrome_strings.grd        |  3 +++
  chrome/browser/ui/browser_ui_prefs.cc              |  2 ++
  chrome/common/pref_names.cc                        |  4 ++++
  chrome/common/pref_names.h                         |  1 +
- 8 files changed, 59 insertions(+), 5 deletions(-)
+ 8 files changed, 56 insertions(+), 4 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml
 --- a/chrome/android/java/res/xml/homepage_preferences.xml
 +++ b/chrome/android/java/res/xml/homepage_preferences.xml
-@@ -16,4 +16,9 @@
-         android:title="@string/options_homepage_edit_label"
-         android:fragment="org.chromium.chrome.browser.preferences.HomepageEditor" />
+@@ -7,6 +7,11 @@
+     xmlns:android="http://schemas.android.com/apk/res/android">
  
-+    <org.chromium.chrome.browser.preferences.ChromeSwitchPreference
+     <org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat
 +        android:key="ntp_is_homepage_switch"
 +        android:summaryOn="@string/options_ntp_is_homepage_label"
 +        android:summaryOff="@string/options_ntp_is_homepage_label" />
 +
- </PreferenceScreen>
++    <org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat
+         android:key="homepage_switch"
+         android:summaryOn="@string/text_on"
+         android:summaryOff="@string/text_off" />
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
@@ -92,31 +94,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomiz
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
-@@ -19,9 +19,10 @@ import org.chromium.chrome.browser.util.FeatureUtilities;
- public class HomepagePreferences extends PreferenceFragment {
-     private static final String PREF_HOMEPAGE_SWITCH = "homepage_switch";
+@@ -20,6 +20,7 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
+     @VisibleForTesting
+     public static final String PREF_HOMEPAGE_SWITCH = "homepage_switch";
      private static final String PREF_HOMEPAGE_EDIT = "homepage_edit";
 +    private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
  
      private HomepageManager mHomepageManager;
--    private ChromeSwitchPreference mHomepageSwitch;
-+    private ChromeSwitchPreference mHomepageSwitch, mNTPIsHomepageSwitch;
      private Preference mHomepageEdit;
- 
-     @Override
-@@ -47,6 +48,17 @@ public class HomepagePreferences extends PreferenceFragment {
-             }
+@@ -42,6 +43,15 @@ public class HomepagePreferences extends PreferenceFragmentCompat {
+             return true;
          });
  
-+        mNTPIsHomepageSwitch = (ChromeSwitchPreference) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
++        ChromeSwitchPreferenceCompat mNTPIsHomepageSwitch =
++                (ChromeSwitchPreferenceCompat) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
 +        boolean isHomepageNTPEnabled = mHomepageManager.getPrefNTPIsHomepageEnabled();
 +        mNTPIsHomepageSwitch.setChecked(isHomepageNTPEnabled);
-+        mNTPIsHomepageSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-+            @Override
-+            public boolean onPreferenceChange(Preference preference, Object newValue) {
-+                mHomepageManager.setPrefNTPIsHomepageEnabled((boolean) newValue);
-+                return true;
-+            }
++        mNTPIsHomepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
++            mHomepageManager.setPrefNTPIsHomepageEnabled((boolean) newValue);
++            return true;
 +        });
 +
          mHomepageEdit = findPreference(PREF_HOMEPAGE_EDIT);
@@ -125,14 +121,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Hom
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
-@@ -10,6 +10,7 @@ import org.chromium.base.TraceEvent;
- import org.chromium.chrome.browser.UrlConstants;
- import org.chromium.chrome.browser.tab.Tab;
- import org.chromium.chrome.browser.tab.TabState;
-+import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
+@@ -12,6 +12,7 @@ import org.chromium.chrome.browser.tab.TabState;
+ import org.chromium.chrome.browser.util.UrlConstants;
  import org.chromium.content_public.browser.LoadUrlParams;
  import org.chromium.content_public.browser.WebContents;
++import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
  
+ /**
+  * An interface to return a {@link TabCreator} either for regular or incognito tabs.
 @@ -85,12 +86,18 @@ public interface TabCreatorManager {
          }
  
@@ -157,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
-@@ -663,6 +663,9 @@ CHAR-LIMIT guidelines:
+@@ -666,6 +666,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>
@@ -182,7 +178,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/chrome/common/pref_names.cc
-@@ -58,6 +58,10 @@ const char kForceEphemeralProfiles[] = "profile.ephemeral_mode";
+@@ -59,6 +59,10 @@ const char kForceEphemeralProfiles[] = "profile.ephemeral_mode";
  // A boolean specifying whether the New Tab page is the home page or not.
  const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage";
  
@@ -196,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
-@@ -301,6 +301,7 @@ extern const char kAppReinstallRecommendationEnabled[];
- extern const char kStartupBrowserWindowLaunchSuppressed[];
+@@ -314,6 +314,7 @@ extern const char kDeviceWebUsbAllowDevicesForUrls[];
+ extern const char kLoginExtensionApiDataForNextLoginAttempt[];
  #endif  // defined(OS_CHROMEOS)
  extern const char kShowHomeButton[];
 +extern const char kNewTabPageIsHomePage[];

+ 19 - 19
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
-@@ -39,6 +39,9 @@
+@@ -36,6 +36,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.ChromeBaseCheckBoxPreference
++    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
 +        android:key="cookies_session_only"
 +        android:title="@string/allow_cookies_session_only_title"
 +        android:summary="@string/allow_cookies_session_only_summary"
 +        android:defaultValue="true"
 +        android:persistent="false" />
      <!-- A toggle for enabling vibration in notifications. -->
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
          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
       */
-@@ -627,6 +631,10 @@ public class PrefServiceBridge {
+@@ -620,6 +624,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);
      }
-@@ -1075,6 +1083,7 @@ public class PrefServiceBridge {
+@@ -1070,6 +1078,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();
-@@ -1121,6 +1130,7 @@ public class PrefServiceBridge {
+@@ -1115,6 +1124,7 @@ public class PrefServiceBridge {
      private native void nativeSetAutoplayEnabled(boolean enabled);
      private native void nativeSetAllowCookiesEnabled(boolean enabled);
      private native void nativeSetBackgroundSyncEnabled(boolean enabled);
@@ -85,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
-@@ -127,6 +127,7 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -127,6 +127,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
  
      // Keys for category-specific preferences (toggle, link, button etc.), dynamically shown.
      public static final String THIRD_PARTY_COOKIES_TOGGLE_KEY = "third_party_cookies";
@@ -93,7 +93,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
      public static final String NOTIFICATIONS_VIBRATE_TOGGLE_KEY = "notifications_vibrate";
      public static final String EXPLAIN_PROTECTED_MEDIA_KEY = "protected_content_learn_more";
      private static final String ADD_EXCEPTION_KEY = "add_exception";
-@@ -470,6 +471,7 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -484,6 +485,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
                  if (type == SiteSettingsCategory.Type.COOKIES
                          && !FeatureUtilities.isNoTouchModeEnabled()) {
                      updateThirdPartyCookiesCheckBox();
@@ -101,7 +101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
                  } else if (type == SiteSettingsCategory.Type.NOTIFICATIONS) {
                      updateNotificationsVibrateCheckBox();
                  }
-@@ -508,6 +510,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -523,6 +525,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              int setting = (int) newValue;
              prefServiceBridge.setContentSetting(mCategory.getContentSettingsType(), setting);
              getInfoForOrigins();
@@ -110,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
          } else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) {
              prefServiceBridge.setBlockThirdPartyCookiesEnabled(((boolean) newValue));
          } else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) {
-@@ -821,6 +825,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -840,6 +844,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
          TriStateSiteSettingsPreference triStateToggle =
                  (TriStateSiteSettingsPreference) screen.findPreference(TRI_STATE_TOGGLE_KEY);
          Preference thirdPartyCookies = screen.findPreference(THIRD_PARTY_COOKIES_TOGGLE_KEY);
@@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
          Preference notificationsVibrate = screen.findPreference(NOTIFICATIONS_VIBRATE_TOGGLE_KEY);
          Preference explainProtectedMediaKey = screen.findPreference(EXPLAIN_PROTECTED_MEDIA_KEY);
          PreferenceGroup allowedGroup = (PreferenceGroup) screen.findPreference(ALLOWED_GROUP);
-@@ -852,6 +858,7 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -871,6 +877,7 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
  
          if (hideSecondaryToggles) {
              screen.removePreference(thirdPartyCookies);
@@ -127,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
              screen.removePreference(notificationsVibrate);
              screen.removePreference(explainProtectedMediaKey);
              screen.removePreference(allowedGroup);
-@@ -862,14 +869,17 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -881,14 +888,17 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              return;
          }
  
@@ -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.
-@@ -981,6 +991,15 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -1005,6 +1015,15 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
                  preference -> PrefServiceBridge.getInstance().isBlockThirdPartyCookiesManaged());
      }
  
 +    private void updateCookiesSessionOnlyCheckBox() {
-+        ChromeBaseCheckBoxPreference cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreference)
++        ChromeBaseCheckBoxPreferenceCompat cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreferenceCompat)
 +                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() {
-         ChromeBaseCheckBoxPreference preference =
-                 (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
+         ChromeBaseCheckBoxPreferenceCompat preference =
+                 (ChromeBaseCheckBoxPreferenceCompat) 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
-@@ -913,6 +913,12 @@ Your Google account may have other forms of browsing history like searches and a
+@@ -904,6 +904,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>
@@ -181,7 +181,7 @@ diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/and
 diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
 --- a/chrome/browser/android/preferences/pref_service_bridge.cc
 +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
-@@ -311,6 +311,17 @@ static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesEnabled(
+@@ -314,6 +314,17 @@ static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesEnabled(
    return GetPrefService()->GetBoolean(prefs::kBlockThirdPartyCookies);
  }
  
@@ -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) {
-@@ -768,6 +779,20 @@ static void JNI_PrefServiceBridge_SetBlockThirdPartyCookiesEnabled(
+@@ -771,6 +782,20 @@ static void JNI_PrefServiceBridge_SetBlockThirdPartyCookiesEnabled(
    GetPrefService()->SetBoolean(prefs::kBlockThirdPartyCookies, enabled);
  }
  

+ 0 - 862
build/patches/Allow-building-without-safebrowsing-for-Android.patch

@@ -1,862 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Tue, 18 Sep 2018 08:06:14 +0200
-Subject: Allow building without safebrowsing for Android
-
-Fix build from scratch (issue found by nikolowry)
----
- chrome/android/BUILD.gn                            |  1 -
- chrome/android/chrome_java_sources.gni             |  1 -
- .../android/java/res/xml/privacy_preferences.xml   |  8 -----
- .../preferences/privacy/PrivacyPreferences.java    | 40 ----------------------
- .../chrome/browser/webshare/ShareServiceImpl.java  |  6 ----
- .../chrome_browsing_data_remover_delegate.cc       | 10 ------
- chrome/browser/chrome_content_browser_client.cc    | 20 +----------
- .../file_type_policies_component_installer.cc      |  2 ++
- .../download/chrome_download_manager_delegate.cc   | 14 ++++++--
- .../download/chrome_download_manager_delegate.h    |  6 ++++
- chrome/browser/download/download_item_model.cc     | 10 ++++++
- chrome/browser/download/download_item_model.h      |  4 +++
- chrome/browser/download/download_prefs.cc          |  4 +++
- .../browser/download/download_target_determiner.cc | 22 ++++++++++++
- .../browser/download/download_target_determiner.h  |  6 ++++
- chrome/browser/download/download_target_info.cc    |  4 +++
- chrome/browser/download/download_target_info.h     |  4 +++
- chrome/browser/download/download_ui_model.cc       |  4 +++
- chrome/browser/download/download_ui_model.h        |  4 +++
- .../chrome_resource_dispatcher_host_delegate.cc    |  2 ++
- chrome/browser/net/chrome_network_delegate.cc      | 35 ++-----------------
- chrome/browser/safe_browsing/BUILD.gn              |  1 -
- chrome/common/safe_browsing/BUILD.gn               | 15 --------
- 23 files changed, 87 insertions(+), 136 deletions(-)
-
-diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
---- a/chrome/android/BUILD.gn
-+++ b/chrome/android/BUILD.gn
-@@ -2634,7 +2634,6 @@ generate_jni("chrome_jni_headers") {
-     "java/src/org/chromium/chrome/browser/rappor/RapporServiceBridge.java",
-     "java/src/org/chromium/chrome/browser/rlz/RevenueStats.java",
-     "java/src/org/chromium/chrome/browser/rlz/RlzPingHandler.java",
--    "java/src/org/chromium/chrome/browser/safe_browsing/FileTypePolicies.java",
-     "java/src/org/chromium/chrome/browser/search_engines/TemplateUrl.java",
-     "java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java",
-     "java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationManager.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
-@@ -1357,7 +1357,6 @@ chrome_java_sources = [
-   "java/src/org/chromium/chrome/browser/rappor/RapporServiceBridge.java",
-   "java/src/org/chromium/chrome/browser/rlz/RevenueStats.java",
-   "java/src/org/chromium/chrome/browser/rlz/RlzPingHandler.java",
--  "java/src/org/chromium/chrome/browser/safe_browsing/FileTypePolicies.java",
-   "java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java",
-   "java/src/org/chromium/chrome/browser/search_engines/TemplateUrl.java",
-   "java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.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
-@@ -18,14 +18,6 @@
-         android:summary="@string/search_suggestions_summary"
-         android:defaultValue="true" />
-     <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.ChromeBaseCheckBoxPreference
--        android:key="safe_browsing"
--        android:title="@string/safe_browsing_title"
--        android:summary="@string/safe_browsing_summary" />
--    <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
-         android:key="network_predictions"
-         android:title="@string/network_predictions_title"
-         android:summary="@string/network_predictions_summary"
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-@@ -39,9 +39,6 @@ public class PrivacyPreferences extends PreferenceFragment
-         implements OnPreferenceChangeListener {
-     private static final String PREF_NAVIGATION_ERROR = "navigation_error";
-     private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
--    private static final String PREF_SAFE_BROWSING_SCOUT_REPORTING =
--            "safe_browsing_scout_reporting";
--    private static final String PREF_SAFE_BROWSING = "safe_browsing";
-     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";
-@@ -79,8 +76,6 @@ public class PrivacyPreferences extends PreferenceFragment
-             // Remove preferences that were migrated to SyncAndServicesPreferences.
-             preferenceScreen.removePreference(findPreference(PREF_NAVIGATION_ERROR));
-             preferenceScreen.removePreference(findPreference(PREF_SEARCH_SUGGESTIONS));
--            preferenceScreen.removePreference(findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING));
--            preferenceScreen.removePreference(findPreference(PREF_SAFE_BROWSING));
-             preferenceScreen.removePreference(findPreference(PREF_CONTEXTUAL_SEARCH));
-             preferenceScreen.removePreference(findPreference(PREF_USAGE_AND_CRASH_REPORTING));
- 
-@@ -114,17 +109,6 @@ public class PrivacyPreferences extends PreferenceFragment
-             preferenceScreen.removePreference(findPreference(PREF_CONTEXTUAL_SEARCH));
-         }
- 
--        // Listen to changes to the Extended Reporting pref.
--        ChromeBaseCheckBoxPreference scoutReportingPref =
--                (ChromeBaseCheckBoxPreference) findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING);
--        scoutReportingPref.setOnPreferenceChangeListener(this);
--        scoutReportingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
--
--        ChromeBaseCheckBoxPreference safeBrowsingPref =
--                (ChromeBaseCheckBoxPreference) findPreference(PREF_SAFE_BROWSING);
--        safeBrowsingPref.setOnPreferenceChangeListener(this);
--        safeBrowsingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
--
-         updateSummaries();
-     }
- 
-@@ -133,11 +117,6 @@ public class PrivacyPreferences extends PreferenceFragment
-         String key = preference.getKey();
-         if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
-             PrefServiceBridge.getInstance().setSearchSuggestEnabled((boolean) newValue);
--        } else if (PREF_SAFE_BROWSING.equals(key)) {
--            PrefServiceBridge.getInstance().setSafeBrowsingEnabled((boolean) newValue);
--        } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--            PrefServiceBridge.getInstance().setSafeBrowsingExtendedReportingEnabled(
--                    (boolean) newValue);
-         } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
-             PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
-             recordNetworkPredictionEnablingUMA((boolean) newValue);
-@@ -186,19 +165,6 @@ public class PrivacyPreferences extends PreferenceFragment
-             searchSuggestionsPref.setChecked(prefServiceBridge.isSearchSuggestEnabled());
-         }
- 
--        CheckBoxPreference extendedReportingPref =
--                (CheckBoxPreference) findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING);
--        if (extendedReportingPref != null) {
--            extendedReportingPref.setChecked(
--                    prefServiceBridge.isSafeBrowsingExtendedReportingEnabled());
--        }
--
--        CheckBoxPreference safeBrowsingPref =
--                (CheckBoxPreference) findPreference(PREF_SAFE_BROWSING);
--        if (safeBrowsingPref != null) {
--            safeBrowsingPref.setChecked(prefServiceBridge.isSafeBrowsingEnabled());
--        }
--
-         CheckBoxPreference canMakePaymentPref =
-                 (CheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
-         if (canMakePaymentPref != null) {
-@@ -254,12 +220,6 @@ public class PrivacyPreferences extends PreferenceFragment
-             if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
-                 return prefs.isSearchSuggestManaged();
-             }
--            if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--                return prefs.isSafeBrowsingExtendedReportingManaged();
--            }
--            if (PREF_SAFE_BROWSING.equals(key)) {
--                return prefs.isSafeBrowsingManaged();
--            }
-             if (PREF_NETWORK_PREDICTIONS.equals(key)) {
-                 return prefs.isNetworkPredictionManaged();
-             }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java
-@@ -18,7 +18,6 @@ import org.chromium.base.task.AsyncTask;
- import org.chromium.base.task.PostTask;
- import org.chromium.base.task.TaskRunner;
- import org.chromium.base.task.TaskTraits;
--import org.chromium.chrome.browser.safe_browsing.FileTypePolicies;
- import org.chromium.chrome.browser.share.ShareHelper;
- import org.chromium.chrome.browser.share.ShareParams;
- import org.chromium.content_public.browser.WebContents;
-@@ -194,11 +193,6 @@ public class ShareServiceImpl implements ShareService {
-         }
- 
-         for (SharedFile file : files) {
--            RecordHistogram.recordSparseHistogram(
--                    "WebShare.Unverified", FileTypePolicies.umaValueForFile(file.name));
--        }
--
--        for (SharedFile file : files) {
-             if (isDangerousFilename(file.name) || isDangerousMimeType(file.blob.contentType)) {
-                 Log.i(TAG,
-                         "Cannot share potentially dangerous \"" + file.blob.contentType
-diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
---- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
-+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
-@@ -250,16 +250,6 @@ bool DoesOriginMatchEmbedderMask(int origin_type_mask,
-   return false;
- }
- 
--// Callback for when cookies have been deleted. Invokes NotifyIfDone.
--// Receiving |cookie_manager| as a parameter so that the receive pipe is
--// not deleted before the response is received.
--void OnClearedCookies(base::OnceClosure done,
--                      network::mojom::CookieManagerPtr cookie_manager,
--                      uint32_t num_deleted) {
--  DCHECK_CURRENTLY_ON(BrowserThread::UI);
--  std::move(done).Run();
--}
--
- }  // namespace
- 
- ChromeBrowsingDataRemoverDelegate::ChromeBrowsingDataRemoverDelegate(
-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
-@@ -120,7 +120,6 @@
- #include "chrome/browser/resource_coordinator/background_tab_navigation_throttle.h"
- #include "chrome/browser/safe_browsing/certificate_reporting_service.h"
- #include "chrome/browser/safe_browsing/certificate_reporting_service_factory.h"
--#include "chrome/browser/safe_browsing/safe_browsing_navigation_throttle.h"
- #include "chrome/browser/safe_browsing/safe_browsing_service.h"
- #include "chrome/browser/safe_browsing/ui_manager.h"
- #include "chrome/browser/safe_browsing/url_checker_delegate_impl.h"
-@@ -4329,11 +4328,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
-       PreviewsLitePageDecider::MaybeCreateThrottleFor(handle);
-   if (previews_lite_page_throttle)
-     throttles.push_back(std::move(previews_lite_page_throttle));
--  if (base::FeatureList::IsEnabled(safe_browsing::kCommittedSBInterstitials)) {
--    throttles.push_back(
--        std::make_unique<safe_browsing::SafeBrowsingNavigationThrottle>(
--            handle));
--  }
- 
- #if defined(OS_WIN) || defined(OS_MACOSX) || \
-     (defined(OS_LINUX) && !defined(OS_CHROMEOS))
-@@ -5290,19 +5284,7 @@ ChromeContentBrowserClient::GetSafeBrowsingUrlCheckerDelegate(
-     content::ResourceContext* resource_context) {
-   DCHECK_CURRENTLY_ON(BrowserThread::IO);
- 
--  ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
--  if (!io_data->safe_browsing_enabled()->GetValue())
--    return nullptr;
--
--  // |safe_browsing_service_| may be unavailable in tests.
--  if (safe_browsing_service_ && !safe_browsing_url_checker_delegate_) {
--    safe_browsing_url_checker_delegate_ =
--        base::MakeRefCounted<safe_browsing::UrlCheckerDelegateImpl>(
--            safe_browsing_service_->database_manager(),
--            safe_browsing_service_->ui_manager());
--  }
--
--  return safe_browsing_url_checker_delegate_.get();
-+  return nullptr;
- }
- 
- base::Optional<std::string>
-diff --git a/chrome/browser/component_updater/file_type_policies_component_installer.cc b/chrome/browser/component_updater/file_type_policies_component_installer.cc
---- a/chrome/browser/component_updater/file_type_policies_component_installer.cc
-+++ b/chrome/browser/component_updater/file_type_policies_component_installer.cc
-@@ -18,7 +18,9 @@
- #include "base/stl_util.h"
- #include "base/task/post_task.h"
- #include "base/version.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- #include "components/component_updater/component_updater_paths.h"
- 
- using component_updater::ComponentUpdateService;
-diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc
---- a/chrome/browser/download/chrome_download_manager_delegate.cc
-+++ b/chrome/browser/download/chrome_download_manager_delegate.cc
-@@ -40,8 +40,10 @@
- #include "chrome/browser/download/save_package_file_picker.h"
- #include "chrome/browser/platform_util.h"
- #include "chrome/browser/profiles/profile.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h"
- #include "chrome/browser/safe_browsing/safe_browsing_service.h"
-+#endif
- #include "chrome/browser/ui/chrome_pages.h"
- #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
- #include "chrome/common/buildflags.h"
-@@ -50,7 +52,9 @@
- #include "chrome/common/chrome_paths.h"
- #include "chrome/common/pdf_util.h"
- #include "chrome/common/pref_names.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- #include "chrome/grit/generated_resources.h"
- #include "components/download/public/common/download_features.h"
- #include "components/download/public/common/download_interrupt_reasons.h"
-@@ -110,8 +114,10 @@ using content::DownloadManager;
- using download::DownloadItem;
- using download::DownloadPathReservationTracker;
- using download::PathValidationResult;
-+#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::DownloadFileType;
- using safe_browsing::DownloadProtectionService;
-+#endif
- 
- namespace {
- 
-@@ -762,19 +768,19 @@ ChromeDownloadManagerDelegate::ApplicationClientIdForFileScanning() const {
-   return std::string(chrome::kApplicationClientIDStringForAVScanning);
- }
- 
-+#if defined(FULL_SAFE_BROWSING)
- DownloadProtectionService*
-     ChromeDownloadManagerDelegate::GetDownloadProtectionService() {
-   DCHECK_CURRENTLY_ON(BrowserThread::UI);
--#if defined(FULL_SAFE_BROWSING)
-   safe_browsing::SafeBrowsingService* sb_service =
-       g_browser_process->safe_browsing_service();
-   if (sb_service && sb_service->download_protection_service() &&
-       profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) {
-     return sb_service->download_protection_service();
-   }
--#endif
-   return nullptr;
- }
-+#endif
- 
- void ChromeDownloadManagerDelegate::ShouldBlockDownload(
-     download::DownloadItem* download,
-@@ -1225,13 +1231,17 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDetermined(
-       DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
- #endif
- 
-+#if defined(FULL_SAFE_BROWSING)
-     DownloadItemModel(item).SetDangerLevel(target_info->danger_level);
-+#endif
-   }
-+#if defined(FULL_SAFE_BROWSING)
-   if (ShouldBlockFile(target_info->danger_type, item)) {
-     target_info->result = download::DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED;
-     // A dangerous type would take precendence over the blocking of the file.
-     target_info->danger_type = download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS;
-   }
-+#endif
- 
-   if (base::FeatureList::IsEnabled(
-           download::features::kPreventDownloadsWithSamePath)) {
-diff --git a/chrome/browser/download/chrome_download_manager_delegate.h b/chrome/browser/download/chrome_download_manager_delegate.h
---- a/chrome/browser/download/chrome_download_manager_delegate.h
-+++ b/chrome/browser/download/chrome_download_manager_delegate.h
-@@ -21,8 +21,10 @@
- #include "build/build_config.h"
- #include "chrome/browser/download/download_target_determiner_delegate.h"
- #include "chrome/browser/download/download_target_info.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h"
- #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h"
-+#endif
- #include "components/download/public/common/download_danger_type.h"
- #include "components/download/public/common/download_item.h"
- #include "components/download/public/common/download_path_reservation_tracker.h"
-@@ -134,8 +136,10 @@ class ChromeDownloadManagerDelegate
-   DownloadPrefs* download_prefs() { return download_prefs_.get(); }
- 
-  protected:
-+#if defined(FULL_SAFE_BROWSING)
-   virtual safe_browsing::DownloadProtectionService*
-       GetDownloadProtectionService();
-+#endif
- 
-   // Show file picker for |download|.
-   virtual void ShowFilePickerForDownload(
-@@ -205,9 +209,11 @@ class ChromeDownloadManagerDelegate
-                const content::NotificationSource& source,
-                const content::NotificationDetails& details) override;
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // Callback function after the DownloadProtectionService completes.
-   void CheckClientDownloadDone(uint32_t download_id,
-                                safe_browsing::DownloadCheckResult result);
-+#endif
- 
-   // Internal gateways for ShouldCompleteDownload().
-   bool IsDownloadReadyForCompletion(
-diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc
---- a/chrome/browser/download/download_item_model.cc
-+++ b/chrome/browser/download/download_item_model.cc
-@@ -23,9 +23,11 @@
- #include "chrome/browser/download/download_stats.h"
- #include "chrome/browser/download/offline_item_utils.h"
- #include "chrome/browser/profiles/profile.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h"
- #include "chrome/common/safe_browsing/download_file_types.pb.h"
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- #include "chrome/grit/chromium_strings.h"
- #include "chrome/grit/generated_resources.h"
- #include "components/download/public/common/download_danger_type.h"
-@@ -42,7 +44,9 @@
- 
- using base::TimeDelta;
- using download::DownloadItem;
-+#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::DownloadFileType;
-+#endif
- 
- namespace {
- 
-@@ -72,9 +76,11 @@ class DownloadItemModelData : public base::SupportsUserData::Data {
-   // for the file type.
-   bool should_prefer_opening_in_browser_;
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // Danger level of the file determined based on the file type and whether
-   // there was a user action associated with the download.
-   DownloadFileType::DangerLevel danger_level_;
-+#endif
- 
-   // Whether the download is currently being revived.
-   bool is_being_revived_;
-@@ -111,7 +117,9 @@ DownloadItemModelData::DownloadItemModelData()
-     : should_show_in_shelf_(true),
-       was_ui_notified_(false),
-       should_prefer_opening_in_browser_(false),
-+#if defined(FULL_SAFE_BROWSING)
-       danger_level_(DownloadFileType::NOT_DANGEROUS),
-+#endif
-       is_being_revived_(false) {}
- 
- } // namespace
-@@ -373,6 +381,7 @@ void DownloadItemModel::SetShouldPreferOpeningInBrowser(bool preference) {
-   data->should_prefer_opening_in_browser_ = preference;
- }
- 
-+#if defined(FULL_SAFE_BROWSING)
- DownloadFileType::DangerLevel DownloadItemModel::GetDangerLevel() const {
-   const DownloadItemModelData* data = DownloadItemModelData::Get(download_);
-   return data ? data->danger_level_ : DownloadFileType::NOT_DANGEROUS;
-@@ -383,6 +392,7 @@ void DownloadItemModel::SetDangerLevel(
-   DownloadItemModelData* data = DownloadItemModelData::GetOrCreate(download_);
-   data->danger_level_ = danger_level;
- }
-+#endif
- 
- bool DownloadItemModel::IsBeingRevived() const {
-   const DownloadItemModelData* data = DownloadItemModelData::Get(download_);
-diff --git a/chrome/browser/download/download_item_model.h b/chrome/browser/download/download_item_model.h
---- a/chrome/browser/download/download_item_model.h
-+++ b/chrome/browser/download/download_item_model.h
-@@ -11,7 +11,9 @@
- #include "base/macros.h"
- #include "base/strings/string16.h"
- #include "chrome/browser/download/download_ui_model.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/download_file_types.pb.h"
-+#endif
- #include "components/download/public/common/download_item.h"
- 
- // Implementation of DownloadUIModel that wrappers around a |DownloadItem*|. As
-@@ -48,9 +50,11 @@ class DownloadItemModel : public DownloadUIModel,
-   void SetWasUINotified(bool should_notify) override;
-   bool ShouldPreferOpeningInBrowser() const override;
-   void SetShouldPreferOpeningInBrowser(bool preference) override;
-+#if defined(FULL_SAFE_BROWSING)
-   safe_browsing::DownloadFileType::DangerLevel GetDangerLevel() const override;
-   void SetDangerLevel(
-       safe_browsing::DownloadFileType::DangerLevel danger_level) override;
-+#endif
-   void OpenUsingPlatformHandler() override;
-   bool IsBeingRevived() const override;
-   void SetIsBeingRevived(bool is_being_revived) override;
-diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc
---- a/chrome/browser/download/download_prefs.cc
-+++ b/chrome/browser/download/download_prefs.cc
-@@ -33,7 +33,9 @@
- #include "chrome/common/chrome_features.h"
- #include "chrome/common/chrome_paths.h"
- #include "chrome/common/pref_names.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- #include "components/download/public/common/download_item.h"
- #include "components/pref_registry/pref_registry_syncable.h"
- #include "components/prefs/pref_service.h"
-@@ -55,7 +57,9 @@
- using content::BrowserContext;
- using content::BrowserThread;
- using content::DownloadManager;
-+#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::FileTypePolicies;
-+#endif
- 
- namespace {
- 
-diff --git a/chrome/browser/download/download_target_determiner.cc b/chrome/browser/download/download_target_determiner.cc
---- a/chrome/browser/download/download_target_determiner.cc
-+++ b/chrome/browser/download/download_target_determiner.cc
-@@ -23,7 +23,9 @@
- #include "chrome/browser/history/history_service_factory.h"
- #include "chrome/browser/profiles/profile.h"
- #include "chrome/common/pref_names.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- #include "chrome/grit/generated_resources.h"
- #include "components/download/public/common/download_interrupt_reasons.h"
- #include "components/history/core/browser/history_service.h"
-@@ -59,13 +61,16 @@
- using content::BrowserThread;
- using download::DownloadItem;
- using download::DownloadPathReservationTracker;
-+#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::DownloadFileType;
-+#endif
- 
- namespace {
- 
- const base::FilePath::CharType kCrdownloadSuffix[] =
-     FILE_PATH_LITERAL(".crdownload");
- 
-+#if defined(FULL_SAFE_BROWSING)
- // Condenses the results from HistoryService::GetVisibleVisitCountToHost() to a
- // single bool. A host is considered visited before if prior visible visits were
- // found in history and the first such visit was earlier than the most recent
-@@ -79,6 +84,7 @@ void VisitCountsToVisitedBefore(
-       found_visits && count > 0 &&
-       (first_visit.LocalMidnight() < base::Time::Now().LocalMidnight()));
- }
-+#endif
- 
- #if defined(OS_WIN)
- // Keeps track of whether Adobe Reader is up to date.
-@@ -103,7 +109,9 @@ DownloadTargetDeterminer::DownloadTargetDeterminer(
-       create_target_directory_(false),
-       conflict_action_(conflict_action),
-       danger_type_(download->GetDangerType()),
-+#if defined(FULL_SAFE_BROWSING)
-       danger_level_(DownloadFileType::NOT_DANGEROUS),
-+#endif
-       virtual_path_(initial_virtual_path),
-       is_filetype_handled_safely_(false),
- #if defined(OS_ANDROID)
-@@ -262,8 +270,12 @@ DownloadTargetDeterminer::Result
-     // |suggested_filename| and Content-Disposition header have higher priority
-     // than the URL.
-     bool safe_file_ext =
-+#if defined(FULL_SAFE_BROWSING)
-         !safe_browsing::FileTypePolicies::GetInstance()->IsCheckedBinaryFile(
-             generated_filename);
-+#else
-+        true;
-+#endif
-     net::HttpContentDisposition content_disposition_header(
-         download_->GetContentDisposition(), referrer_charset);
-     bool should_replace_extension =
-@@ -781,6 +793,7 @@ DownloadTargetDeterminer::Result
-     return CONTINUE;
-   }
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // First determine the danger level assuming that the user doesn't have any
-   // prior visits to the referrer recoreded in history. The resulting danger
-   // level would be ALLOW_ON_USER_GESTURE if the level depends on the visit
-@@ -817,6 +830,7 @@ DownloadTargetDeterminer::Result
-   // invalid, then assume the referrer has not been visited before.
-   if (danger_type_ == download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)
-     danger_type_ = download::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE;
-+#endif
-   return CONTINUE;
- }
- 
-@@ -824,11 +838,13 @@ void DownloadTargetDeterminer::CheckVisitedReferrerBeforeDone(
-     bool visited_referrer_before) {
-   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-   DCHECK_EQ(STATE_DETERMINE_INTERMEDIATE_PATH, next_state_);
-+#if defined(FULL_SAFE_BROWSING)
-   danger_level_ = GetDangerLevel(
-       visited_referrer_before ? VISITED_REFERRER : NO_VISITS_TO_REFERRER);
-   if (danger_level_ != DownloadFileType::NOT_DANGEROUS &&
-       danger_type_ == download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)
-     danger_type_ = download::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE;
-+#endif
-   DoLoop();
- }
- 
-@@ -933,7 +949,9 @@ void DownloadTargetDeterminer::ScheduleCallbackAndDeleteSelf(
-             << " Intermediate:" << intermediate_path_.AsUTF8Unsafe()
-             << " Confirmation reason:" << static_cast<int>(confirmation_reason_)
-             << " Danger type:" << danger_type_
-+#if defined(FULL_SAFE_BROWSING)
-             << " Danger level:" << danger_level_
-+#endif
-             << " Result:" << static_cast<int>(result);
-   std::unique_ptr<DownloadTargetInfo> target_info(new DownloadTargetInfo);
- 
-@@ -945,7 +963,9 @@ void DownloadTargetDeterminer::ScheduleCallbackAndDeleteSelf(
-            ? DownloadItem::TARGET_DISPOSITION_PROMPT
-            : DownloadItem::TARGET_DISPOSITION_OVERWRITE);
-   target_info->danger_type = danger_type_;
-+#if defined(FULL_SAFE_BROWSING)
-   target_info->danger_level = danger_level_;
-+#endif
-   target_info->intermediate_path = intermediate_path_;
-   target_info->mime_type = mime_type_;
-   target_info->is_filetype_handled_safely = is_filetype_handled_safely_;
-@@ -1031,6 +1051,7 @@ bool DownloadTargetDeterminer::HasPromptedForPath() const {
-                                 DownloadItem::TARGET_DISPOSITION_PROMPT);
- }
- 
-+#if defined(FULL_SAFE_BROWSING)
- DownloadFileType::DangerLevel DownloadTargetDeterminer::GetDangerLevel(
-     PriorVisitsToReferrer visits) const {
-   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-@@ -1062,6 +1083,7 @@ DownloadFileType::DangerLevel DownloadTargetDeterminer::GetDangerLevel(
- 
-   return DownloadFileType::NOT_DANGEROUS;
- }
-+#endif
- 
- void DownloadTargetDeterminer::OnDownloadDestroyed(
-     DownloadItem* download) {
-diff --git a/chrome/browser/download/download_target_determiner.h b/chrome/browser/download/download_target_determiner.h
---- a/chrome/browser/download/download_target_determiner.h
-+++ b/chrome/browser/download/download_target_determiner.h
-@@ -16,7 +16,9 @@
- #include "build/build_config.h"
- #include "chrome/browser/download/download_target_determiner_delegate.h"
- #include "chrome/browser/download/download_target_info.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/download_file_types.pb.h"
-+#endif
- #include "components/download/public/common/download_danger_type.h"
- #include "components/download/public/common/download_item.h"
- #include "components/download/public/common/download_path_reservation_tracker.h"
-@@ -313,6 +315,7 @@ class DownloadTargetDeterminer : public download::DownloadItem::Observer {
-   // operation.
-   bool HasPromptedForPath() const;
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // Returns true if this download should show the "dangerous file" warning.
-   // Various factors are considered, such as the type of the file, whether a
-   // user action initiated the download, and whether the user has explicitly
-@@ -322,6 +325,7 @@ class DownloadTargetDeterminer : public download::DownloadItem::Observer {
-   // to true if the download requires explicit user consent.
-   safe_browsing::DownloadFileType::DangerLevel GetDangerLevel(
-       PriorVisitsToReferrer visits) const;
-+#endif
- 
-   // download::DownloadItem::Observer
-   void OnDownloadDestroyed(download::DownloadItem* download) override;
-@@ -334,7 +338,9 @@ class DownloadTargetDeterminer : public download::DownloadItem::Observer {
-   download::DownloadPathReservationTracker::FilenameConflictAction
-       conflict_action_;
-   download::DownloadDangerType danger_type_;
-+#if defined(FULL_SAFE_BROWSING)
-   safe_browsing::DownloadFileType::DangerLevel danger_level_;
-+#endif
-   base::FilePath virtual_path_;
-   base::FilePath local_path_;
-   base::FilePath intermediate_path_;
-diff --git a/chrome/browser/download/download_target_info.cc b/chrome/browser/download/download_target_info.cc
---- a/chrome/browser/download/download_target_info.cc
-+++ b/chrome/browser/download/download_target_info.cc
-@@ -4,12 +4,16 @@
- 
- #include "chrome/browser/download/download_target_info.h"
- 
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/file_type_policies.h"
-+#endif
- 
- DownloadTargetInfo::DownloadTargetInfo()
-     : target_disposition(download::DownloadItem::TARGET_DISPOSITION_OVERWRITE),
-       danger_type(download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS),
-+#if defined(FULL_SAFE_BROWSING)
-       danger_level(safe_browsing::DownloadFileType::NOT_DANGEROUS),
-+#endif
-       is_filetype_handled_safely(false),
-       result(download::DOWNLOAD_INTERRUPT_REASON_NONE) {}
- 
-diff --git a/chrome/browser/download/download_target_info.h b/chrome/browser/download/download_target_info.h
---- a/chrome/browser/download/download_target_info.h
-+++ b/chrome/browser/download/download_target_info.h
-@@ -8,7 +8,9 @@
- #include <string>
- 
- #include "base/files/file_path.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/download_file_types.pb.h"
-+#endif
- #include "components/download/public/common/download_danger_type.h"
- #include "components/download/public/common/download_interrupt_reasons.h"
- #include "components/download/public/common/download_item.h"
-@@ -32,6 +34,7 @@ struct DownloadTargetInfo {
-   // Danger type of the download.
-   download::DownloadDangerType danger_type;
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // The danger type of the download could be set to MAYBE_DANGEROUS_CONTENT if
-   // the file type is handled by SafeBrowsing. However, if the SafeBrowsing
-   // service is unable to verify whether the file is safe or not, we are on our
-@@ -57,6 +60,7 @@ struct DownloadTargetInfo {
-   //       SafeBrowsing may flag the file as being malicious, in which case the
-   //       malicious classification should take precedence.
-   safe_browsing::DownloadFileType::DangerLevel danger_level;
-+#endif
- 
-   // Suggested intermediate path. The downloaded bytes should be written to this
-   // path until all the bytes are available and the user has accepted a
-diff --git a/chrome/browser/download/download_ui_model.cc b/chrome/browser/download/download_ui_model.cc
---- a/chrome/browser/download/download_ui_model.cc
-+++ b/chrome/browser/download/download_ui_model.cc
-@@ -29,7 +29,9 @@
- 
- using base::TimeDelta;
- using download::DownloadItem;
-+#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::DownloadFileType;
-+#endif
- using offline_items_collection::FailState;
- 
- namespace {
-@@ -383,12 +385,14 @@ bool DownloadUIModel::ShouldPreferOpeningInBrowser() const {
- 
- void DownloadUIModel::SetShouldPreferOpeningInBrowser(bool preference) {}
- 
-+#if defined(FULL_SAFE_BROWSING)
- DownloadFileType::DangerLevel DownloadUIModel::GetDangerLevel() const {
-   return DownloadFileType::NOT_DANGEROUS;
- }
- 
- void DownloadUIModel::SetDangerLevel(
-     DownloadFileType::DangerLevel danger_level) {}
-+#endif
- 
- void DownloadUIModel::OpenUsingPlatformHandler() {}
- 
-diff --git a/chrome/browser/download/download_ui_model.h b/chrome/browser/download/download_ui_model.h
---- a/chrome/browser/download/download_ui_model.h
-+++ b/chrome/browser/download/download_ui_model.h
-@@ -14,7 +14,9 @@
- #include "base/strings/string16.h"
- #include "build/build_config.h"
- #include "chrome/browser/profiles/profile_manager.h"
-+#if defined(FULL_SAFE_BROWSING)
- #include "chrome/common/safe_browsing/download_file_types.pb.h"
-+#endif
- #include "components/download/public/common/download_item.h"
- #include "components/offline_items_collection/core/offline_item.h"
- 
-@@ -172,6 +174,7 @@ class DownloadUIModel {
-   // Change what's returned by ShouldPreferOpeningInBrowser to |preference|.
-   virtual void SetShouldPreferOpeningInBrowser(bool preference);
- 
-+#if defined(FULL_SAFE_BROWSING)
-   // Return the danger level determined during download target determination.
-   // The value returned here is independent of the danger level as determined by
-   // the Safe Browsing.
-@@ -180,6 +183,7 @@ class DownloadUIModel {
-   // Change what's returned by GetDangerLevel().
-   virtual void SetDangerLevel(
-       safe_browsing::DownloadFileType::DangerLevel danger_level);
-+#endif
- 
-   // Open the download using the platform handler for the download. The behavior
-   // of this method will be different from DownloadItem::OpenDownload() if
-diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
---- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
-+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
-@@ -399,7 +399,9 @@ void ChromeResourceDispatcherHostDelegate::AppendStandardResourceThrottles(
-     content::ResourceContext* resource_context,
-     ResourceType resource_type,
-     std::vector<std::unique_ptr<content::ResourceThrottle>>* throttles) {
-+#if defined(SAFE_BROWSING_DB_LOCAL) || defined(SAFE_BROWSING_DB_REMOTE)
-   ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
-+#endif  // defined(SAFE_BROWSING_DB_LOCAL) || defined(SAFE_BROWSING_DB_REMOTE)
- 
-   // Insert safe browsing to decide if the resource is safe.
-   content::ResourceThrottle* first_throttle = NULL;
-diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
---- a/chrome/browser/net/chrome_network_delegate.cc
-+++ b/chrome/browser/net/chrome_network_delegate.cc
-@@ -78,19 +78,6 @@ namespace {
- 
- bool g_access_to_all_files_enabled = false;
- 
--// Gets called when the extensions finish work on the URL. If the extensions
--// did not do a redirect (so |new_url| is empty) then we enforce the
--// SafeSearch parameters. Otherwise we will get called again after the
--// redirect and we enforce SafeSearch then.
--void ForceGoogleSafeSearchCallbackWrapper(net::CompletionOnceCallback callback,
--                                          net::URLRequest* request,
--                                          GURL* new_url,
--                                          int rv) {
--  if (rv == net::OK && new_url->is_empty())
--    safe_search_util::ForceGoogleSafeSearch(request->url(), new_url);
--  std::move(callback).Run(rv);
--}
--
- bool IsAccessAllowedInternal(const base::FilePath& path,
-                              const base::FilePath& profile_path) {
-   if (g_access_to_all_files_enabled)
-@@ -212,26 +199,8 @@ int ChromeNetworkDelegate::OnBeforeURLRequest(
-     GURL* new_url) {
-   extensions_delegate_->ForwardStartRequestStatus(request);
- 
--  // The non-redirect case is handled in GoogleURLLoaderThrottle.
--  bool force_safe_search =
--      (force_google_safe_search_ && force_google_safe_search_->GetValue() &&
--       request->is_redirecting());
--
--  net::CompletionOnceCallback wrapped_callback = std::move(callback);
--
--  if (force_safe_search) {
--    wrapped_callback = base::BindOnce(
--        &ForceGoogleSafeSearchCallbackWrapper, std::move(wrapped_callback),
--        base::Unretained(request), base::Unretained(new_url));
--  }
--
--  int rv = extensions_delegate_->NotifyBeforeURLRequest(
--      request, std::move(wrapped_callback), new_url);
--
--  if (force_safe_search && rv == net::OK && new_url->is_empty())
--    safe_search_util::ForceGoogleSafeSearch(request->url(), new_url);
--
--  return rv;
-+  return extensions_delegate_->NotifyBeforeURLRequest(
-+      request, std::move(callback), new_url);
- }
- 
- int ChromeNetworkDelegate::OnBeforeStartTransaction(
-diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn
---- a/chrome/browser/safe_browsing/BUILD.gn
-+++ b/chrome/browser/safe_browsing/BUILD.gn
-@@ -20,7 +20,6 @@ jumbo_static_library("safe_browsing") {
-     "//chrome/app:generated_resources",
-     "//chrome/common",
-     "//chrome/common:constants",
--    "//chrome/common/safe_browsing:file_type_policies",
-     "//components/browser_sync",
-     "//components/keyed_service/content",
-     "//components/language/core/browser",
-diff --git a/chrome/common/safe_browsing/BUILD.gn b/chrome/common/safe_browsing/BUILD.gn
---- a/chrome/common/safe_browsing/BUILD.gn
-+++ b/chrome/common/safe_browsing/BUILD.gn
-@@ -13,20 +13,6 @@ proto_library("proto") {
-   ]
- }
- 
--source_set("file_type_policies") {
--  sources = [
--    "file_type_policies.cc",
--    "file_type_policies.h",
--  ]
--
--  deps = [
--    ":proto",
--    "//base",
--    "//chrome/browser:resources",
--    "//ui/base",
--  ]
--}
--
- if (safe_browsing_mode == 1) {
-   source_set("archive_analyzer_results") {
-     sources = [
-@@ -149,7 +135,6 @@ if (safe_browsing_mode == 1) {
- 
- source_set("safe_browsing") {
-   deps = [
--    ":file_type_policies",
-   ]
- 
-   if (safe_browsing_mode == 1) {
--- 
-2.11.0
-

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

@@ -11,7 +11,7 @@ Subject: Allow playing audio in background
 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
-@@ -1483,6 +1483,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1603,6 +1603,10 @@ const FeatureEntry kFeatureEntries[] = {
      {"debug-packed-apps", flag_descriptions::kDebugPackedAppName,
       flag_descriptions::kDebugPackedAppDescription, kOsDesktop,
       SINGLE_VALUE_TYPE(switches::kDebugPackedApps)},
@@ -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());
-@@ -3230,7 +3236,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
+@@ -3257,7 +3263,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.

+ 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
-@@ -126,7 +126,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
+@@ -145,7 +145,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs(
    registry->RegisterBooleanPref(prefs::kAccountConsistencyMirrorRequired,
                                  false);
  #endif

+ 1 - 1
build/patches/Always-allow-partner-customisation.patch

@@ -9,7 +9,7 @@ Subject: Always allow partner customisation
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
-@@ -244,14 +244,14 @@ public class PartnerBrowserCustomizations {
+@@ -243,14 +243,14 @@ public class PartnerBrowserCustomizations {
              @Override
              protected Void doInBackground() {
                  try {

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

@@ -11,7 +11,7 @@ Do not read experiment value for cronet async DNS configuration
 diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
 --- a/chrome/browser/net/system_network_context_manager.cc
 +++ b/chrome/browser/net/system_network_context_manager.cc
-@@ -229,7 +229,7 @@ void OnAuthPrefsChanged(PrefService* local_state,
+@@ -216,7 +216,7 @@ void OnAuthPrefsChanged(PrefService* local_state,
  // Android this includes checking the Android version in the field trial.
  bool ShouldEnableAsyncDns() {
    bool feature_can_be_enabled = true;
@@ -23,7 +23,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows
 diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
 --- a/components/cronet/url_request_context_config.cc
 +++ b/components/cronet/url_request_context_config.cc
-@@ -545,7 +545,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
+@@ -550,7 +550,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
          effective_experimental_options->Remove(it.key(), nullptr);
          continue;
        }

+ 10 - 10
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
-@@ -348,18 +348,6 @@ public class ProcessInitializationHandler {
+@@ -347,18 +347,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
-@@ -198,15 +198,11 @@ public class MainPreferences extends PreferenceFragment
+@@ -207,15 +207,11 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSyncAndServicesPreference();
          updateSearchEnginePreference();
  
@@ -129,7 +129,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
-@@ -71,7 +71,6 @@ public class FeatureUtilities {
+@@ -73,7 +73,6 @@ public class FeatureUtilities {
      private static Boolean sHasGoogleAccountAuthenticator;
      private static Boolean sHasRecognitionIntentHandler;
  
@@ -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;
-@@ -173,7 +172,6 @@ public class FeatureUtilities {
+@@ -176,7 +175,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();
-@@ -212,38 +210,6 @@ public class FeatureUtilities {
+@@ -224,38 +222,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 cacheAllowStartingServiceManagerOnly() {
-         boolean allowStartingServiceManagerOnly =
-                 ChromeFeatureList.isEnabled(ChromeFeatureList.ALLOW_STARTING_SERVICE_MANAGER_ONLY);
+     private static void cacheNetworkService() {
+         boolean networkService = ChromeFeatureList.isEnabled(ChromeFeatureList.NETWORK_SERVICE);
+ 
 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
-@@ -1642,9 +1642,6 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1774,9 +1774,6 @@ const FeatureEntry kFeatureEntries[] = {
      {"enable-chrome-duet-labels", flag_descriptions::kChromeDuetLabelsName,
       flag_descriptions::kChromeDuetLabelsDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(chrome::android::kChromeDuetLabeled)},
@@ -208,7 +208,7 @@ diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/andr
      &kHomepageTile,
      &kHorizontalTabSwitcherAndroid,
      &kIdentityDisc,
-@@ -412,9 +411,6 @@ const base::Feature kForegroundNotificationManager{
+@@ -413,9 +412,6 @@ const base::Feature kForegroundNotificationManager{
  const base::Feature kHandleMediaIntents{"HandleMediaIntents",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
  

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

@@ -12,7 +12,7 @@ Return fixed base latency
 diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/third_party/blink/renderer/modules/webaudio/analyser_node.idl
 --- a/third_party/blink/renderer/modules/webaudio/analyser_node.idl
 +++ b/third_party/blink/renderer/modules/webaudio/analyser_node.idl
-@@ -42,10 +42,10 @@ interface AnalyserNode : AudioNode {
+@@ -43,10 +43,10 @@ interface AnalyserNode : AudioNode {
  
      // Copies the current frequency data into the passed array.
      // If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped.
@@ -30,7 +30,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/thi
 diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
 --- a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
 +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
-@@ -38,7 +38,7 @@
+@@ -39,7 +39,7 @@
  
      // Channel access
      readonly attribute unsigned long numberOfChannels;

+ 4 - 320
build/patches/Bromite-adblock-engine.patch → build/patches/Bromite-AdBlock-engine-for-SystemWebView.patch

@@ -1,31 +1,14 @@
 From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Thu, 23 Aug 2018 19:30:15 +0200
-Subject: Bromite adblock engine
+Date: Sat, 14 Sep 2019 10:14:54 +0200
+Subject: Bromite AdBlock engine for SystemWebView
 
-Original adblock engine ported from NoChromo patch
-Make interception testable
-Add domain support
-Re-land: third-party filters support
-Add menu option to toggle global Adblock preference
-Allow toggling Chromium's "ads enabled" content settings option together with Bromite adblock engine.
-Perform adblock interception in StartJob to address lagging issues
-New mechanism for adblocking based on Brave's adblocking hook
-Add support for Webview content blocking
 ---
  android_webview/browser/net/aw_network_delegate.cc |  71 ++++
  android_webview/browser/net/aw_network_delegate.h  |   3 +
- chrome/android/java/res/menu/custom_tabs_menu.xml  |  12 +
- chrome/android/java/res/menu/main_menu.xml         |  11 +
- .../chromium/chrome/browser/ChromeActivity.java    |   8 +
- .../chrome/browser/ChromeTabbedActivity.java       |   8 +
- .../appmenu/AppMenuPropertiesDelegateImpl.java     |  42 ++-
- .../CustomTabAppMenuPropertiesDelegate.java        |   2 +
- .../java/strings/android_chrome_strings.grd        |  11 +
- chrome/browser/net/chrome_network_delegate.cc      |  86 +++++
  net/BUILD.gn                                       |   7 +
  net/url_request/adblock_intercept.cc               | 389 +++++++++++++++++++++
  net/url_request/adblock_intercept.h                |  35 ++
- 13 files changed, 683 insertions(+), 2 deletions(-)
+ 5 files changed, 505 insertions(+)
  create mode 100644 net/url_request/adblock_intercept.cc
  create mode 100644 net/url_request/adblock_intercept.h
 
@@ -133,309 +116,10 @@ diff --git a/android_webview/browser/net/aw_network_delegate.h b/android_webview
    int OnBeforeStartTransaction(net::URLRequest* request,
                                 net::CompletionOnceCallback callback,
                                 net::HttpRequestHeaders* headers) override;
-diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
---- a/chrome/android/java/res/menu/custom_tabs_menu.xml
-+++ b/chrome/android/java/res/menu/custom_tabs_menu.xml
-@@ -75,6 +75,18 @@
-                   android:checkable="true" />
-           </menu>
-         </item>
-+        <item android:id="@+id/enable_adblock_row_menu_id"
-+            android:title="@null"
-+            android:orderInCategory="2">
-+          <menu>
-+              <item android:id="@+id/enable_adblock_id"
-+                  android:title="@string/menu_enable_adblock" />
-+              <item android:id="@+id/enable_adblock_check_id"
-+                  android:title="@null"
-+                  android:checkable="true" />
-+          </menu>
-+        </item>
-+
-         <!-- Title is intentionally left blank in xml and will be set in java. -->
-         <item android:id="@+id/open_in_browser_id"
-             android:title=""
-diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
---- a/chrome/android/java/res/menu/main_menu.xml
-+++ b/chrome/android/java/res/menu/main_menu.xml
-@@ -84,6 +84,17 @@
-           </menu>
-         </item>
- 
-+        <item android:id="@+id/enable_adblock_row_menu_id"
-+            android:title="@null">
-+          <menu>
-+              <item android:id="@+id/enable_adblock_id"
-+                  android:title="@string/menu_enable_adblock" />
-+              <item android:id="@+id/enable_adblock_check_id"
-+                  android:title="@null"
-+                  android:checkable="true" />
-+          </menu>
-+        </item>
-+
-         <item android:id="@+id/reader_mode_prefs_id"
-             android:title="@string/menu_reader_mode_prefs"
-             android:icon="@drawable/reader_mode_prefs_icon" />
-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
-@@ -2173,6 +2173,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
-             RecordUserAction.record("MobileMenuRequestEnableJavascript");
-         } else if (id == R.id.reader_mode_prefs_id) {
-             DomDistillerUIUtils.openSettings(currentTab.getWebContents());
-+        } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) {
-+            final boolean reloadOnChange = !currentTab.isNativePage();
-+            final boolean adblockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
-+            PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS, adblockEnabled);
-+            if (reloadOnChange) {
-+                currentTab.reload();
-+            }
-+            RecordUserAction.record("MobileMenuRequestEnableAdBlock");
-         } else {
-             return false;
-         }
-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
-@@ -1762,6 +1762,14 @@ public class ChromeTabbedActivity
-                 reportNewTabShortcutUsed(true);
-                 getTabCreator(true).launchNTP();
-             }
-+        } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) {
-+            final boolean reloadOnChange = !currentTab.isNativePage();
-+            final boolean adblockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
-+            PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS, adblockEnabled);
-+            if (reloadOnChange) {
-+                currentTab.reload();
-+            }
-+            RecordUserAction.record("MobileMenuRequestEnableAdBlock");
-         } else if (id == R.id.all_bookmarks_menu_id) {
-             if (currentTab != null) {
-                 getCompositorViewHolder().hideKeyboard(() -> {
-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;
- 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.UrlConstants;
- import org.chromium.chrome.browser.banners.AppBannerManager;
-@@ -224,6 +225,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
-             // Prepare translate menu button.
-             prepareTranslateMenuItem(menu, currentTab);
- 
-+            updateEnableAdBlockMenuItem(menu, currentTab);
-+
-             // 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
-@@ -296,6 +299,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
-                 PrefServiceBridge.getInstance().isIncognitoModeManaged());
-     }
- 
-+     /**
-+     * Updates the enable AdBlock item's state.
-+     *
-+     * @param menu {@link Menu} for enable adblock
-+     * @param currentTab      Current tab being displayed.
-+     */
-+    protected void updateEnableAdBlockMenuItem(
-+            Menu menu, Tab currentTab) {
-+        MenuItem enableMenuRow = menu.findItem(R.id.enable_adblock_row_menu_id);
-+        MenuItem enableMenuLabel = menu.findItem(R.id.enable_adblock_id);
-+        MenuItem enableMenuCheck = menu.findItem(R.id.enable_adblock_check_id);
-+
-+
-+        // Hide enable adblock on all chrome:// pages except for the NTP.
-+        String url = currentTab.getUrl();
-+        boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
-+                || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
-+        // Also hide enable javascsript on Reader Mode.
-+        boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
-+
-+        boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
-+        enableMenuRow.setVisible(itemVisible);
-+        if (!itemVisible) return;
-+
-+        boolean adBlockEnabled = !PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_ADS);
-+
-+        // Mark the checkbox if adblock is globally activate.
-+        enableMenuCheck.setChecked(adBlockEnabled);
-+
-+        // This title doesn't seem to be displayed by Android, but it is used to set up
-+        // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
-+        enableMenuLabel.setTitleCondensed(adBlockEnabled
-+                        ? mContext.getString(R.string.menu_enable_adblock_on)
-+                        : mContext.getString(R.string.menu_enable_adblock_off));
-+    }
-+
-+
-     /**
-      * Sets the visibility and labels of the "Add to Home screen" and "Open WebAPK" menu items.
-      */
-@@ -475,8 +515,6 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
-                         : mContext.getString(R.string.menu_enable_javascript_off));
-     }
- 
--
--
-     /**
-      * Updates the request desktop site item's state.
-      *
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
-@@ -201,6 +201,8 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
-                 }
-             }
- 
-+            updateEnableAdBlockMenuItem(menu, currentTab);
-+
-             updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
-             updateEnableJavascriptMenuItem(menu, currentTab);
-             prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible);
-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
-@@ -3075,6 +3075,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>
-+
-+      <message name="IDS_MENU_ENABLE_ADBLOCK" desc="Menu item in Chrome's overflow/options menu. If this menu item is unselected, Bromite will disable AdBlock engine for the page. [CHAR-LIMIT=27]">
-+        Enable AdBlock
-+      </message>
-+      <message name="IDS_MENU_ENABLE_ADBLOCK_ON" desc="Accessibility description for when Enable AdBlock is selected.">
-+        Turn off AdBlock
-+      </message>
-+      <message name="IDS_MENU_ENABLE_ADBLOCK_OFF" desc="Accessibility description for when Enable AdBlock is unselected.">
-+        Turn on AdBlock
-+      </message>
-+
-       <message name="IDS_MENU_READER_MODE_PREFS" desc="Menu item to show reader mode preferences pane, which allows users to change the appearance (font size, theme, etc.) of the page. [CHAR-LIMIT=27]">
-         Appearance
-       </message>
-diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
---- a/chrome/browser/net/chrome_network_delegate.cc
-+++ b/chrome/browser/net/chrome_network_delegate.cc
-@@ -25,6 +25,7 @@
- #include "build/build_config.h"
- #include "chrome/browser/browser_process.h"
- #include "chrome/browser/content_settings/cookie_settings_factory.h"
-+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
- #include "chrome/browser/content_settings/tab_specific_content_settings.h"
- #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
- #include "chrome/browser/net/chrome_extensions_network_delegate.h"
-@@ -59,6 +60,7 @@
- #if defined(OS_ANDROID)
- #include "base/android/path_utils.h"
- #include "chrome/browser/io_thread.h"
-+#include "net/url_request/adblock_intercept.h"
- #endif
- 
- #if defined(OS_CHROMEOS)
-@@ -193,10 +195,94 @@ void ChromeNetworkDelegate::set_cookie_settings(
-   cookie_settings_ = cookie_settings;
- }
- 
-+#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);
-+    }
-+
-+    bool adblock_enabled = false;
-+    if (isValidUrl && info) {
-+      const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter = info->GetWebContentsGetterForRequest();
-+      content::WebContents* web_contents = web_contents_getter.Run();
-+      if (web_contents) {
-+        Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext());
-+        //FIXME: this should not be called from the IO thread
-+        const HostContentSettingsMap* content_settings = HostContentSettingsMapFactory::GetForProfile(profile);
-+
-+        if (content_settings) {
-+          // check global value first
-+          adblock_enabled = CONTENT_SETTING_BLOCK == content_settings->GetDefaultContentSetting(ContentSettingsType::CONTENT_SETTINGS_TYPE_ADS, NULL);
-+
-+          if (!adblock_enabled) {
-+            // check per-site value
-+            adblock_enabled = CONTENT_SETTING_BLOCK == content_settings->GetContentSetting(request->url(), GURL(), ContentSettingsType::CONTENT_SETTINGS_TYPE_ADS,
-+                                                               std::string());
-+          }
-+        }
-+      }
-+
-+      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 ChromeNetworkDelegate::OnBeforeURLRequest(
-     net::URLRequest* request,
-     net::CompletionOnceCallback callback,
-     GURL* new_url) {
-+
-+#if defined(OS_ANDROID)
-+  if (request) {
-+    // most requests will be modified rather than intercepted
-+    if (requestIntercepted(request, new_url))
-+      return net::ERR_BLOCKED_BY_ADMINISTRATOR;
-+  } // request
-+#endif // OS_ANDROID
-+
-   extensions_delegate_->ForwardStartRequestStatus(request);
- 
-   return extensions_delegate_->NotifyBeforeURLRequest(
 diff --git a/net/BUILD.gn b/net/BUILD.gn
 --- a/net/BUILD.gn
 +++ b/net/BUILD.gn
-@@ -1815,6 +1815,13 @@ component("net") {
+@@ -1842,6 +1842,13 @@ component("net") {
        "url_request/websocket_handshake_userdata_key.h",
      ]
  

+ 1351 - 0
build/patches/Bromite-AdBlockUpdaterService.patch

@@ -0,0 +1,1351 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sat, 14 Sep 2019 10:20:08 +0200
+Subject: Bromite AdBlockUpdaterService
+
+Disable look-alike, metrics, ablation and navigation throttles
+Do not use experiments to enable/disable presets
+Always enable ad filtering
+Download filters by checking Last-Modified header first
+---
+ chrome/browser/after_startup_task_utils.cc         |   5 +
+ chrome/browser/browser_process.h                   |   7 +
+ chrome/browser/browser_process_impl.cc             |  28 +++
+ chrome/browser/browser_process_impl.h              |   3 +
+ chrome/browser/chrome_browser_main.cc              |   5 +-
+ chrome/browser/chrome_content_browser_client.cc    |  18 --
+ components/component_updater/BUILD.gn              |   6 +
+ .../component_updater/adblock_updater_service.cc   | 249 +++++++++++++++++++++
+ .../component_updater/adblock_updater_service.h    |  99 ++++++++
+ .../component_updater/download_filters_task.cc     | 228 +++++++++++++++++++
+ .../component_updater/download_filters_task.h      | 131 +++++++++++
+ .../content_subresource_filter_throttle_manager.cc |  11 +
+ .../content/browser/ruleset_service.cc             |  33 ++-
+ .../content/browser/ruleset_service.h              |   7 +-
+ .../content/browser/ruleset_version.cc             |   1 +
+ .../content/browser/ruleset_version.h              |   5 +
+ .../content/browser/verified_ruleset_dealer.cc     |   2 +
+ .../core/browser/subresource_filter_features.cc    | 115 +---------
+ .../core/common/common_features.cc                 |   2 +-
+ .../frame_host/navigation_throttle_runner.cc       |  10 -
+ 20 files changed, 818 insertions(+), 147 deletions(-)
+ create mode 100644 components/component_updater/adblock_updater_service.cc
+ create mode 100644 components/component_updater/adblock_updater_service.h
+ create mode 100644 components/component_updater/download_filters_task.cc
+ create mode 100644 components/component_updater/download_filters_task.h
+
+diff --git a/chrome/browser/after_startup_task_utils.cc b/chrome/browser/after_startup_task_utils.cc
+--- a/chrome/browser/after_startup_task_utils.cc
++++ b/chrome/browser/after_startup_task_utils.cc
+@@ -36,6 +36,8 @@
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+ 
++#include "chrome/browser/browser_process.h"
++
+ using content::BrowserThread;
+ using content::WebContents;
+ using content::WebContentsObserver;
+@@ -135,6 +137,9 @@ void SetBrowserStartupIsComplete() {
+   g_after_startup_tasks.Get().clear();
+   g_after_startup_tasks.Get().shrink_to_fit();
+ 
++  // initialize scheduled updates for the AdBlock updater
++  g_browser_process->adblock_updater()->Start();
++
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+   // Make sure we complete the startup notification sequence, or launchers will
+   // get confused by not receiving the expected message from the main process.
+diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
+--- a/chrome/browser/browser_process.h
++++ b/chrome/browser/browser_process.h
+@@ -22,6 +22,7 @@
+ #include "chrome/browser/shell_integration.h"
+ #include "chrome/common/buildflags.h"
+ #include "media/media_buildflags.h"
++#include "components/component_updater/adblock_updater_service.h"
+ 
+ class BackgroundModeManager;
+ class DownloadRequestLimiter;
+@@ -58,6 +59,10 @@ class ComponentUpdateService;
+ class SupervisedUserWhitelistInstaller;
+ }
+ 
++namespace adblock_updater {
++class AdBlockUpdaterService;
++}
++
+ namespace extensions {
+ class EventRouterForwarder;
+ }
+@@ -233,6 +238,8 @@ class BrowserProcess {
+ 
+   virtual component_updater::ComponentUpdateService* component_updater() = 0;
+ 
++  virtual adblock_updater::AdBlockUpdaterService* adblock_updater() = 0;
++
+ #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+   virtual component_updater::SupervisedUserWhitelistInstaller*
+   supervised_user_whitelist_installer() = 0;
+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() {
+   return component_updater_.get();
+ }
+ 
++adblock_updater::AdBlockUpdaterService*
++BrowserProcessImpl::adblock_updater() {
++  if (adblock_updater_)
++    return adblock_updater_.get();
++
++  if (!BrowserThread::CurrentlyOn(BrowserThread::UI))
++    return nullptr;
++
++  std::unique_ptr<component_updater::UpdateScheduler> scheduler;
++#if defined(OS_ANDROID)
++  if (base::FeatureList::IsEnabled(
++          chrome::android::kBackgroundTaskComponentUpdate) &&
++      component_updater::BackgroundTaskUpdateScheduler::IsAvailable()) {
++    scheduler =
++        std::make_unique<component_updater::BackgroundTaskUpdateScheduler>();
++  }
++#endif
++  if (!scheduler)
++    scheduler = std::make_unique<component_updater::TimerUpdateScheduler>();
++
++  adblock_updater_ = std::make_unique<adblock_updater::AdBlockUpdaterService>(
++          g_browser_process->system_network_context_manager()->GetSharedURLLoaderFactory(),
++          std::move(scheduler),
++          g_browser_process->subresource_filter_ruleset_service());
++
++  return adblock_updater_.get();
++}
++
+ #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+ component_updater::SupervisedUserWhitelistInstaller*
+ BrowserProcessImpl::supervised_user_whitelist_installer() {
+diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h
+--- a/chrome/browser/browser_process_impl.h
++++ b/chrome/browser/browser_process_impl.h
+@@ -177,6 +177,7 @@ class BrowserProcessImpl : public BrowserProcess,
+ #endif
+ 
+   component_updater::ComponentUpdateService* component_updater() override;
++  adblock_updater::AdBlockUpdaterService* adblock_updater() override;
+ #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+   component_updater::SupervisedUserWhitelistInstaller*
+   supervised_user_whitelist_installer() override;
+@@ -362,6 +363,8 @@ class BrowserProcessImpl : public BrowserProcess,
+   // but some users of component updater only install per-user.
+   std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
+ 
++  std::unique_ptr<adblock_updater::AdBlockUpdaterService> adblock_updater_;
++
+ #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+   std::unique_ptr<component_updater::SupervisedUserWhitelistInstaller>
+       supervised_user_whitelist_installer_;
+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() {
+ 
+   PreBrowserStart();
+ 
+-  if (!parsed_command_line().HasSwitch(switches::kDisableComponentUpdate))
++  if (!parsed_command_line().HasSwitch(switches::kDisableComponentUpdate)) {
+     RegisterComponentsForUpdate(profile_->GetPrefs());
++    // force initialisation
++    g_browser_process->adblock_updater();
++  }
+ 
+   variations::VariationsService* variations_service =
+       browser_process_->variations_service();
+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 @@
+ #include "chrome/browser/hid/chrome_hid_delegate.h"
+ #include "chrome/browser/language/translate_frame_binder.h"
+ #include "chrome/browser/lifetime/browser_shutdown.h"
+-#include "chrome/browser/lookalikes/lookalike_url_navigation_throttle.h"
+ #include "chrome/browser/media/router/media_router_feature.h"
+ #include "chrome/browser/media/router/presentation/presentation_service_delegate_impl.h"
+ #include "chrome/browser/media/router/presentation/receiver_presentation_service_delegate_impl.h"
+@@ -80,7 +79,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"
+-#include "chrome/browser/page_load_metrics/metrics_navigation_throttle.h"
+ #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"
+@@ -4085,16 +4083,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+     content::NavigationHandle* handle) {
+   std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
+ 
+-  // MetricsNavigationThrottle requires that it runs before NavigationThrottles
+-  // that may delay or cancel navigations, so only NavigationThrottles that
+-  // don't delay or cancel navigations (e.g. throttles that are only observing
+-  // callbacks without affecting navigation behavior) should be added before
+-  // MetricsNavigationThrottle.
+-  if (handle->IsInMainFrame()) {
+-    throttles.push_back(
+-        page_load_metrics::MetricsNavigationThrottle::Create(handle));
+-  }
+-
+ #if BUILDFLAG(ENABLE_PLUGINS)
+   std::unique_ptr<content::NavigationThrottle> flash_url_throttle =
+       FlashDownloadInterception::MaybeCreateThrottleFor(handle);
+@@ -4204,12 +4192,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
+   }
+ #endif
+ 
+-  std::unique_ptr<content::NavigationThrottle>
+-      lookalike_url_navigation_throttle = lookalikes::
+-          LookalikeUrlNavigationThrottle::MaybeCreateNavigationThrottle(handle);
+-  if (lookalike_url_navigation_throttle)
+-    throttles.push_back(std::move(lookalike_url_navigation_throttle));
+-
+   std::unique_ptr<content::NavigationThrottle> pdf_iframe_throttle =
+       PDFIFrameNavigationThrottle::MaybeCreateThrottleFor(handle);
+   if (pdf_iframe_throttle)
+diff --git a/components/component_updater/BUILD.gn b/components/component_updater/BUILD.gn
+--- a/components/component_updater/BUILD.gn
++++ b/components/component_updater/BUILD.gn
+@@ -10,6 +10,12 @@ static_library("component_updater") {
+     "component_updater_command_line_config_policy.h",
+     "component_updater_paths.cc",
+     "component_updater_paths.h",
++
++    "adblock_updater_service.cc",
++    "adblock_updater_service.h",
++    "download_filters_task.cc",
++    "download_filters_task.h",
++
+     "component_updater_service.cc",
+     "component_updater_service.h",
+     "component_updater_service_internal.h",
+diff --git a/components/component_updater/adblock_updater_service.cc b/components/component_updater/adblock_updater_service.cc
+new file mode 100644
+--- /dev/null
++++ b/components/component_updater/adblock_updater_service.cc
+@@ -0,0 +1,249 @@
++/*
++    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 "components/component_updater/adblock_updater_service.h"
++
++#include <algorithm>
++#include <map>
++#include <string>
++#include <utility>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/bind_helpers.h"
++#include "base/callback.h"
++#include "base/files/file_path.h"
++#include "base/files/file_util.h"
++#include "base/logging.h"
++#include "base/macros.h"
++#include "base/threading/thread_checker.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "base/time/time.h"
++#include "base/timer/timer.h"
++#include "url/gurl.h"
++#include "base/strings/safe_sprintf.h"
++#include "base/strings/string_number_conversions.h"
++
++namespace adblock_updater {
++
++// all constants express seconds
++// these could be made configurable
++const int initial_check_delay = 5,
++      next_check_delay = 60*60*24*7, // 1 week
++      on_demand_check_delay = 60; // minimum 1 minute between each on-demand check
++
++AdBlockUpdaterService::AdBlockUpdaterService(scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory, std::unique_ptr<component_updater::UpdateScheduler> scheduler, subresource_filter::RulesetService* ruleset_service)
++ : ruleset_service_(ruleset_service), shared_url_network_factory_(shared_url_network_factory), scheduler_(std::move(scheduler)) {
++  DCHECK(ruleset_service);
++
++  //TODO: retrieve filters URL from config/prefs
++  filters_url_ = "https://www.bromite.org/filters/filters.dat";
++}
++
++AdBlockUpdaterService::~AdBlockUpdaterService() {
++  DCHECK(thread_checker_.CalledOnValidThread());
++}
++
++void AdBlockUpdaterService::AddObserver(Observer* observer) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++  observer_list_.AddObserver(observer);
++}
++
++void AdBlockUpdaterService::RemoveObserver(Observer* observer) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++  observer_list_.RemoveObserver(observer);
++}
++
++//TODO: use this as in: base::Bind(&AdBlockUpdaterService::NotifyObservers, base::Unretained(this)
++void AdBlockUpdaterService::NotifyObservers(Event event) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++  for (auto& observer : observer_list_)
++    observer.OnEvent(event);
++}
++
++void AdBlockUpdaterService::Start() {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  // avoid multiple scheduling
++  if (scheduled_)
++    return;
++  scheduled_ = true;
++
++  LOG(INFO) << "AdBlockUpdaterService: starting up. "
++          << "First update attempt will take place in "
++          << initial_check_delay << " seconds. "
++          << "Next update attempt will take place in "
++          << next_check_delay << " seconds. ";
++
++  scheduler_->Schedule(
++      base::TimeDelta::FromSeconds(initial_check_delay),
++      base::TimeDelta::FromSeconds(next_check_delay),
++      base::Bind(&AdBlockUpdaterService::OnDemandScheduledUpdate,
++                 base::Unretained(this)), base::DoNothing());
++}
++
++void AdBlockUpdaterService::OnDemandScheduledUpdate(component_updater::UpdateScheduler::OnFinishedCallback on_finished) {
++  //TODO: call on_finished
++  OnDemandUpdateAsNeeded(false, Callback());
++}
++
++bool AdBlockUpdaterService::OnDemandUpdate(Callback on_finished) {
++  return OnDemandUpdateAsNeeded(true, std::move(on_finished));
++}
++
++bool AdBlockUpdaterService::OnDemandUpdateAsNeeded(bool is_foreground, Callback on_finished) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  // Check if the request is too soon.
++  if (!last_update_.is_null()) {
++    base::TimeDelta delta =
++        base::TimeTicks::Now() - last_update_;
++    if (is_updating_ || (delta < base::TimeDelta::FromSeconds(on_demand_check_delay)))
++      LOG(INFO) << "AdBlockUpdaterService: update not necessary.";
++      return false;
++  }
++
++  OnDemandUpdateInternal(is_foreground, std::move(on_finished));
++  return true;
++}
++
++void AdBlockUpdaterService::OnDemandUpdateInternal(bool is_foreground, Callback on_finished) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  if (is_updating_) {
++    base::ThreadTaskRunnerHandle::Get()->PostTask(
++        FROM_HERE, base::BindOnce(std::move(on_finished),
++                                    Error::UPDATE_IN_PROGRESS));
++    return;
++  }
++  is_updating_ = true;
++  last_update_ = base::TimeTicks::Now();
++
++  base::Time::Exploded e = {0};
++  base::Time t = base::Time();
++  auto version = ruleset_service_->GetMostRecentlyIndexedVersion();
++  LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion = " << version.content_version;
++  std::vector<std::string> tokens =
++      base::SplitString(version.content_version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
++  int i = 0;
++  bool failed = false;
++  for (const std::string& token : tokens) {
++    // parse as number
++    int n = 0;
++    if (!base::StringToInt(token, &n)) {
++      failed = true;
++      break;
++    }
++
++    switch (i++) {
++      case 0:
++        e.year = 2019 + n;
++        break;
++      case 1:
++        e.month = n + 1;
++        break;
++      case 2:
++        e.day_of_month = n + 1;
++        break;
++      case 3:
++        e.second = n % 60;
++        n -= e.second;
++        n /= 60;
++        e.minute = n % 60;
++        e.hour = n / 60;
++        break;
++      default:
++        failed = true;
++        break;
++    }
++  }
++
++  if (failed) {
++    LOG(WARNING) << "AdBlockUpdaterService: failed to parse most recent version as x.y.z.w dot-separated integers";
++  } else {
++    if (!base::Time::FromUTCExploded(e, &t))
++      LOG(WARNING) << "AdBlockUpdaterService: failed to convert version to time.";
++  }
++
++  auto task = base::MakeRefCounted<DownloadFiltersTask>(
++      shared_url_network_factory_,
++      is_foreground, filters_url_,
++      t,
++      base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this),
++                     std::move(on_finished)));
++
++  // run task now; task is responsible for clearing the is_updating status
++  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
++      base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get())));
++  tasks_.insert(task);
++}
++
++void AdBlockUpdaterService::OnUpdateComplete(Callback on_finished,
++                                        scoped_refptr<DownloadFiltersTask> task,
++                                        Error error) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  auto file_path = task->file_path();
++  if (error == Error::NONE) {
++    subresource_filter::UnindexedRulesetInfo ruleset_info;
++    ruleset_info.ruleset_path = file_path;
++    ruleset_info.delete_ruleset_path = true;
++    ruleset_info.content_version = "0.0.0.0";
++    DCHECK(!ruleset_info.ruleset_path.empty());
++
++    // convert time to version
++    auto t = task->last_modified();
++    bool ignore_version = t.is_null();
++    if (!ignore_version) {
++      base::Time::Exploded e;
++      t.UTCExplode(&e);
++
++      // convert time to version
++      const int major = e.year - 2019,
++                minor = e.month - 1,
++                patch = e.day_of_month - 1,
++                revision = (e.hour*60+e.minute)*60 + e.second;
++      if (major < 0)
++         LOG(WARNING) << "AdBlockUpdaterService: too old Last-Modified header, ignoring version check.";
++      else {
++        char version_buffer[32];
++        base::strings::SafeSNPrintf(version_buffer, sizeof(version_buffer), "%d.%d.%d.%d",
++                                major, minor, patch, revision);
++
++        ruleset_info.content_version = version_buffer;
++
++        LOG(INFO) << "AdBlockUpdaterService: indexing filters with version " << ruleset_info.content_version;
++      }
++    } else
++      LOG(WARNING) << "AdBlockUpdaterService: invalid Last-Modified header, ignoring version check.";
++    ruleset_service_->IndexAndStoreAndPublishRulesetIfNeeded(ruleset_info, ignore_version);
++  } else {
++    //TODO: generate event for ADBLOCK_NOT_UPDATED in case of error UPDATE_NOT_NEEDED
++  }
++
++  //TODO: run these only when index-and-store is actually finished?
++  if (!on_finished.is_null()) {
++    base::ThreadTaskRunnerHandle::Get()->PostTask(
++        FROM_HERE, base::BindOnce(std::move(on_finished), error));
++  }
++
++  // mark as not updating
++  is_updating_ = false;
++  tasks_.erase(task);
++}
++
++}  // namespace adblock_updater
+diff --git a/components/component_updater/adblock_updater_service.h b/components/component_updater/adblock_updater_service.h
+new file mode 100644
+--- /dev/null
++++ b/components/component_updater/adblock_updater_service.h
+@@ -0,0 +1,99 @@
++/*
++    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 COMPONENTS_ADBLOCK_UPDATER_SERVICE_H
++#define COMPONENTS_ADBLOCK_UPDATER_SERVICE_H
++
++#include <stdint.h>
++
++#include <memory>
++#include <string>
++#include <vector>
++
++#include "base/callback_forward.h"
++#include "base/gtest_prod_util.h"
++#include "base/memory/ref_counted.h"
++#include "base/version.h"
++#include "build/build_config.h"
++#include "components/component_updater/update_scheduler.h"
++#include "url/gurl.h"
++#include "components/component_updater/download_filters_task.h"
++#include "components/subresource_filter/content/browser/ruleset_service.h"
++#include "services/network/public/cpp/shared_url_loader_factory.h"
++
++namespace adblock_updater {
++
++// Called when a non-blocking call in this module completes.
++using Callback = base::OnceCallback<void(Error error)>;
++
++class Observer {
++   public:
++    virtual ~Observer() {}
++
++    // Called by the update service when a state change happens.
++    virtual void OnEvent(Event event) = 0;
++};
++
++// The AdBlock update service is in charge of downloading and saving the
++// AdBlock filters.
++//
++// All methods are safe to call ONLY from the browser's main thread.
++class AdBlockUpdaterService {
++ public:
++  AdBlockUpdaterService(scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory, std::unique_ptr<component_updater::UpdateScheduler> scheduler, subresource_filter::RulesetService* ruleset_service);
++  ~AdBlockUpdaterService();
++
++  // Adds an observer for this class. An observer should not be added more
++  // than once. The caller retains the ownership of the observer object.
++  void AddObserver(Observer* observer);
++
++  // Removes an observer. It is safe for an observer to be removed while
++  // the observers are being notified.
++  void RemoveObserver(Observer* observer);
++
++  // Will schedule automatic updates, run in background.
++  void Start();
++
++  // To be called for an user-triggered update.
++  // Will not result in an actual update if the last update was too recently triggered.
++  bool OnDemandUpdate(Callback on_finished);
++
++ private:
++  void NotifyObservers(Event event);
++  void OnDemandScheduledUpdate(component_updater::UpdateScheduler::OnFinishedCallback on_finished);
++  bool OnDemandUpdateAsNeeded(bool is_foreground, Callback on_finished);
++  void OnDemandUpdateInternal(bool is_foreground, Callback on_finished);
++  void OnUpdateComplete(Callback callback, scoped_refptr<DownloadFiltersTask> task, Error error);
++
++  base::ObserverList<Observer>::Unchecked observer_list_;
++  base::ThreadChecker thread_checker_;
++  base::TimeTicks last_update_;
++
++  subresource_filter::RulesetService* ruleset_service_;
++  std::string filters_url_;
++
++  scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory_;
++  std::unique_ptr<component_updater::UpdateScheduler> scheduler_;
++
++  bool is_updating_ = false;
++  bool scheduled_ = false;
++  std::set<scoped_refptr<DownloadFiltersTask>> tasks_;
++};
++
++}  // namespace adblock_updater
++
++#endif  // COMPONENTS_ADBLOCK_UPDATER_SERVICE_H
+diff --git a/components/component_updater/download_filters_task.cc b/components/component_updater/download_filters_task.cc
+new file mode 100644
+--- /dev/null
++++ b/components/component_updater/download_filters_task.cc
+@@ -0,0 +1,228 @@
++/*
++    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 "components/component_updater/download_filters_task.h"
++
++#include <utility>
++
++#include "base/files/file_util.h"
++#include "base/bind.h"
++#include "base/location.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "base/logging.h"
++#include "net/base/load_flags.h"
++#include "url/gurl.h"
++
++namespace adblock_updater {
++
++// maximum 10MB for the filters file
++const int kMaxBodySize = 1024 * 1024 * 10;
++
++const int kMaxRetriesOnNetworkChange = 3;
++
++const net::NetworkTrafficAnnotationTag traffic_annotation =
++    net::DefineNetworkTrafficAnnotation("update_client", R"(
++        semantics {
++          sender: "Bromite AdBlock filters updater"
++          description:
++            "The AdBlock filters updater is responsible for updating the subresource filters."
++          trigger: "Manual or automatic AdBlock filters updates."
++          data:
++            "Subresource filters rulesets, binary format"
++          destination: WEBSITE
++        }
++        )");
++
++DownloadFiltersTask::DownloadFiltersTask(scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory,
++                       bool is_foreground, const std::string& filters_url, base::Time min_last_modified,
++                       Callback callback)
++    : shared_url_network_factory_(shared_url_network_factory),
++      is_foreground_(is_foreground),
++      complete_callback_(std::move(callback)) {
++  DCHECK(!filters_url.empty());
++  filters_url_ = GURL(filters_url);
++  min_last_modified_ = min_last_modified;
++
++  if (filters_url.empty()) {
++    return;
++  }
++
++  createSimpleURLLoader(!min_last_modified_.is_null());
++}
++
++void DownloadFiltersTask::createSimpleURLLoader(bool headers_only) {
++  // always reset response-related fields
++  response_code_ = -1;
++  final_url_ = GURL();
++  download_start_time_ = base::TimeTicks();
++
++  auto resource_request = std::make_unique<network::ResourceRequest>();
++  resource_request->url = filters_url_;
++  resource_request->load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA | net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE | net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
++  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
++  if (headers_only)
++    // will chain two requests - first one is to check last modified header alone
++    resource_request->method = "HEAD";
++  else
++    resource_request->method = "GET";
++
++  simple_url_loader_ = network::SimpleURLLoader::Create(
++      std::move(resource_request), traffic_annotation);
++  simple_url_loader_->SetRetryOptions(
++      kMaxRetriesOnNetworkChange,
++      network::SimpleURLLoader::RetryMode::RETRY_ON_NETWORK_CHANGE);
++  simple_url_loader_->SetAllowPartialResults(false);
++  simple_url_loader_->SetOnResponseStartedCallback(base::BindOnce(
++      &DownloadFiltersTask::OnResponseStarted, base::Unretained(this)));
++}
++
++DownloadFiltersTask::~DownloadFiltersTask() {
++  DCHECK(thread_checker_.CalledOnValidThread());
++}
++
++void DownloadFiltersTask::Run() {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  // will not be initialized if the URL was empty
++  if (!simple_url_loader_) {
++    TaskComplete(Error::INVALID_ARGUMENT);
++    return;
++  }
++
++  download_start_time_ = base::TimeTicks::Now();
++  if (min_last_modified_.is_null()) {
++    internalDownload();
++  } else {
++    simple_url_loader_->DownloadHeadersOnly(
++      shared_url_network_factory_.get(),
++      base::BindOnce(&DownloadFiltersTask::OnHeadersDownloadComplete, base::Unretained(this))
++    );
++  }
++}
++
++void DownloadFiltersTask::internalDownload() {
++  simple_url_loader_->DownloadToTempFile(
++      shared_url_network_factory_.get(),
++      base::BindOnce(
++          [](const network::SimpleURLLoader* simple_url_loader,
++             update_client::NetworkFetcher::DownloadToFileCompleteCallback download_to_file_complete_callback,
++             base::FilePath file_path) {
++            std::move(download_to_file_complete_callback)
++                .Run(file_path, simple_url_loader->NetError(),
++                     simple_url_loader->GetContentSize());
++          },
++          simple_url_loader_.get(),
++          base::BindOnce(&DownloadFiltersTask::OnDownloadComplete, base::Unretained(this))
++      ), kMaxBodySize);
++}
++
++void DownloadFiltersTask::OnHeadersDownloadComplete(scoped_refptr<net::HttpResponseHeaders> headers) {
++  // something went wrong
++  if (headers == nullptr) {
++    OnDownloadComplete(base::FilePath(), simple_url_loader_->NetError(), simple_url_loader_->GetContentSize() /* 0 */);
++    return;
++  }
++
++  // ignoring 'headers' as 'Last-Modified' has already been picked up by OnResponseStarted
++  const base::TimeDelta dt =
++          last_modified_ - min_last_modified_;
++
++  if (dt.InSeconds() > 0) {
++    // prepare for next simple URL loader and trigger download
++    createSimpleURLLoader(false);
++    internalDownload();
++    return;
++  }
++
++  // the remote filters are not more recent than known ones
++  TaskComplete(Error::UPDATE_NOT_NEEDED);
++}
++
++void DownloadFiltersTask::OnResponseStarted(
++    const GURL& final_url,
++    const network::ResourceResponseHead& response_head) {
++
++  final_url_ = final_url;
++  response_code_ = response_head.headers ? response_head.headers->response_code() : -1;
++
++  if (!response_head.headers->GetLastModifiedValue(&last_modified_))
++    LOG(WARNING) << "DownloadFiltersTask: fetching URL '" << final_url.spec() << "' with method " << (min_last_modified_.is_null() ? "GET" : "HEAD") << " (no Last-Modified header)";
++  else
++    LOG(INFO) << "DownloadFiltersTask: fetching URL '" << final_url.spec() << "' with method " << (min_last_modified_.is_null() ? "GET" : "HEAD");
++}
++
++void DownloadFiltersTask::OnDownloadComplete(base::FilePath file_path, int net_error, int64_t content_size) {
++  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
++
++  const base::TimeTicks download_end_time(base::TimeTicks::Now());
++  const base::TimeDelta download_time =
++      download_end_time >= download_start_time_
++          ? download_end_time - download_start_time_
++          : base::TimeDelta();
++
++  // Consider a 5xx response from the server as an indication to terminate
++  // the request and avoid overloading the server in this case.
++  // is not accepting requests for the moment.
++  int error = -1;
++  if (!file_path.empty() && response_code_ == 200) {
++    DCHECK_EQ(0, net_error);
++    error = 0;
++  } else if (response_code_ != -1) {
++    error = response_code_;
++  } else {
++    error = net_error;
++  }
++
++  LOG(INFO) << "DownloadFiltersTask: downloaded " << content_size << " bytes in "
++          << download_time.InMilliseconds() << "ms from '" << final_url_.spec()
++          << "' to '" << file_path << "' with net_error " << net_error << " and error " << error;
++
++  if (error) {
++    TaskComplete(Error::DOWNLOAD_ERROR);
++    return;
++  }
++
++  file_path_ = file_path;
++  TaskComplete(Error::NONE);
++}
++
++void DownloadFiltersTask::Cancel() {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  LOG(INFO) << "DownloadFiltersTask: update cancelled";
++
++  // deletion of the simple_url_loader_ will cause cancellation of its active request, if any
++
++  TaskComplete(Error::UPDATE_CANCELED);
++}
++
++void DownloadFiltersTask::TaskComplete(Error error) {
++  DCHECK(thread_checker_.CalledOnValidThread());
++
++  base::ThreadTaskRunnerHandle::Get()->PostTask(
++      FROM_HERE, base::BindOnce(std::move(complete_callback_),
++                                scoped_refptr<DownloadFiltersTask>(this), error));
++}
++
++base::Time DownloadFiltersTask::last_modified() {
++  return last_modified_;
++}
++
++base::FilePath DownloadFiltersTask::file_path() {
++  return file_path_;
++}
++
++}  // namespace adblock_updater
+diff --git a/components/component_updater/download_filters_task.h b/components/component_updater/download_filters_task.h
+new file mode 100644
+--- /dev/null
++++ b/components/component_updater/download_filters_task.h
+@@ -0,0 +1,131 @@
++/*
++    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 COMPONENTS_DOWNLOAD_FILTERS_TASK_H_
++#define COMPONENTS_DOWNLOAD_FILTERS_TASK_H_
++
++#include <string>
++#include <vector>
++
++#include "base/callback.h"
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/threading/thread_checker.h"
++#include "components/update_client/network.h"
++#include "url/gurl.h"
++#include "base/files/file_path.h"
++#include "services/network/public/cpp/shared_url_loader_factory.h"
++#include "services/network/public/cpp/simple_url_loader.h"
++
++namespace adblock_updater {
++
++// Errors generated as a result of calling Run() or by the service itself (UPDATE_IN_PROGRESS or UPDATE_CANCELED)
++enum class Error {
++  NONE = 0,
++  UPDATE_IN_PROGRESS = 1,
++  UPDATE_CANCELED = 2,
++  UPDATE_NOT_NEEDED = 3,
++  DOWNLOAD_ERROR = 4,
++  INVALID_ARGUMENT = 5,
++  MAX_VALUE,
++};
++
++enum class Event {
++      // Sent before the update client does an update check.
++      ADBLOCK_CHECKING_FOR_UPDATES = 1,
++
++      // Sent after the new filters have been downloaded but before the install
++      // or the upgrade is attempted.
++      ADBLOCK_UPDATE_READY,
++
++      // Sent when filters are being downloaded.
++      ADBLOCK_UPDATE_DOWNLOADING,
++
++      // Sent when filters have been successfully updated.
++      ADBLOCK_UPDATED,
++
++      // Sent when filters have not been updated because there
++      // was no new version available
++      //TODO: implement this with the headers check
++      ADBLOCK_NOT_UPDATED,
++
++      // Sent when an error ocurred during an update for any reason, including
++      // the update check itself failed, or the download of the update payload
++      // failed, or applying the update failed.
++      ADBLOCK_UPDATE_ERROR,
++};
++
++// Defines a specialized task for updating AdBlock filters.
++class DownloadFiltersTask : public base::RefCounted<DownloadFiltersTask> {
++ public:
++  using Callback =
++      base::OnceCallback<void(scoped_refptr<DownloadFiltersTask> task, Error error)>;
++
++  // |shared_url_network_factory| is injected here for the URL loader factory.
++  // |is_foreground| is true when the update task is initiated by the user.
++  // |filters_url| is the URL to load filters from.
++  // |complete_callback| is called to return the execution flow back to creator of
++  //    this task when the task is done.
++  DownloadFiltersTask(scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory,
++                       bool is_foreground, const std::string& filters_url, base::Time min_last_modified,
++                       Callback complete_callback);
++
++  void Run();
++
++  void Cancel();
++
++  base::FilePath file_path();
++
++  base::Time last_modified();
++
++ private:
++  ~DownloadFiltersTask();
++
++  void OnDownloadProgress(uint64_t current);
++  void OnResponseStarted(const GURL& final_url,
++                         const network::ResourceResponseHead& response_head);
++  void OnDownloadComplete(base::FilePath file_path,
++                                                    int net_error,
++                                                    int64_t content_size);
++  void OnHeadersDownloadComplete(scoped_refptr<net::HttpResponseHeaders> headers);
++  void createSimpleURLLoader(bool);
++  void internalDownload();
++
++  // Called when the task has completed either because the task has run or
++  // it has been canceled.
++  void TaskComplete(Error error);
++
++  base::ThreadChecker thread_checker_;
++  scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory_;
++  const bool is_foreground_;
++  Callback complete_callback_;
++  std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
++
++  // fields populated while downloading
++  base::TimeTicks download_start_time_;
++  GURL final_url_, filters_url_;
++  int response_code_;
++  base::Time last_modified_, min_last_modified_;
++  base::FilePath file_path_;
++
++  friend class base::RefCounted<DownloadFiltersTask>;
++  DISALLOW_COPY_AND_ASSIGN(DownloadFiltersTask);
++};
++
++}  // namespace update_client
++
++#endif  // COMPONENTS_DOWNLOAD_FILTERS_TASK_H_
+diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
+--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
++++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
+@@ -308,6 +308,17 @@ ContentSubresourceFilterThrottleManager::
+       throttle->NotifyPageActivationWithRuleset(EnsureRulesetHandle(),
+                                                 ad_tagging_state);
+     }
++
++    //TODO: could use same logic as in SubresourceFilterSafeBrowsingActivationThrottle::NotifyResult()
++    {
++      subresource_filter::ActivationDecision ignored_decision;
++      mojom::ActivationState ad_filtering_state;
++      ad_filtering_state.activation_level = client_->OnPageActivationComputed(
++	      navigation_handle, mojom::ActivationLevel::kEnabled, &ignored_decision);
++      throttle->NotifyPageActivationWithRuleset(EnsureRulesetHandle(),
++                                                ad_filtering_state);
++    }
++
+     return throttle;
+   }
+ 
+diff --git a/components/subresource_filter/content/browser/ruleset_service.cc b/components/subresource_filter/content/browser/ruleset_service.cc
+--- a/components/subresource_filter/content/browser/ruleset_service.cc
++++ b/components/subresource_filter/content/browser/ruleset_service.cc
+@@ -45,9 +45,7 @@ namespace {
+ 
+ void RecordIndexAndWriteRulesetResult(
+     RulesetService::IndexAndWriteRulesetResult result) {
+-  UMA_HISTOGRAM_ENUMERATION(
+-      "SubresourceFilter.WriteRuleset.Result", static_cast<int>(result),
+-      static_cast<int>(RulesetService::IndexAndWriteRulesetResult::MAX));
++  VLOG(1) << "SubresourceFilter.WriteRuleset.Result: " << static_cast<int>(result);
+ }
+ 
+ // Implements operations on a `sentinel file`, which is used as a safeguard to
+@@ -197,10 +195,13 @@ RulesetService::RulesetService(
+ RulesetService::~RulesetService() {}
+ 
+ void RulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
+-    const UnindexedRulesetInfo& unindexed_ruleset_info) {
+-  if (unindexed_ruleset_info.content_version.empty())
++    const UnindexedRulesetInfo& unindexed_ruleset_info, bool ignore_recent_version) {
++  if (unindexed_ruleset_info.content_version.empty()) {
++    LOG(INFO) << "RulesetService: ignoring update with empty version.";
+     return;
++  }
+ 
++  if (!ignore_recent_version) {
+   // Trying to store a ruleset with the same version for a second time would
+   // not only be futile, but would fail on Windows due to "File System
+   // Tunneling" as long as the previously stored copy of the rules is still
+@@ -210,13 +211,16 @@ void RulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
+   if (most_recently_indexed_version.IsCurrentFormatVersion() &&
+       most_recently_indexed_version.content_version ==
+           unindexed_ruleset_info.content_version) {
++    LOG(INFO) << "RulesetService: ignoring update with equal or older version.";
+     return;
+   }
++  }
+ 
+   // Before initialization, retain information about the most recently supplied
+   // unindexed ruleset, to be processed during initialization.
+   if (!is_initialized_) {
+     queued_unindexed_ruleset_info_ = unindexed_ruleset_info;
++    LOG(INFO) << "RulesetService: ignoring update while not initialized.";
+     return;
+   }
+ 
+@@ -235,6 +239,18 @@ IndexedRulesetVersion RulesetService::GetMostRecentlyIndexedVersion() const {
+ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+     const base::FilePath& indexed_ruleset_base_dir,
+     const UnindexedRulesetInfo& unindexed_ruleset_info) {
++  IndexedRulesetVersion version = IndexAndWriteRulesetInternal(indexed_ruleset_base_dir, unindexed_ruleset_info);
++  // cleanup temporary file when done
++  if (unindexed_ruleset_info.delete_ruleset_path) {
++    base::DeleteFile(unindexed_ruleset_info.ruleset_path, false);
++  }
++  return version;
++}
++
++// static
++IndexedRulesetVersion RulesetService::IndexAndWriteRulesetInternal(
++    const base::FilePath& indexed_ruleset_base_dir,
++    const UnindexedRulesetInfo& unindexed_ruleset_info) {
+   base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+                                                 base::BlockingType::MAY_BLOCK);
+ 
+@@ -242,6 +258,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+       unindexed_ruleset_info.ruleset_path,
+       base::File::FLAG_OPEN | base::File::FLAG_READ);
+   if (!unindexed_ruleset_file.IsValid()) {
++    LOG(WARNING) << "RulesetService: failed to open: " << unindexed_ruleset_info.ruleset_path;
+     RecordIndexAndWriteRulesetResult(
+         IndexAndWriteRulesetResult::FAILED_OPENING_UNINDEXED_RULESET);
+     return IndexedRulesetVersion();
+@@ -255,6 +272,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+           indexed_ruleset_base_dir, indexed_version);
+ 
+   if (!base::CreateDirectory(indexed_ruleset_version_dir)) {
++    LOG(WARNING) << "RulesetService: failed to create version dir: " << indexed_ruleset_version_dir;
+     RecordIndexAndWriteRulesetResult(
+         IndexAndWriteRulesetResult::FAILED_CREATING_VERSION_DIR);
+     return IndexedRulesetVersion();
+@@ -280,6 +298,7 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+ 
+   RulesetIndexer indexer;
+   if (!(*g_index_ruleset_func)(std::move(unindexed_ruleset_file), &indexer)) {
++    LOG(WARNING) << "RulesetService: failed parsing.";
+     RecordIndexAndWriteRulesetResult(
+         IndexAndWriteRulesetResult::FAILED_PARSING_UNINDEXED_RULESET);
+     return IndexedRulesetVersion();
+@@ -300,6 +319,8 @@ IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
+   if (result != IndexAndWriteRulesetResult::SUCCESS)
+     return IndexedRulesetVersion();
+ 
++  LOG(INFO) << "RulesetService: successful parsing.";
++
+   DCHECK(indexed_version.IsValid());
+   return indexed_version;
+ }
+@@ -424,6 +445,7 @@ void RulesetService::IndexAndStoreRuleset(
+ void RulesetService::OnWrittenRuleset(WriteRulesetCallback result_callback,
+                                       const IndexedRulesetVersion& version) {
+   DCHECK(!result_callback.is_null());
++  LOG(INFO) << "RulesetService: valid version: " << version.IsValid();
+   if (!version.IsValid())
+     return;
+   version.SaveToPrefs(local_state_);
+@@ -436,7 +458,6 @@ void RulesetService::OpenAndPublishRuleset(
+       IndexedRulesetLocator::GetRulesetDataFilePath(
+           IndexedRulesetLocator::GetSubdirectoryPathForVersion(
+               indexed_ruleset_base_dir_, version));
+-
+   publisher_->TryOpenAndSetRulesetFile(
+       file_path, version.checksum,
+       base::BindOnce(&RulesetService::OnRulesetSet, AsWeakPtr()));
+diff --git a/components/subresource_filter/content/browser/ruleset_service.h b/components/subresource_filter/content/browser/ruleset_service.h
+--- a/components/subresource_filter/content/browser/ruleset_service.h
++++ b/components/subresource_filter/content/browser/ruleset_service.h
+@@ -173,7 +173,7 @@ class RulesetService : public base::SupportsWeakPtr<RulesetService> {
+   //
+   // Virtual so that it can be mocked out in tests.
+   virtual void IndexAndStoreAndPublishRulesetIfNeeded(
+-      const UnindexedRulesetInfo& unindexed_ruleset_info);
++      const UnindexedRulesetInfo& unindexed_ruleset_info, bool ignore_recent_version = false);
+ 
+   // Get the ruleset version associated with the current local_state_.
+   IndexedRulesetVersion GetMostRecentlyIndexedVersion() const;
+@@ -206,6 +206,11 @@ class RulesetService : public base::SupportsWeakPtr<RulesetService> {
+       const base::FilePath& indexed_ruleset_base_dir,
+       const UnindexedRulesetInfo& unindexed_ruleset_info);
+ 
++  // internal function used to wrap the temporary file deletion for unindexed rulesets
++  static IndexedRulesetVersion IndexAndWriteRulesetInternal(
++      const base::FilePath& indexed_ruleset_base_dir,
++      const UnindexedRulesetInfo& unindexed_ruleset_info);
++
+   // Reads the rules from the |unindexed_ruleset_file|, and indexes them using
+   // |indexer|. Returns whether the entire ruleset could be parsed.
+   static bool IndexRuleset(base::File unindexed_ruleset_file,
+diff --git a/components/subresource_filter/content/browser/ruleset_version.cc b/components/subresource_filter/content/browser/ruleset_version.cc
+--- a/components/subresource_filter/content/browser/ruleset_version.cc
++++ b/components/subresource_filter/content/browser/ruleset_version.cc
+@@ -25,6 +25,7 @@ const char kSubresourceFilterRulesetChecksum[] =
+ }  // namespace
+ 
+ UnindexedRulesetInfo::UnindexedRulesetInfo() = default;
++UnindexedRulesetInfo::UnindexedRulesetInfo(const UnindexedRulesetInfo& other) = default;
+ UnindexedRulesetInfo::~UnindexedRulesetInfo() = default;
+ 
+ IndexedRulesetVersion::IndexedRulesetVersion() = default;
+diff --git a/components/subresource_filter/content/browser/ruleset_version.h b/components/subresource_filter/content/browser/ruleset_version.h
+--- a/components/subresource_filter/content/browser/ruleset_version.h
++++ b/components/subresource_filter/content/browser/ruleset_version.h
+@@ -25,6 +25,7 @@ namespace subresource_filter {
+ // filtering rules on disk.
+ struct UnindexedRulesetInfo {
+   UnindexedRulesetInfo();
++  UnindexedRulesetInfo(const UnindexedRulesetInfo& other);
+   ~UnindexedRulesetInfo();
+ 
+   // The version of the ruleset contents. Because the wire format of unindexed
+@@ -43,6 +44,10 @@ struct UnindexedRulesetInfo {
+   // can be indicated not only by setting |license_path| to empty, but also by
+   // setting it to any non existent path.
+   base::FilePath license_path;
++
++  // Whether to delete or not the ruleset path once done indexing; useful for disposal
++  // of temporary files.
++  bool delete_ruleset_path;
+ };
+ 
+ // Encapsulates the combination of the binary format version of the indexed
+diff --git a/components/subresource_filter/content/browser/verified_ruleset_dealer.cc b/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
+--- a/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
++++ b/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
+@@ -35,6 +35,8 @@ base::File VerifiedRulesetDealer::OpenAndSetRulesetFile(
+   TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("loading"),
+                "VerifiedRulesetDealer::OpenAndSetRulesetFile", "file_valid",
+                file.IsValid());
++
++  LOG(INFO) << "OpenAndSetRulesetFile: " << file_path << " is valid: " << file.IsValid();
+   if (file.IsValid()) {
+     SetRulesetFile(file.Duplicate());
+     expected_checksum_ = expected_checksum;
+diff --git a/components/subresource_filter/core/browser/subresource_filter_features.cc b/components/subresource_filter/core/browser/subresource_filter_features.cc
+--- a/components/subresource_filter/core/browser/subresource_filter_features.cc
++++ b/components/subresource_filter/core/browser/subresource_filter_features.cc
+@@ -53,69 +53,7 @@ class CommaSeparatedStrings {
+   DISALLOW_COPY_AND_ASSIGN(CommaSeparatedStrings);
+ };
+ 
+-std::string TakeVariationParamOrReturnEmpty(
+-    std::map<std::string, std::string>* params,
+-    const std::string& key) {
+-  auto it = params->find(key);
+-  if (it == params->end())
+-    return std::string();
+-  std::string value = std::move(it->second);
+-  params->erase(it);
+-  return value;
+-}
+-
+-mojom::ActivationLevel ParseActivationLevel(
+-    const base::StringPiece activation_level) {
+-  if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelEnabled))
+-    return mojom::ActivationLevel::kEnabled;
+-  else if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelDryRun))
+-    return mojom::ActivationLevel::kDryRun;
+-  return mojom::ActivationLevel::kDisabled;
+-}
+-
+-ActivationScope ParseActivationScope(const base::StringPiece activation_scope) {
+-  if (base::LowerCaseEqualsASCII(activation_scope, kActivationScopeAllSites))
+-    return ActivationScope::ALL_SITES;
+-  else if (base::LowerCaseEqualsASCII(activation_scope,
+-                                      kActivationScopeActivationList))
+-    return ActivationScope::ACTIVATION_LIST;
+-  return ActivationScope::NO_SITES;
+-}
+-
+-ActivationList ParseActivationList(std::string activation_lists_string) {
+-  CommaSeparatedStrings activation_lists(std::move(activation_lists_string));
+-  if (activation_lists.CaseInsensitiveContains(
+-          kActivationListPhishingInterstitial)) {
+-    return ActivationList::PHISHING_INTERSTITIAL;
+-  } else if (activation_lists.CaseInsensitiveContains(
+-                 kActivationListSocialEngineeringAdsInterstitial)) {
+-    return ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL;
+-  } else if (activation_lists.CaseInsensitiveContains(
+-                 kActivationListSubresourceFilter)) {
+-    return ActivationList::SUBRESOURCE_FILTER;
+-  } else if (activation_lists.CaseInsensitiveContains(
+-                 kActivationListBetterAds)) {
+-    return ActivationList::BETTER_ADS;
+-  }
+-  return ActivationList::NONE;
+-}
+-
+-// Will return a value between 0 and 1 inclusive.
+-double ParsePerformanceMeasurementRate(const std::string& rate) {
+-  double value = 0.0;
+-  if (!base::StringToDouble(rate, &value) || value < 0)
+-    return 0.0;
+-  return value < 1 ? value : 1;
+-}
+-
+-int ParseInt(const base::StringPiece value) {
+-  int result = 0;
+-  base::StringToInt(value, &result);
+-  return result;
+-}
+-
+-std::vector<Configuration> FillEnabledPresetConfigurations(
+-    std::map<std::string, std::string>* params) {
++std::vector<Configuration> FillEnabledPresetConfigurations() {
+   // If ad tagging is enabled, turn on the dryrun automatically.
+   bool ad_tagging_enabled = base::FeatureList::IsEnabled(kAdTagging);
+   const struct {
+@@ -123,25 +61,18 @@ std::vector<Configuration> FillEnabledPresetConfigurations(
+     bool enabled_by_default;
+     Configuration (*factory_method)();
+   } kAvailablePresetConfigurations[] = {
+-      {kPresetLiveRunOnPhishingSites, true,
++      {kPresetLiveRunOnPhishingSites, false,
+        &Configuration::MakePresetForLiveRunOnPhishingSites},
+       {kPresetPerformanceTestingDryRunOnAllSites, ad_tagging_enabled,
+        &Configuration::MakePresetForPerformanceTestingDryRunOnAllSites},
+-      {kPresetLiveRunForBetterAds, true,
++      {kPresetLiveRunForBetterAds, false,
+        &Configuration::MakePresetForLiveRunForBetterAds},
+       {kPresetLiveRunOnAllSites, true,
+        &Configuration::MakePresetForLiveRunOnAllSites}};
+ 
+-  CommaSeparatedStrings enabled_presets(
+-      TakeVariationParamOrReturnEmpty(params, kEnablePresetsParameterName));
+-  CommaSeparatedStrings disabled_presets(
+-      TakeVariationParamOrReturnEmpty(params, kDisablePresetsParameterName));
+-
+   std::vector<Configuration> enabled_configurations;
+   for (const auto& available_preset : kAvailablePresetConfigurations) {
+-    if ((enabled_presets.CaseInsensitiveContains(available_preset.name) ||
+-         available_preset.enabled_by_default) &&
+-        !disabled_presets.CaseInsensitiveContains(available_preset.name)) {
++    if (available_preset.enabled_by_default) {
+       enabled_configurations.push_back(available_preset.factory_method());
+     }
+   }
+@@ -149,46 +80,10 @@ std::vector<Configuration> FillEnabledPresetConfigurations(
+   return enabled_configurations;
+ }
+ 
+-Configuration ParseExperimentalConfiguration(
+-    std::map<std::string, std::string>* params) {
+-  Configuration configuration;
+-
+-  // ActivationConditions:
+-  configuration.activation_conditions.activation_scope = ParseActivationScope(
+-      TakeVariationParamOrReturnEmpty(params, kActivationScopeParameterName));
+-
+-  configuration.activation_conditions.activation_list = ParseActivationList(
+-      TakeVariationParamOrReturnEmpty(params, kActivationListsParameterName));
+-
+-  configuration.activation_conditions.priority =
+-      ParseInt(TakeVariationParamOrReturnEmpty(
+-          params, kActivationPriorityParameterName));
+-
+-  // ActivationOptions:
+-  configuration.activation_options.activation_level = ParseActivationLevel(
+-      TakeVariationParamOrReturnEmpty(params, kActivationLevelParameterName));
+-
+-  configuration.activation_options.performance_measurement_rate =
+-      ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
+-          params, kPerformanceMeasurementRateParameterName));
+-
+-  // GeneralSettings:
+-  configuration.general_settings.ruleset_flavor =
+-      TakeVariationParamOrReturnEmpty(params, kRulesetFlavorParameterName);
+-
+-  return configuration;
+-}
+-
+ std::vector<Configuration> ParseEnabledConfigurations() {
+-  std::map<std::string, std::string> params;
+-  base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, &params);
+-
+   std::vector<Configuration> configs;
+   if (base::FeatureList::IsEnabled(kSafeBrowsingSubresourceFilter))
+-    configs = FillEnabledPresetConfigurations(&params);
+-
+-  Configuration experimental_config = ParseExperimentalConfiguration(&params);
+-  configs.push_back(std::move(experimental_config));
++    configs = FillEnabledPresetConfigurations();
+ 
+   return configs;
+ }
+diff --git a/components/subresource_filter/core/common/common_features.cc b/components/subresource_filter/core/common/common_features.cc
+--- a/components/subresource_filter/core/common/common_features.cc
++++ b/components/subresource_filter/core/common/common_features.cc
+@@ -6,6 +6,6 @@
+ 
+ namespace subresource_filter {
+ 
+-const base::Feature kAdTagging{"AdTagging", base::FEATURE_ENABLED_BY_DEFAULT};
++const base::Feature kAdTagging{"AdTagging", base::FEATURE_DISABLED_BY_DEFAULT};
+ 
+ }  // namespace subresource_filter
+diff --git a/content/browser/frame_host/navigation_throttle_runner.cc b/content/browser/frame_host/navigation_throttle_runner.cc
+--- a/content/browser/frame_host/navigation_throttle_runner.cc
++++ b/content/browser/frame_host/navigation_throttle_runner.cc
+@@ -8,7 +8,6 @@
+ #include "content/browser/frame_host/ancestor_throttle.h"
+ #include "content/browser/frame_host/blocked_scheme_navigation_throttle.h"
+ #include "content/browser/frame_host/form_submission_throttle.h"
+-#include "content/browser/frame_host/history_navigation_ablation_study_navigation_throttle.h"
+ #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() {
+        devtools_instrumentation::CreateNavigationThrottles(handle)) {
+     AddThrottle(std::move(throttle));
+   }
+-
+-  // Delay navigation for an ablation study (if needed).
+-  AddThrottle(HistoryNavigationAblationStudyNavigationThrottle::
+-                  MaybeCreateForNavigation(handle));
+-
+-  // Insert all testing NavigationThrottles last.
+-  throttles_.insert(throttles_.end(),
+-                    std::make_move_iterator(testing_throttles.begin()),
+-                    std::make_move_iterator(testing_throttles.end()));
+ }
+ 
+ NavigationThrottle* NavigationThrottleRunner::GetDeferringThrottle() const {
+-- 
+2.11.0
+

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

@@ -10,35 +10,34 @@ without a visible effect.
 Credits to Slaviro (https://github.com/Slaviro) for coming up with a better
 approach to change color components.
 ---
- .../canvas/canvas2d/canvas_rendering_context_2d.cc |   4 +-
+ .../canvas/canvas2d/canvas_rendering_context_2d.cc |   3 +-
  .../modules/webgl/webgl_debug_renderer_info.cc     |   4 +-
  third_party/blink/renderer/platform/BUILD.gn       |   4 +-
  .../platform/graphics/image_data_buffer.cc         |   5 +
  .../platform/graphics/static_bitmap_image.cc       | 156 +++++++++++++++++++++
  .../platform/graphics/static_bitmap_image.h        |   2 +
- 6 files changed, 169 insertions(+), 6 deletions(-)
+ 6 files changed, 169 insertions(+), 5 deletions(-)
 
 diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
-@@ -33,8 +33,6 @@
+@@ -33,7 +33,6 @@
  
  #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
  
 -#include "base/rand_util.h"
--
+ #include "base/metrics/histogram_functions.h"
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/platform/platform.h"
- #include "third_party/blink/public/platform/task_type.h"
-@@ -811,7 +809,7 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
-                                            GetState().GetTextAlign(), text);
+@@ -817,7 +816,7 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+       "Canvas.TextMetrics.MeasureText", elapsed);
  
    // scale text metrics by 3/1000000th
 -  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
 +  auto shuffleFactor = 1 + (canvas()->GetDocument().GetShuffleFactorX() - 0.5) * 0.000003;
-   textMetrics->Shuffle(shuffleFactor);
+   text_metrics->Shuffle(shuffleFactor);
  
-   return textMetrics;
+   return text_metrics;
 diff --git a/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.cc b/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.cc
 --- a/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.cc
 +++ b/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.cc
@@ -59,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
-@@ -1402,7 +1402,9 @@ jumbo_component("platform") {
+@@ -1394,7 +1394,9 @@ jumbo_component("platform") {
      "//third_party/blink/renderer:non_test_config",
    ]
  
@@ -112,7 +111,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
  #include "third_party/skia/include/core/SkSurface.h"
  #include "third_party/skia/include/gpu/GrContext.h"
  #include "v8/include/v8.h"
-@@ -152,10 +155,163 @@ bool StaticBitmapImage::ConvertToArrayBufferContents(
+@@ -154,10 +157,163 @@ bool StaticBitmapImage::ConvertToArrayBufferContents(
    DCHECK(read_pixels_successful ||
           !sk_image->bounds().intersect(SkIRect::MakeXYWH(
               rect.X(), rect.Y(), info.width(), info.height())));

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

@@ -9,8 +9,8 @@ Subject: Disable NTP remote suggestions by default
 diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc
 --- a/components/ntp_snippets/features.cc
 +++ b/components/ntp_snippets/features.cc
-@@ -40,7 +40,7 @@ const base::Feature* const kAllFeatures[] = {
-     &kRemoteSuggestionsBackendFeature};
+@@ -39,7 +39,7 @@ const base::Feature* const kAllFeatures[] = {
+     &kOptionalImagesEnabledFeature};
  
  const base::Feature kArticleSuggestionsFeature{
 -    "NTPArticleSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
@@ -18,15 +18,15 @@ diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/featu
  
  const base::Feature kRemoteSuggestionsEmulateM58FetchingSchedule{
      "RemoteSuggestionsEmulateM58FetchingSchedule",
-@@ -70,7 +70,7 @@ const char kNotificationsDailyLimit[] = "daily_limit";
+@@ -69,7 +69,7 @@ const char kNotificationsDailyLimit[] = "daily_limit";
  const char kNotificationsIgnoredLimitParam[] = "ignored_limit";
  
  const base::Feature kKeepPrefetchedContentSuggestions{
 -    "KeepPrefetchedContentSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
 +    "KeepPrefetchedContentSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
  
- std::vector<const base::Feature*> GetAllFeatures() {
-   // Skip the last feature as it's a nullptr.
+ const base::Feature kOptionalImagesEnabledFeature{
+     "NTPRemoteSuggestionsOptionalImages", base::FEATURE_DISABLED_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
-@@ -438,7 +438,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
+@@ -439,7 +439,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
      base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kJellyBeanSupported{"JellyBeanSupported",

+ 31 - 16
build/patches/Disable-data-saver.patch

@@ -3,14 +3,15 @@ Date: Fri, 27 Oct 2017 15:53:37 +0200
 Subject: Disable data saver
 
 ---
- .../datareduction/DataReductionPreferenceFragment.java         | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
+ .../datareduction/DataReductionPreferenceFragment.java  | 17 +++++------------
+ chrome/android/java/strings/android_chrome_strings.grd  |  3 ---
+ 2 files changed, 5 insertions(+), 15 deletions(-)
 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/datareduction/DataReductionPreferenceFragment.java
-@@ -48,10 +48,10 @@ public class DataReductionPreferenceFragment extends PreferenceFragment {
- 
+@@ -45,10 +45,10 @@ public class DataReductionPreferenceFragment extends PreferenceFragmentCompat {
+     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
          PreferenceUtils.addPreferencesFromResource(this, R.xml.data_reduction_preferences);
          getActivity().setTitle(R.string.data_reduction_title_lite_mode);
 -        boolean isEnabled = DataReductionProxySettings.getInstance().isDataReductionProxyEnabled();
@@ -24,21 +25,35 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/dat
  
          setHasOptionsMenu(true);
  
-@@ -148,6 +148,7 @@ public class DataReductionPreferenceFragment extends PreferenceFragment {
+@@ -143,14 +143,7 @@ public class DataReductionPreferenceFragment extends PreferenceFragmentCompat {
+      * Returns summary string.
+      */
+     public static String generateSummary(Resources resources) {
+-        if (DataReductionProxySettings.getInstance().isDataReductionProxyEnabled()) {
+-            String percent =
+-                    DataReductionProxySettings.getInstance().getContentLengthPercentSavings();
+-            return resources.getString(
+-                    R.string.data_reduction_menu_item_summary_lite_mode, percent);
+-        } else {
+-            return (String) resources.getText(R.string.text_off);
+-        }
++        return (String) resources.getText(R.string.text_off);
      }
  
      private void createDataReductionSwitch(boolean isEnabled) {
-+        if (false) {
-         final ChromeSwitchPreference dataReductionSwitch =
-                 new ChromeSwitchPreference(getActivity(), null);
-         dataReductionSwitch.setKey(PREF_DATA_REDUCTION_SWITCH);
-@@ -175,5 +176,6 @@ public class DataReductionPreferenceFragment extends PreferenceFragment {
-         // (e.g. the switch will say "On" when data reduction is really turned off), so
-         // .setChecked() should be called after .addPreference()
-         dataReductionSwitch.setChecked(isEnabled);
-+        }
-     }
- }
+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
+@@ -1285,9 +1285,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>
+-      <message name="IDS_DATA_REDUCTION_MENU_ITEM_SUMMARY_LITE_MODE" desc="Label that states the percent of mobile data that was saved by Lite mode. Lite mode allows users to to reduce their mobile data usage by compressing network traffic.">
+-        <ph name="PERCENT">%1$s<ex>49%</ex></ph> data savings
+-      </message>
+       <message name="IDS_DATA_REDUCTION_SAVINGS_LABEL" desc="Data Reduction statistics label that states the amount of mobile data that was saved by Lite mode. Lite mode allows users to to reduce their mobile data usage by compressing network traffic.">
+         data saved
+       </message>
 -- 
 2.11.0
 

+ 25 - 25
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
-@@ -417,19 +417,6 @@ chrome_java_sources = [
+@@ -410,19 +410,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",
@@ -31,20 +31,20 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
 -  "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java",
 -  "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.java",
    "java/src/org/chromium/chrome/browser/customtabs/features/CustomTabNavigationBarController.java",
-   "java/src/org/chromium/chrome/browser/database/SQLiteCursor.java",
-   "java/src/org/chromium/chrome/browser/datareduction/DataReductionMainMenuItem.java",
+   "java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java",
+   "java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.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
-@@ -64,7 +64,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvid
+@@ -62,7 +62,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvid
  import org.chromium.chrome.browser.customtabs.content.TabCreationMode;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityComponent;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityModule;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
  import org.chromium.chrome.browser.customtabs.features.CustomTabNavigationBarController;
+ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
- import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor;
-@@ -138,9 +137,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -129,9 +128,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;
-@@ -324,12 +320,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -298,12 +294,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
      public void finishNativeInitialization() {
          if (!mIntentDataProvider.isInfoPage()) FirstRunSignInProcessor.start(this);
  
@@ -64,10 +64,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 -            mDynamicModuleCoordinator = getComponent().resolveDynamicModuleCoordinator();
 -        }
 -
-         LayoutManager layoutDriver = new LayoutManager(getCompositorViewHolder());
-         initializeCompositorContent(layoutDriver, findViewById(R.id.url_bar),
-                 (ViewGroup) findViewById(android.R.id.content),
-@@ -475,10 +465,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+         mSessionHandler = new SessionHandler() {
+ 
+             @Override
+@@ -433,10 +423,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
          WebContents webContents = tab == null ? null : tab.getWebContents();
          mConnection.resetPostMessageHandlerForSession(
                  mIntentDataProvider.getSession(), webContents);
@@ -77,8 +77,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
 -        }
      }
  
-     private void initalizePreviewsObserver() {
-@@ -918,10 +904,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+     @Override
+@@ -791,10 +777,6 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
          if (mIntentDataProvider.isTrustedWebActivity()) {
              component.resolveTrustedWebActivityCoordinator();
          }
@@ -92,9 +92,9 @@ 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
-@@ -43,7 +43,6 @@ import org.chromium.chrome.browser.ChromeVersionInfo;
+@@ -42,7 +42,6 @@ import org.chromium.chrome.browser.ChromeSwitches;
+ import org.chromium.chrome.browser.ChromeVersionInfo;
  import org.chromium.chrome.browser.IntentHandler;
- import org.chromium.chrome.browser.UrlConstants;
  import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
  import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
@@ -126,8 +126,8 @@ 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/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.WarmupManager;
- import org.chromium.chrome.browser.browserservices.BrowserSessionContentUtils;
+@@ -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;
  import org.chromium.chrome.browser.browserservices.PostMessageHandler;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleLoader;
@@ -135,7 +135,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
  import org.chromium.chrome.browser.device.DeviceClassManager;
  import org.chromium.chrome.browser.init.ChainedTasks;
  import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
-@@ -214,7 +212,6 @@ public class CustomTabsConnection {
+@@ -217,7 +215,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
-@@ -1323,7 +1320,6 @@ public class CustomTabsConnection {
+@@ -1354,7 +1351,6 @@ public class CustomTabsConnection {
          if (ChromeApplication.isSevereMemorySignal(level)) {
              getInstance().mClientManager.cleanupUnusedSessions();
          }
@@ -151,7 +151,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      }
  
      @VisibleForTesting
-@@ -1464,32 +1460,6 @@ public class CustomTabsConnection {
+@@ -1495,32 +1491,6 @@ public class CustomTabsConnection {
              CustomTabsSessionToken session, String url, String origin, int referrerPolicy,
              @DetachedResourceRequestMotivation int motivation);
  
@@ -187,24 +187,24 @@ 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
-@@ -15,8 +15,6 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigatio
+@@ -14,8 +14,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;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController;
+ 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;
- import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
-@@ -32,8 +30,6 @@ import dagger.Subcomponent;
+@@ -31,8 +29,6 @@ import dagger.Subcomponent;
  @ActivityScope
  public interface CustomTabActivityComponent extends ChromeActivityComponent {
      TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator();
 -    DynamicModuleToolbarController resolveDynamicModuleToolbarController();
 -    DynamicModuleCoordinator resolveDynamicModuleCoordinator();
  
-     TabObserverRegistrar resolveTabObserverRegistrar();
-     CustomTabTopBarDelegate resolveTobBarDelegate();
+     CustomTabBottomBarDelegate resolveBottomBarDelegate();
+     CustomTabActivityTabController resolveTabController();
 -- 
 2.11.0
 

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

@@ -11,7 +11,7 @@ Subject: Disable media router and remoting by default
 diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc
 --- a/chrome/browser/media/router/media_router_feature.cc
 +++ b/chrome/browser/media/router/media_router_feature.cc
-@@ -58,17 +58,16 @@ const PrefService::Preference* GetMediaRouterPref(
+@@ -57,17 +57,16 @@ const PrefService::Preference* GetMediaRouterPref(
  
  bool MediaRouterEnabled(content::BrowserContext* context) {
  #if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
@@ -40,7 +40,7 @@ diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browse
 diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
 --- a/chrome/browser/profiles/profile.cc
 +++ b/chrome/browser/profiles/profile.cc
-@@ -210,7 +210,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+@@ -223,7 +223,7 @@ void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
        prefs::kMediaRouterFirstRunFlowAcknowledged,
        false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
@@ -52,7 +52,7 @@ diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profil
 diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
 --- a/chrome/browser/profiles/profile_impl.cc
 +++ b/chrome/browser/profiles/profile_impl.cc
-@@ -434,7 +434,7 @@ void ProfileImpl::RegisterProfilePrefs(
+@@ -436,7 +436,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

@@ -10,7 +10,7 @@ Subject: Disable metrics collection for NTP tiles
 diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
 --- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
 +++ b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
-@@ -23,7 +23,6 @@
+@@ -25,7 +25,6 @@
  #include "chrome/browser/profiles/profile_android.h"
  #include "components/favicon_base/favicon_types.h"
  #include "components/history/core/browser/history_service.h"

+ 3 - 3
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
-@@ -952,7 +952,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -917,7 +917,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
-@@ -53,8 +53,6 @@
+@@ -49,8 +49,6 @@
  #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/policy_header_service.h"
  #include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
+ #include "components/prefs/pref_service.h"
 -- 
 2.11.0
 

+ 0 - 23
build/patches/Disable-network-service-by-default.patch

@@ -1,23 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Sat, 27 Jul 2019 10:07:24 +0200
-Subject: Disable network service by default
-
----
- services/network/public/cpp/features.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-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
-@@ -18,7 +18,7 @@ const base::Feature kNetworkErrorLogging{"NetworkErrorLogging",
-                                          base::FEATURE_ENABLED_BY_DEFAULT};
- // Enables the network service.
- const base::Feature kNetworkService{"NetworkService",
--                                    base::FEATURE_ENABLED_BY_DEFAULT};
-+                                    base::FEATURE_DISABLED_BY_DEFAULT};
- 
- // Out of Blink CORS
- const base::Feature kOutOfBlinkCors {
--- 
-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
-@@ -424,13 +424,13 @@ bool IDNToUnicodeOneComponent(const base::char16* comp,
+@@ -434,13 +434,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
-@@ -1232,10 +1232,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
+@@ -1186,10 +1186,8 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() {
  }
  
  PluginData* LocalFrame::GetPluginData() const {

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

@@ -6,10 +6,11 @@ Remove personalized signin promo view from
 bookmarks, never reach signin thresholds.
 ---
  .../personalized_signin_promo_view_bookmarks.xml   | 30 ------------
- .../browser/bookmarks/BookmarkItemsAdapter.java    | 23 +---------
- .../browser/bookmarks/BookmarkPromoHeader.java     | 53 +---------------------
+ .../browser/bookmarks/BookmarkItemsAdapter.java    | 23 +--------
+ .../browser/bookmarks/BookmarkPromoHeader.java     | 54 +---------------------
+ .../bookmarks/ReorderBookmarkItemsAdapter.java     | 19 +-------
  .../browser/signin/SigninPromoController.java      | 19 +-------
- 4 files changed, 5 insertions(+), 120 deletions(-)
+ 5 files changed, 7 insertions(+), 138 deletions(-)
  delete mode 100644 chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
 
 diff --git a/chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml b/chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
@@ -51,7 +52,7 @@ deleted file mode 100644
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
-@@ -57,7 +57,6 @@ class BookmarkItemsAdapter
+@@ -59,7 +59,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
  
      private BookmarkDelegate mDelegate;
      private Context mContext;
@@ -59,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private String mSearchText;
      private BookmarkId mCurrentFolder;
  
-@@ -211,9 +210,9 @@ class BookmarkItemsAdapter
+@@ -217,9 +216,9 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
  
          switch (viewType) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
@@ -71,7 +72,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
              case ViewType.FOLDER:
                  BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.from(
                          parent.getContext()).inflate(R.layout.bookmark_folder_row, parent, false);
-@@ -234,8 +233,6 @@ class BookmarkItemsAdapter
+@@ -240,8 +239,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
      public void onBindViewHolder(ViewHolder holder, int position) {
          switch (holder.getItemViewType()) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
@@ -80,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  break;
              case ViewType.SYNC_PROMO:
                  break;
-@@ -254,7 +251,6 @@ class BookmarkItemsAdapter
+@@ -260,7 +257,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
      public void onViewRecycled(ViewHolder holder) {
          switch (holder.getItemViewType()) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
@@ -88,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  break;
              default:
                  // Other view holders don't have special recycling code.
-@@ -289,7 +285,6 @@ class BookmarkItemsAdapter
+@@ -296,7 +292,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
              }
          };
  
@@ -96,7 +97,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          populateTopLevelFoldersList();
          notifyDataSetChanged();
      }
-@@ -300,7 +295,6 @@ class BookmarkItemsAdapter
+@@ -307,7 +302,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
          mDelegate.removeUIObserver(this);
          mDelegate.getModel().removeObserver(mBookmarkModelObserver);
          mDelegate = null;
@@ -104,7 +105,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      }
  
      @Override
-@@ -367,19 +361,6 @@ class BookmarkItemsAdapter
+@@ -397,19 +391,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
          if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
  
          assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
@@ -127,21 +128,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
-@@ -17,7 +17,6 @@ import android.view.ViewGroup;
- import org.chromium.base.ContextUtils;
+@@ -18,7 +18,6 @@ import org.chromium.base.ContextUtils;
  import org.chromium.base.VisibleForTesting;
  import org.chromium.chrome.R;
+ import org.chromium.chrome.browser.signin.IdentityServicesProvider;
 -import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView;
  import org.chromium.chrome.browser.signin.ProfileDataCache;
  import org.chromium.chrome.browser.signin.SigninAccessPoint;
  import org.chromium.chrome.browser.signin.SigninManager;
-@@ -131,18 +130,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -132,19 +131,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
      }
  
      /**
 -     * @return Personalized signin promo header {@link ViewHolder} instance that can be used with
 -     *         {@link RecyclerView}.
 -     */
+-    // TODO(crbug.com/160194): Clean up after bookmark reordering launches.
 -    ViewHolder createPersonalizedSigninPromoHolder(ViewGroup parent) {
 -        View view = LayoutInflater.from(mContext).inflate(
 -                R.layout.personalized_signin_promo_view_bookmarks, parent, false);
@@ -154,7 +156,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
       * @return Sync promo header {@link ViewHolder} instance that can be used with
       *         {@link RecyclerView}.
       */
-@@ -153,42 +140,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -156,42 +142,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          return new ViewHolder(view) {};
      }
  
@@ -197,7 +199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private @PromoState int calculatePromoState() {
          if (sPromoStateForTests != null) {
              return sPromoStateForTests;
-@@ -201,8 +152,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -204,8 +154,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          if (!ChromeSigninController.get().isSignedIn()) {
              boolean impressionLimitReached = !SigninPromoController.hasNotReachedImpressionLimit(
                      SigninAccessPoint.BOOKMARK_MANAGER);
@@ -207,7 +209,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  return PromoState.PROMO_NONE;
              }
              return PromoState.PROMO_SIGNIN_PERSONALIZED;
-@@ -250,7 +200,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -253,7 +202,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
      }
  
      private void triggerPromoUpdate() {
@@ -215,10 +217,65 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          mPromoHeaderChangeAction.run();
      }
  
+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
+         assert mDelegate != null;
+ 
+         switch (viewType) {
+-            case ViewType.PERSONALIZED_SIGNIN_PROMO:
+-                return mPromoHeaderManager.createPersonalizedSigninPromoHolder(parent);
+             case ViewType.SYNC_PROMO:
+                 return mPromoHeaderManager.createSyncPromoHolder(parent);
+             case ViewType.FOLDER:
+@@ -183,10 +181,7 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+ 
+     @Override
+     public void onBindViewHolder(ViewHolder holder, int position) {
+-        if (holder.getItemViewType() == ViewType.PERSONALIZED_SIGNIN_PROMO) {
+-            PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) holder.itemView;
+-            mPromoHeaderManager.setupPersonalizedSigninPromo(view);
+-        } 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
+ 
+     @Override
+     public void onViewRecycled(ViewHolder holder) {
+-        switch (holder.getItemViewType()) {
+-            case ViewType.PERSONALIZED_SIGNIN_PROMO:
+-                mPromoHeaderManager.detachPersonalizePromoView();
+-                break;
+-            default:
+-                // Other view holders don't have special recycling code.
+-        }
+     }
+ 
+     /**
+@@ -352,9 +340,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+                 case BookmarkPromoHeader.PromoState.PROMO_NONE:
+                     mPromoHeaderType = ViewType.INVALID_PROMO;
+                     break;
+-                case BookmarkPromoHeader.PromoState.PROMO_SIGNIN_PERSONALIZED:
+-                    mPromoHeaderType = ViewType.PERSONALIZED_SIGNIN_PROMO;
+-                    break;
+                 case BookmarkPromoHeader.PromoState.PROMO_SYNC:
+                     mPromoHeaderType = ViewType.SYNC_PROMO;
+                     break;
+@@ -475,4 +460,4 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
+             return Location.MIDDLE;
+         }
+     }
+-}
+\ No newline at end of file
++}
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
-@@ -77,23 +77,8 @@ public class SigninPromoController {
+@@ -73,23 +73,8 @@ public class SigninPromoController {
       */
      public static boolean hasNotReachedImpressionLimit(@AccessPoint int accessPoint) {
          SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences();

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

@@ -12,15 +12,15 @@ Subject: Disable references to fonts.googleapis.com
 diff --git a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 +++ b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
-@@ -309,7 +309,7 @@ bool DomDistillerViewerSource::ShouldServiceRequest(
+@@ -308,7 +308,7 @@ bool DomDistillerViewerSource::ShouldServiceRequest(
  }
  
- std::string DomDistillerViewerSource::GetContentSecurityPolicyStyleSrc() const {
+ std::string DomDistillerViewerSource::GetContentSecurityPolicyStyleSrc() {
 -  return "style-src 'self' https://fonts.googleapis.com;";
 +  return "style-src 'self';";
  }
  
- std::string DomDistillerViewerSource::GetContentSecurityPolicyChildSrc() const {
+ std::string DomDistillerViewerSource::GetContentSecurityPolicyChildSrc() {
 diff --git a/components/dom_distiller/core/html/preview.html b/components/dom_distiller/core/html/preview.html
 --- a/components/dom_distiller/core/html/preview.html
 +++ b/components/dom_distiller/core/html/preview.html
@@ -36,7 +36,7 @@ diff --git a/components/dom_distiller/core/html/preview.html b/components/dom_di
 diff --git a/components/dom_distiller/core/javascript/dom_distiller_viewer.js b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
 --- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js
 +++ b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
-@@ -123,7 +123,7 @@ function maybeSetWebFont() {
+@@ -130,7 +130,7 @@ function maybeSetWebFont() {
      return;
  
    var e = document.createElement('link');

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 667 - 89
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
-@@ -491,7 +491,7 @@ const base::Feature kRevampedContextMenu{"RevampedContextMenu",
+@@ -494,7 +494,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
-@@ -541,8 +541,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
+@@ -526,8 +526,10 @@ bool VariationsFieldTrialCreator::SetupFieldTrials(
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;
    if (!used_testing_config) {

+ 80 - 95
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   |  7 --
- .../browser/preferences/MainPreferences.java       | 92 +---------------------
- .../preferences/privacy/PrivacyPreferences.java    | 17 ----
+ .../android/java/res/xml/privacy_preferences.xml   |  4 -
+ .../browser/preferences/MainPreferences.java       | 86 +---------------------
+ .../preferences/privacy/PrivacyPreferences.java    | 12 ---
  .../java/strings/android_chrome_strings.grd        |  6 --
- 5 files changed, 1 insertion(+), 141 deletions(-)
+ 5 files changed, 1 insertion(+), 127 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,77 +17,70 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
 @@ -7,21 +7,6 @@
      android:orderingFromXml="false">
  
-     <PreferenceCategory
+     <android.support.v7.preference.PreferenceCategory
 -        android:key="account_section"
 -        android:order="0"
 -        android:title="@string/prefs_section_account"/>
--    <org.chromium.chrome.browser.preferences.SignInPreference
+-    <org.chromium.chrome.browser.preferences.sync.SignInPreference
 -        android:key="sign_in"
 -        android:order="1"
 -        android:title="@string/sign_in_to_chrome"/>
--    <org.chromium.chrome.browser.preferences.ChromeBasePreference
+-    <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
 -        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.SyncAndServicesPreferences"/>
+-        android:fragment="org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences"/>
 -
--    <PreferenceCategory
+-    <android.support.v7.preference.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.ChromeBasePreference
+     <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
 -        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.ChromeBasePreference
+-    <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat
          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
-@@ -55,11 +55,4 @@
+@@ -28,8 +28,4 @@
          android:title="@string/clear_browsing_data_title"
          android:summary="@string/clear_browsing_data_summary"
          android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" />
--    <Preference
--        android:key="sync_and_services_link_divider"
--        android:layout="@layout/divider_preference"
--        android:selectable="false"/>
--    <org.chromium.chrome.browser.preferences.TextMessagePreference
+-    <org.chromium.chrome.browser.preferences.TextMessagePreferenceCompat
 -        android:key="sync_and_services_link"
--        tools:summary="@string/privacy_sync_and_services_link"/>
- </PreferenceScreen>
+-        android:summary="@string/privacy_sync_and_services_link"
+-        app:allowDividerBelow="false" />
+ </android.support.v7.preference.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
-@@ -16,17 +16,13 @@ import org.chromium.base.ContextUtils;
+@@ -17,13 +17,11 @@ import org.chromium.base.ContextUtils;
  import org.chromium.base.VisibleForTesting;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ChromeFeatureList;
 -import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.night_mode.NightModeUtils;
+ import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchConfiguration;
  import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
  import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
  import org.chromium.chrome.browser.preferences.autofill_assistant.AutofillAssistantPreferences;
 -import org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment;
  import org.chromium.chrome.browser.preferences.developer.DeveloperPreferences;
- import org.chromium.chrome.browser.search_engines.TemplateUrl;
- import org.chromium.chrome.browser.search_engines.TemplateUrlService;
--import org.chromium.chrome.browser.signin.SigninManager;
--import org.chromium.chrome.browser.sync.ProfileSyncService;
- import org.chromium.chrome.browser.util.FeatureUtilities;
- 
- import java.util.HashMap;
-@@ -36,11 +32,7 @@ import java.util.Map;
+ import org.chromium.chrome.browser.preferences.sync.SignInPreference;
+ import org.chromium.chrome.browser.preferences.sync.SyncPreferenceUtils;
+@@ -42,16 +40,11 @@ import java.util.Map;
   * The main settings screen, shown when the user first opens Settings.
   */
- public class MainPreferences extends PreferenceFragment
+ public class MainPreferences extends PreferenceFragmentCompat
 -        implements TemplateUrlService.LoadListener, ProfileSyncService.SyncStateChangedListener,
 -                   SigninManager.SignInStateObserver {
 -    public static final String PREF_ACCOUNT_SECTION = "account_section";
@@ -97,15 +90,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      public static final String PREF_SEARCH_ENGINE = "search_engine";
      public static final String PREF_SAVED_PASSWORDS = "saved_passwords";
      public static final String PREF_HOMEPAGE = "homepage";
-@@ -59,7 +51,6 @@ public class MainPreferences extends PreferenceFragment
+     public static final String PREF_UI_THEME = "ui_theme";
+-    public static final String PREF_DATA_REDUCTION = "data_reduction";
+     public static final String PREF_NOTIFICATIONS = "notifications";
+     public static final String PREF_LANGUAGES = "languages";
+     public static final String PREF_DOWNLOADS = "downloads";
+@@ -65,7 +58,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
-     private final ManagedPreferenceDelegate mManagedPreferenceDelegate;
+     private final ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
      private final Map<String, Preference> mAllPreferences = new HashMap<>();
 -    private SignInPreference mSignInPreference;
  
      public MainPreferences() {
          setHasOptionsMenu(true);
-@@ -75,33 +66,16 @@ public class MainPreferences extends PreferenceFragment
+@@ -88,35 +80,16 @@ public class MainPreferences extends PreferenceFragmentCompat
      @Override
      public void onDestroy() {
          super.onDestroy();
@@ -115,8 +113,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      @Override
      public void onStart() {
          super.onStart();
--        if (SigninManager.get().isSigninSupported()) {
--            SigninManager.get().addSignInStateObserver(this);
+-        SigninManager signinManager = IdentityServicesProvider.getSigninManager();
+-        if (signinManager.isSigninSupported()) {
+-            signinManager.addSignInStateObserver(this);
 -            mSignInPreference.registerForUpdates();
 -        }
 -        ProfileSyncService syncService = ProfileSyncService.get();
@@ -128,8 +127,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      @Override
      public void onStop() {
          super.onStop();
--        if (SigninManager.get().isSigninSupported()) {
--            SigninManager.get().removeSignInStateObserver(this);
+-        SigninManager signinManager = IdentityServicesProvider.getSigninManager();
+-        if (signinManager.isSigninSupported()) {
+-            signinManager.removeSignInStateObserver(this);
 -            mSignInPreference.unregisterForUpdates();
 -        }
 -        ProfileSyncService syncService = ProfileSyncService.get();
@@ -139,16 +139,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      @Override
-@@ -114,17 +88,9 @@ public class MainPreferences extends PreferenceFragment
+@@ -129,12 +102,9 @@ public class MainPreferences extends PreferenceFragmentCompat
          PreferenceUtils.addPreferencesFromResource(this, R.xml.main_preferences);
          cachePreferences();
  
--        if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) {
--            mSignInPreference.setOnStateChangedCallback(this::onSignInPreferenceStateChanged);
--        } else {
--            getPreferenceScreen().removePreference(findPreference(PREF_ACCOUNT_SECTION));
--            getPreferenceScreen().removePreference(findPreference(PREF_SYNC_AND_SERVICES));
--        }
+-        mSignInPreference.setOnStateChangedCallback(this::onSignInPreferenceStateChanged);
 -
          updatePasswordsPreference();
  
@@ -157,7 +152,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
  
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              // If we are on Android O+ the Notifications preference should lead to the Android
-@@ -180,7 +146,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -188,7 +158,6 @@ public class MainPreferences extends PreferenceFragmentCompat
              Preference preference = getPreferenceScreen().getPreference(index);
              mAllPreferences.put(preference.getKey(), preference);
          }
@@ -165,11 +160,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
  
      private void setManagedPreferenceDelegateForPreference(String key) {
-@@ -189,13 +154,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -198,13 +167,6 @@ public class MainPreferences extends PreferenceFragmentCompat
      }
  
      private void updatePreferences() {
--        if (SigninManager.get().isSigninSupported()) {
+-        if (IdentityServicesProvider.getSigninManager().isSigninSupported()) {
 -            addPreferenceIfAbsent(PREF_SIGN_IN);
 -        } else {
 -            removePreferenceIfPresent(PREF_SIGN_IN);
@@ -179,34 +174,32 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
          updateSearchEnginePreference();
  
          Preference homepagePref = addPreferenceIfAbsent(PREF_HOMEPAGE);
-@@ -215,10 +173,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -224,10 +186,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          } else {
              removePreferenceIfPresent(PREF_DEVELOPER);
          }
 -
--        ChromeBasePreference dataReduction =
--                (ChromeBasePreference) findPreference(PREF_DATA_REDUCTION);
+-        ChromeBasePreferenceCompat dataReduction =
+-                (ChromeBasePreferenceCompat) findPreference(PREF_DATA_REDUCTION);
 -        dataReduction.setSummary(DataReductionPreferenceFragment.generateSummary(getResources()));
      }
  
      private Preference addPreferenceIfAbsent(String key) {
-@@ -232,15 +186,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -241,13 +199,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          if (preference != null) getPreferenceScreen().removePreference(preference);
      }
  
 -    private void updateSyncAndServicesPreference() {
--        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) return;
--
--        ChromeBasePreference syncAndServices =
--                (ChromeBasePreference) findPreference(PREF_SYNC_AND_SERVICES);
+-        ChromeBasePreferenceCompat syncAndServices =
+-                (ChromeBasePreferenceCompat) findPreference(PREF_SYNC_AND_SERVICES);
 -        syncAndServices.setIcon(SyncPreferenceUtils.getSyncStatusIcon(getActivity()));
 -        syncAndServices.setSummary(SyncPreferenceUtils.getSyncStatusSummary(getActivity()));
 -    }
 -
      private void updateSearchEnginePreference() {
-         if (!TemplateUrlService.getInstance().isLoaded()) {
-             ChromeBasePreference searchEnginePref =
-@@ -272,28 +217,6 @@ public class MainPreferences extends PreferenceFragment
+         if (!TemplateUrlServiceFactory.get().isLoaded()) {
+             ChromeBasePreferenceCompat searchEnginePref =
+@@ -279,28 +230,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          pref.setSummary(getResources().getString(isOn ? R.string.text_on : R.string.text_off));
      }
  
@@ -235,7 +228,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      // TemplateUrlService.LoadListener implementation.
      @Override
      public void onTemplateUrlServiceLoaded() {
-@@ -301,11 +224,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -308,11 +237,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSearchEnginePreference();
      }
  
@@ -245,19 +238,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 -    }
 -
      @VisibleForTesting
-     ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
+     ManagedPreferenceDelegateCompat getManagedPreferenceDelegateForTest() {
          return mManagedPreferenceDelegate;
-@@ -315,9 +233,6 @@ public class MainPreferences extends PreferenceFragment
-         return new ManagedPreferenceDelegate() {
+@@ -322,9 +246,6 @@ public class MainPreferences extends PreferenceFragmentCompat
+         return new ManagedPreferenceDelegateCompat() {
              @Override
              public boolean isPreferenceControlledByPolicy(Preference preference) {
 -                if (PREF_DATA_REDUCTION.equals(preference.getKey())) {
 -                    return DataReductionProxySettings.getInstance().isDataReductionProxyManaged();
 -                }
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
-                     return TemplateUrlService.getInstance().isDefaultSearchManaged();
+                     return TemplateUrlServiceFactory.get().isDefaultSearchManaged();
                  }
-@@ -326,11 +241,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -333,11 +254,6 @@ public class MainPreferences extends PreferenceFragmentCompat
  
              @Override
              public boolean isPreferenceClickDisabledByPolicy(Preference preference) {
@@ -267,56 +260,48 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 -                            && !settings.isDataReductionProxyEnabled();
 -                }
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
-                     return TemplateUrlService.getInstance().isDefaultSearchManaged();
+                     return TemplateUrlServiceFactory.get().isDefaultSearchManaged();
                  }
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
-@@ -27,7 +27,6 @@ import org.chromium.chrome.browser.preferences.Pref;
+@@ -22,7 +22,6 @@ import org.chromium.chrome.browser.preferences.Pref;
  import org.chromium.chrome.browser.preferences.PrefServiceBridge;
  import org.chromium.chrome.browser.preferences.PreferenceUtils;
  import org.chromium.chrome.browser.preferences.PreferencesLauncher;
--import org.chromium.chrome.browser.preferences.SyncAndServicesPreferences;
+-import org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences;
  import org.chromium.chrome.browser.profiles.Profile;
  import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog;
  import org.chromium.ui.text.NoUnderlineClickableSpan;
-@@ -49,9 +48,6 @@ public class PrivacyPreferences extends PreferenceFragment
+@@ -37,7 +36,6 @@ public class PrivacyPreferences
+     private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
+     private static final String PREF_USAGE_STATS = "usage_stats_reporting";
      private static final String PREF_DO_NOT_TRACK = "do_not_track";
-     private static final String PREF_USAGE_AND_CRASH_REPORTING = "usage_and_crash_reports";
-     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
--    private static final String PREF_SYNC_AND_SERVICES_LINK_DIVIDER =
--            "sync_and_services_link_divider";
 -    private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
-     private static final String PREF_USAGE_STATS = "usage_stats_reporting";
  
-     private ManagedPreferenceDelegate mManagedPreferenceDelegate;
-@@ -100,22 +96,9 @@ public class PrivacyPreferences extends PreferenceFragment
-             networkPredictionPref.setOrder(canMakePaymentPref.getOrder());
-             preferenceScreen.addPreference(networkPredictionPref);
+     private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate;
+ 
+@@ -62,16 +60,6 @@ public class PrivacyPreferences
+         networkPredictionPref.setOnPreferenceChangeListener(this);
+         networkPredictionPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
  
--            Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK);
--            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)));
+-        Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK);
+-        NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(getResources(), view -> {
+-            PreferencesLauncher.launchSettingsPageCompat(getActivity(),
+-                    SyncAndServicesPreferences.class,
+-                    SyncAndServicesPreferences.createArguments(false));
+-        });
+-        syncAndServicesLink.setSummary(
+-                SpanApplier.applySpans(getString(R.string.privacy_sync_and_services_link),
+-                        new SpanApplier.SpanInfo("<link>", "</link>", linkSpan)));
 -
-             updateSummaries();
-             return;
-         }
--        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK_DIVIDER));
--        preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK));
+         updateSummaries();
+     }
  
-         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
-@@ -327,9 +327,6 @@ CHAR-LIMIT guidelines:
+@@ -339,9 +339,6 @@ CHAR-LIMIT guidelines:
        </message>
  
        <!-- Sign-in, sync and personalization preferences -->
@@ -326,7 +311,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>
-@@ -415,9 +412,6 @@ CHAR-LIMIT guidelines:
+@@ -412,9 +409,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
-@@ -791,35 +791,7 @@ public class ChromeTabbedActivity
+@@ -785,35 +785,7 @@ public class ChromeTabbedActivity
          try (TraceEvent e = TraceEvent.scoped(
                       "ChromeTabbedActivity.createToolbarButtonInProductHelpController")) {
              ChromePreferenceManager preferenceManager = ChromePreferenceManager.getInstance();

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

@@ -10,15 +10,15 @@ author: Chad Miller <chad.miller@canonical.com>
 diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc
 --- a/components/content_settings/core/browser/cookie_settings.cc
 +++ b/components/content_settings/core/browser/cookie_settings.cc
-@@ -50,7 +50,7 @@ void CookieSettings::GetCookieSettings(
+@@ -57,7 +57,7 @@ void CookieSettings::GetCookieSettings(
  void CookieSettings::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
 -      prefs::kBlockThirdPartyCookies, false,
 +      prefs::kBlockThirdPartyCookies, true,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
- }
- 
+   registry->RegisterBooleanPref(
+       prefs::kCookieControlsEnabled, false,
 -- 
 2.11.0
 

+ 2 - 2
build/patches/Disable-unified-consent-on-Android.patch

@@ -13,8 +13,8 @@ diff --git a/components/unified_consent/feature.cc b/components/unified_consent/
  // base::Feature definition.
  const base::Feature kUnifiedConsent {
    "UnifiedConsent",
--#if defined(OS_CHROMEOS) || defined(OS_IOS)
-+#if defined(OS_CHROMEOS) || defined(OS_IOS) || defined(OS_ANDROID)
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
        base::FEATURE_DISABLED_BY_DEFAULT
  #else
        base::FEATURE_ENABLED_BY_DEFAULT

+ 10 - 10
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
-@@ -1092,8 +1092,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
+@@ -1131,8 +1131,7 @@ jinja_template_resources("chrome_public_apk_template_resources") {
    resources = [
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/launchershortcuts.xml",
@@ -37,8 +37,8 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 +    "java/res_template/xml/searchable.xml"
    ]
    res_dir = "java/res_template"
-   variables = [ "manifest_package=$manifest_package" ]
-@@ -1104,7 +1103,6 @@ jinja_template_resources("chrome_test_apk_template_resources") {
+   variables = [ "manifest_package=$chrome_public_manifest_package" ]
+@@ -1143,7 +1142,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",
@@ -49,7 +49,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 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
-@@ -48,22 +48,16 @@ by a child template that "extends" this file.
+@@ -47,22 +47,16 @@ by a child template that "extends" this file.
      {% if target_sdk_version|int > 27 or target_sdk_version == "Q" %}
          <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
      {% endif %}
@@ -72,7 +72,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
      {% set enable_vr = enable_vr|default(0) %}
      {% if enable_vr == "true" %}
      <!-- Indicates use of Android's VR-mode, available only on Android N+. -->
-@@ -101,8 +95,6 @@ by a child template that "extends" this file.
+@@ -103,8 +97,6 @@ by a child template that "extends" this file.
      <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
      <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
      {% block extra_uses_permissions %}
      {% endblock %}
  
-@@ -980,16 +972,6 @@ by a child template that "extends" this file.
+@@ -981,16 +973,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>
-@@ -1095,15 +1077,6 @@ by a child template that "extends" this file.
+@@ -1098,15 +1080,6 @@ by a child template that "extends" this file.
          <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
              android:exported="false"/>
  
@@ -117,7 +117,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
 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
-@@ -127,8 +127,6 @@ import org.chromium.chrome.browser.share.ShareMenuActionHandler;
+@@ -126,8 +126,6 @@ import org.chromium.chrome.browser.share.ShareMenuActionHandler;
  import org.chromium.chrome.browser.snackbar.BottomContainer;
  import org.chromium.chrome.browser.snackbar.SnackbarManager;
  import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable;
@@ -136,7 +136,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      @Nullable
      private ChromeFullscreenManager mFullscreenManager;
  
-@@ -903,28 +898,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -906,28 +901,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
      private void createContextReporterIfNeeded() {
          if (!mStarted) return; // Sync state reporting should work only in started state.
          if (mContextReporter != null || getActivityTab() == null) return;
@@ -165,7 +165,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      }
  
      @Override
-@@ -992,13 +965,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -995,13 +968,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          if (GSAState.getInstance(this).isGsaAvailable() && !SysUtils.isLowEndDevice()) {
              GSAAccountChangeListener.getInstance().disconnect();
          }

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

+ 1 - 1
build/patches/Do-not-record-UMA-for-network-errors.patch

@@ -9,7 +9,7 @@ Subject: Do not record UMA for network errors
 diff --git a/services/network/network_context.cc b/services/network/network_context.cc
 --- a/services/network/network_context.cc
 +++ b/services/network/network_context.cc
-@@ -384,23 +384,6 @@ class NetworkContext::ContextNetworkDelegate
+@@ -393,23 +393,6 @@ class NetworkContext::ContextNetworkDelegate
                                                                   started);
      }
  

+ 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
-@@ -357,10 +357,10 @@ void PasswordManager::RegisterProfilePrefs(
+@@ -359,10 +359,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
-@@ -249,7 +249,7 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
+@@ -270,7 +270,7 @@ const char kDisallowUnsafeHttpDownloadsParamName[] = "MimeTypeList";
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",

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

@@ -9,7 +9,7 @@ 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
-@@ -394,7 +394,7 @@ const base::Feature kDownloadHomeShowStorageInfo{
+@@ -395,7 +395,7 @@ const base::Feature kDownloadHomeShowStorageInfo{
      "DownloadHomeShowStorageInfo", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kDownloadRename{"DownloadRename",

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

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

+ 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
-@@ -234,7 +234,7 @@ const base::Feature kAdjustWebApkInstallationSpace = {
+@@ -235,7 +235,7 @@ const base::Feature kAdjustWebApkInstallationSpace = {
      "AdjustWebApkInstallationSpace", base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kAndroidNightMode{"AndroidNightMode",

+ 0 - 23
build/patches/Enable-secure-DNS-mode-by-default-in-DnsTransaction.patch

@@ -1,23 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Fri, 15 Mar 2019 10:05:14 +0100
-Subject: Enable secure DNS mode by default in DnsTransaction
-
----
- net/dns/host_resolver_manager.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-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
-@@ -1065,7 +1065,7 @@ class HostResolverManager::DnsTask : public base::SupportsWeakPtr<DnsTask> {
-     DCHECK(client_);
-     DCHECK_NE(DnsQueryType::UNSPECIFIED, dns_query_type);
-     DnsConfig::SecureDnsMode secure_dns_mode =
--        DnsConfig::SecureDnsMode::AUTOMATIC;
-+        DnsConfig::SecureDnsMode::SECURE;
-     // Downgrade to OFF mode if the query name for this attempt matches one of
-     // the DoH server names. This is needed to prevent infinite recursion.
-     DCHECK(client_->GetConfig());
--- 
-2.11.0
-

+ 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
-@@ -553,11 +553,7 @@ const base::Feature kShowTrustedPublisherURL{"ShowTrustedPublisherURL",
+@@ -609,11 +609,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
-@@ -579,7 +575,7 @@ const base::Feature kSiteIsolationForPasswordSites{
+@@ -635,7 +631,7 @@ const base::Feature kSiteIsolationForPasswordSites{
  // base::SysInfo::AmountOfPhysicalMemoryMB().
  const base::Feature kSitePerProcessOnlyForHighMemoryClients{
      "site-per-process-only-for-high-memory-clients",

+ 0 - 56
build/patches/Expose-flag-to-toggle-network-service.patch

@@ -1,56 +0,0 @@
-From: csagan5 <32685696+csagan5@users.noreply.github.com>
-Date: Sat, 27 Jul 2019 10:06:57 +0200
-Subject: Expose flag to toggle network service
-
----
- chrome/browser/about_flags.cc       | 5 +++++
- chrome/browser/flag_descriptions.cc | 5 +++++
- chrome/browser/flag_descriptions.h  | 3 +++
- 3 files changed, 13 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
-@@ -2651,6 +2651,11 @@ const FeatureEntry kFeatureEntries[] = {
-      FEATURE_VALUE_TYPE(features::kHandwritingGesture)},
- #endif  // OS_CHROMEOS
- 
-+    {"network-service",
-+     flag_descriptions::kEnableNetworkServiceName,
-+     flag_descriptions::kEnableNetworkServiceDescription, kOsAll,
-+     FEATURE_VALUE_TYPE(network::features::kNetworkService)},
-+
-     {"network-service-in-process",
-      flag_descriptions::kEnableNetworkServiceInProcessName,
-      flag_descriptions::kEnableNetworkServiceInProcessDescription, kOsAll,
-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
-@@ -699,6 +699,11 @@ const char kEnableNetworkLoggingToFileDescription[] =
-     "Enables network logging to a file named netlog.json in the user data "
-     "directory. The file can be imported into chrome://net-internals.";
- 
-+const char kEnableNetworkServiceName[] =
-+    "Enables network service";
-+const char kEnableNetworkServiceDescription[] =
-+    "Enables the network service.";
-+
- const char kEnableNetworkServiceInProcessName[] =
-     "Runs network service in-process";
- const char kEnableNetworkServiceInProcessDescription[] =
-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
-@@ -427,6 +427,9 @@ extern const char kEnableNavigationTracingDescription[];
- extern const char kEnableNetworkLoggingToFileName[];
- extern const char kEnableNetworkLoggingToFileDescription[];
- 
-+extern const char kEnableNetworkServiceName[];
-+extern const char kEnableNetworkServiceDescription[];
-+
- extern const char kEnableNetworkServiceInProcessName[];
- extern const char kEnableNetworkServiceInProcessDescription[];
- 
--- 
-2.11.0
-

+ 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
-@@ -702,6 +702,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
+@@ -713,6 +713,9 @@ PermissionResult PermissionManager::GetPermissionStatusHelper(
    if (status != CONTENT_SETTING_DEFAULT)
      return PermissionResult(status, PermissionStatusSource::UNSPECIFIED);
    PermissionContextBase* context = GetPermissionContext(permission);

+ 3 - 3
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
-@@ -249,7 +249,7 @@ public class SavePasswordsPreferences
+@@ -242,7 +242,7 @@ public class SavePasswordsPreferences
              return;
          }
  
@@ -18,14 +18,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pas
  
          PreferenceGroup passwordParent;
          if (mSearchQuery == null) {
-@@ -324,7 +324,7 @@ public class SavePasswordsPreferences
+@@ -317,7 +317,7 @@ public class SavePasswordsPreferences
              return;
          }
  
 -        displayManageAccountLink();
 +        //displayManageAccountLink();
  
-         PreferenceCategory profileCategory = new PreferenceCategory(getActivity());
+         PreferenceCategory profileCategory = new PreferenceCategory(getStyledContext());
          profileCategory.setKey(PREF_KEY_CATEGORY_EXCEPTIONS);
 -- 
 2.11.0

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

@@ -8,12 +8,12 @@ allow playing videos in background (original Javascript code by timdream)
 Send a random key press to circumvent idle status detection
 ---
  third_party/blink/renderer/core/dom/BUILD.gn       |  2 ++
- third_party/blink/renderer/core/dom/document.cc    | 32 +++++++++++++++++++++-
- .../renderer/core/dom/extensions/anti_amp_cure.h   |  6 ++++
- .../renderer/core/dom/extensions/video_bg_play.h   |  6 ++++
+ third_party/blink/renderer/core/dom/document.cc    | 31 +++++++++++++++++++++-
+ .../renderer/core/dom/extensions/anti_amp_cure.h   |  6 +++++
+ .../renderer/core/dom/extensions/video_bg_play.h   |  6 +++++
  .../renderer/core/html/html_script_element.cc      |  5 ++++
  .../blink/renderer/core/html/html_script_element.h |  1 +
- 6 files changed, 51 insertions(+), 1 deletion(-)
+ 6 files changed, 50 insertions(+), 1 deletion(-)
  create mode 100644 third_party/blink/renderer/core/dom/extensions/anti_amp_cure.h
  create mode 100644 third_party/blink/renderer/core/dom/extensions/video_bg_play.h
 
@@ -32,7 +32,7 @@ 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
-@@ -246,6 +246,7 @@
+@@ -248,6 +248,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"
@@ -40,7 +40,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h"
  #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h"
  #include "third_party/blink/renderer/core/page/spatial_navigation_controller.h"
-@@ -310,6 +311,8 @@
+@@ -314,6 +315,8 @@
  #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h"
  #include "third_party/blink/renderer/platform/wtf/time.h"
  
@@ -49,7 +49,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
  #ifndef NDEBUG
  using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
  static WeakDocumentSet& liveDocumentSet();
-@@ -6132,8 +6135,35 @@ void Document::FinishedParsing() {
+@@ -6540,8 +6543,34 @@ void Document::FinishedParsing() {
    // Parser should have picked up all preloads by now
    fetcher_->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
  
@@ -64,11 +64,10 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink
 +  if ((host == nullptr) || host.IsEmpty())
 +    return;
 +
-+  LOG(INFO) << "checking URL host for possible injections: " << host;
 +  auto* bodyElement = body();
 +  if (bodyElement) {
-+    size_t pos1 = host.Find("www.google."), pos2 = host.Find("news.google.");
-+    if ((pos1 == 0) || (pos2 == 0)) {
++    size_t pos1 = host.Find("www.google."), pos2 = host.Find("news.google."), pos3 = url_.GetPath().Find("/search");
++    if (((pos1 == 0) && (pos3 == 0)) || (pos2 == 0)) {
 +      LOG(INFO) << "injecting anti-AMP-cure Javascript payload, URL: " << url_.GetString();
 +      HTMLScriptElement* e = MakeGarbageCollected<HTMLScriptElement>(*this, CreateElementFlags());
 +      e->setTextDirect(ANTI_AMP_CURE_JS);
@@ -132,8 +131,8 @@ diff --git a/third_party/blink/renderer/core/html/html_script_element.h b/third_
    void setTextContent(const StringOrTrustedScript&, ExceptionState&) override;
 +  void setTextDirect(const char*);
  
-   KURL Src() const;
- 
+   void setAsync(bool);
+   bool async() const;
 -- 
 2.11.0
 

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

@@ -24,7 +24,7 @@ Do not hide component extensions
 diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
 --- a/chrome/browser/background/background_mode_manager.cc
 +++ b/chrome/browser/background/background_mode_manager.cc
-@@ -303,7 +303,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
+@@ -301,7 +301,7 @@ void BackgroundModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
    registry->RegisterBooleanPref(prefs::kChromeCreatedLoginItem, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
  #endif
@@ -36,7 +36,7 @@ diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/brows
 diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -1199,7 +1199,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
+@@ -1177,7 +1177,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -48,7 +48,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
 diff --git a/chrome/browser/net/prediction_options.cc b/chrome/browser/net/prediction_options.cc
 --- a/chrome/browser/net/prediction_options.cc
 +++ b/chrome/browser/net/prediction_options.cc
-@@ -32,7 +32,7 @@ NetworkPredictionStatus CanPrefetchAndPrerender(
+@@ -31,7 +31,7 @@ NetworkPredictionStatus CanPrefetchAndPrerender(
        }
        return NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK;
      default:
@@ -60,7 +60,7 @@ diff --git a/chrome/browser/net/prediction_options.cc b/chrome/browser/net/predi
 diff --git a/chrome/browser/net/prediction_options.h b/chrome/browser/net/prediction_options.h
 --- a/chrome/browser/net/prediction_options.h
 +++ b/chrome/browser/net/prediction_options.h
-@@ -23,7 +23,7 @@ enum NetworkPredictionOptions {
+@@ -22,7 +22,7 @@ enum NetworkPredictionOptions {
    NETWORK_PREDICTION_ALWAYS,
    NETWORK_PREDICTION_WIFI_ONLY,
    NETWORK_PREDICTION_NEVER,
@@ -84,8 +84,8 @@ diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profil
 diff --git a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
 --- a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
 +++ b/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
-@@ -52,7 +52,7 @@
-         </paper-button>
+@@ -50,7 +50,7 @@
+         </cr-button>
        </div>
        <div slot="footer">
 -        <cr-checkbox id="sendSettings" checked>
@@ -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
-@@ -406,10 +406,7 @@ bool AutofillManager::ShouldParseForms(const std::vector<FormData>& forms,
+@@ -425,10 +425,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;
  }
-@@ -685,10 +682,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
+@@ -704,10 +701,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
      }
    }
  
-@@ -1279,8 +1273,8 @@ void AutofillManager::Reset() {
+@@ -1311,8 +1305,8 @@ void AutofillManager::Reset() {
  #if defined(OS_ANDROID) || defined(OS_IOS)
    autofill_assistant_.Reset();
  #endif
@@ -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
-@@ -440,12 +440,12 @@ void GetBookmarksMatchingProperties(BookmarkModel* model,
+@@ -433,12 +433,12 @@ void GetBookmarksMatchingProperties(BookmarkModel* model,
  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
-@@ -149,9 +149,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+@@ -153,9 +153,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
-@@ -281,6 +281,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
+@@ -280,6 +280,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download,
    DCHECK(!callback_);
    callback_ = callback;
  

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

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

+ 1 - 1
build/patches/Punt-the-Widevine-version-string.patch

@@ -10,7 +10,7 @@ Originally from http://bazaar.launchpad.net/~saiarcot895/chromium-browser/chromi
 diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc
 --- a/chrome/common/chrome_content_client.cc
 +++ b/chrome/common/chrome_content_client.cc
-@@ -522,7 +522,7 @@ void ChromeContentClient::AddContentDecryptionModules(
+@@ -517,7 +517,7 @@ void ChromeContentClient::AddContentDecryptionModules(
      base::FilePath cdm_path;
      content::CdmCapability capability;
      if (IsWidevineAvailable(&cdm_path, &capability)) {

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

@@ -3,168 +3,28 @@ Date: Wed, 22 Mar 2017 19:10:30 -0400
 Subject: Remove background sync and translate menu options
 
 ---
- .../java/res/drawable-hdpi/settings_translate.png     | Bin 399 -> 0 bytes
- .../java/res/drawable-mdpi/settings_translate.png     | Bin 284 -> 0 bytes
- .../java/res/drawable-xhdpi/settings_translate.png    | Bin 547 -> 0 bytes
- .../java/res/drawable-xxhdpi/settings_translate.png   | Bin 793 -> 0 bytes
- .../java/res/drawable-xxxhdpi/settings_translate.png  | Bin 1038 -> 0 bytes
- .../java/res/xml/site_settings_preferences.xml        |   8 ++++----
- .../preferences/website/SiteSettingsPreferences.java  |  18 ++----------------
- 7 files changed, 6 insertions(+), 20 deletions(-)
- delete mode 100644 chrome/android/java/res/drawable-hdpi/settings_translate.png
- delete mode 100644 chrome/android/java/res/drawable-mdpi/settings_translate.png
- delete mode 100644 chrome/android/java/res/drawable-xhdpi/settings_translate.png
- delete mode 100644 chrome/android/java/res/drawable-xxhdpi/settings_translate.png
- delete mode 100644 chrome/android/java/res/drawable-xxxhdpi/settings_translate.png
-
-diff --git a/chrome/android/java/res/drawable-hdpi/settings_translate.png b/chrome/android/java/res/drawable-hdpi/settings_translate.png
-deleted file mode 100644
-index 8067680e81c6ffa1a003c579411173827a3a9f96..0000000000000000000000000000000000000000
-GIT binary patch
-literal 0
-HcmV?d00001
-
-literal 399
-zcmV;A0dW3_P)<h;3K|Lk000e1NJLTq001Na001Ni1ONa4O9@aD00042Nkl<ZcwWuc
-zJxjwt0LJme7er{c_yr2Oml}2V3s~G9aP6!}z(tU5et?4AT-<~%x+sFhO}e^tsU(Y=
-z0hgddd^pNsLc+Z{l>hP^9KR_C@$!FaVIla45F@WCMg$)o)DW3mQKSdON+{NY%D^rw
-zQ6|u}ti|NX7$R7iF@)z*9c+qa0?AUm<7d7%a4MD+^aKw>u^zc5))3o43mLu<Vh_0s
-z^onI1i*NbG31VmP*$I~u^o9@~3%Mjy{|2j}Ph4OPO<b`i*Ms^ERzc?^JnUm8&>5G;
-z8!SRo0o`C5w_HXQp+hq2?!?{u8c0%8C3Jue>()aulqxVESiz93aydblXyA)AxSXIZ
-z^u+3MIY49igeSZ=wug@XJ`tWQp%m)~(480Xl-fZ9?!ILEyg9Ig+E_v&p@gTlA*4tf
-tij`2N2SrL~qywpbE;5V|EcpMCd%u4DGPZTzo=E@z002ovPDHLkV1m$asKNjM
-
-diff --git a/chrome/android/java/res/drawable-mdpi/settings_translate.png b/chrome/android/java/res/drawable-mdpi/settings_translate.png
-deleted file mode 100644
-index 3b9b4cd482d36a60d4ff0a110b0bcefabe4c1060..0000000000000000000000000000000000000000
-GIT binary patch
-literal 0
-HcmV?d00001
-
-literal 284
-zcmV+%0ptFOP)<h;3K|Lk000e1NJLTq000;O000;W1ONa4N`Cco0002vNkl<ZcwV*C
-zy$-=p90hPI21^H{kVr7~0h$;*gq(zkcms==tbG8pC$M2)sTe$f#Kz1feE^(W(wipt
-z>YqeTIHw=KscAEhFY_CKhZ7#j@Qh~#`t~HT1AWt&iOFYBic(;rl@5Y9UG&&#fH`9r
-zbqhPT0Nhc-8hg~aB!JnVj0zT9La;<0Ijq#SJr@m*036I22Uj!E;6TtuAD4*o-y97Z
-ziWuYbs-FagXn-mvsLH_>O?Hzl1RVtIfGq+yWZ%bGZULC0h?xp|DgiD=uf=xl!2Uvo
-icHkLEh=B&e`~;qlBW{m=6s{@&0000<MNUMnLSTX)y>C|l
-
-diff --git a/chrome/android/java/res/drawable-xhdpi/settings_translate.png b/chrome/android/java/res/drawable-xhdpi/settings_translate.png
-deleted file mode 100644
-index 131a57394ca30dcff4bebcb2471bbbf0e1ac134e..0000000000000000000000000000000000000000
-GIT binary patch
-literal 0
-HcmV?d00001
-
-literal 547
-zcmV+;0^I$HP)<h;3K|Lk000e1NJLTq001xm001xu1ONa4{R=S+0005%Nkl<ZcwX(-
-zziU%b9ER~X&>vK2=pT?4!CJ8B5V|`lSO?MdsRak2|3E2<Ew~ov3nC6K4yBGdHyIT=
-z*iKQTa&gEaRP2_R<9E1(_FiJ{F<-%<Je=X3K5*}FI12x`^1wNOsFIKphLn;}MY&1<
-zRa%6SwW!7e2_d2+9!QG-C&)S}0;KUkhyudj0~b#<hpahU{YD2gq>+I}uBO%C0%8~2
-zqX2{ZjJTXFC*U;?c-ddi5s!R<4~S{LXX_djTCRX~3-JV7yh7Y2cms!wTkrY83}bwB
-z2dpi`B^D8n3HSqaSVYzpI`{+pWDRAl*>VMX>`+5Y@YI?>wsz=YK)L(kPe6xV>d0E+
-zF#Fw0h$>%W?u)^|9b`@O%&0zU>qXpsF&Oy9RW@l8a&@DCv<Q46cvb|~;{k3U>t;Ei
-z!kb9ohzhbQ9F+l#U_I(XZ6fPFVyg@=tm03vA!hhtr^YXT;4QKq66}a~{=i*iH3)XZ
-zJ#V1R7-E(l!Okq>w0(hXWNl<?1F`K3EFkM3TL*{*PoRnN1<~{aRuPk2Kh<Oqt6sn{
-zQ;3x_<Vp}z9QyzXvi8mZd)X7f1*jwDbN5@1`5@{JK-uDfGz#d(14$IH9}C1i5_>Gi
-l0_C5%UG`c2pI-Xsz;EN&!BMZ3jZy#r002ovPDHLkV1l>+@2da+
-
-diff --git a/chrome/android/java/res/drawable-xxhdpi/settings_translate.png b/chrome/android/java/res/drawable-xxhdpi/settings_translate.png
-deleted file mode 100644
-index 55878e697b1afed1b4f039a561dc6212e24fc024..0000000000000000000000000000000000000000
-GIT binary patch
-literal 0
-HcmV?d00001
-
-literal 793
-zcmV+!1LpjRP)<h;3K|Lk000e1NJLTq002k;002k`1ONa4|Kxkj0008uNkl<ZcwX(=
-z%}Z2a6vy!qU&7QD6$CjgbzuaFrMYX-gy1F-TYN#>*(&T0P^f5;ixxw==!FDzQOmLj
-zW)TU|$~Iz9Aez>~5MeSGNzOdU;V@i=JI&0U$NLB~{9rb}%fp9z&%hk!M$92gIe;pl
-z3Wyj9l9(csBteWw5h(;j9dXi_fJqal&Mqj9DKT-2AY!CT2BnGF10^sPlCTEKJIX71
-z)JmT5wgxg*K&DJUmwnQupf11mfI$K*D&+>^c2@3W<t}H1aS^@Zph5Z5CZJigaScjR
-zMTBa$!Uuig{eHe=HE-q67$$tsm>kf|A8$jyfS$PkZE!?L6P{+3Y9btC#|6l6Q$SJA
-zJsJ|?2*wTQCyfHQr_G#j>iOXcWOyKi8a`n7&M5)i$G8LSaX}DgSmV5K&hghJ$naGk
-zn|yMVCHFr+W;};YV_bu_81R4w*m4VcMRV41&CGcb!S=Xdpk;b9jBZ}iok8`oEP#^s
-zxZ*(HxIwJ~nwTJkA;knuN_trO9#=T%BSV6b(8Ic?TcZbSdt70l>n4JR)6DpO>*nq3
-zafN}FIj#?Cl$~5NU<H)S4chdQct;y?eqjzexj|EYm%9W-*|Z3FLPYa42uQ+JQr19S
-z8PKI*ASGG4OG`vN`5X|W4{pi=YD6F%bO`8HV30TDOK#3CCj|0{M*=#@u3OM^=^OdI
-zpGG0Qa0|L3{jfB{0*bi=tx_fZf;0;Ps$$h0XjBJU8y)O1SD-zjI?&qaU`I*00lm%)
-zv^JT+e&Yso%`?y%9qc|Apbcs~1Fg})u4N;9(71N~84n-S`d?6M*r0iB`k2m2pEmR1
-zf(Er&%x+lJW-v@pl6q-6F+S;(uAXFgph;~W`+^>8I~g9RU77~AeL>qaNZ%d;C_u^s
-zlss&pgcZ=5Jy6WbGCgY#WaDr39a`*x^u>dcIQ=590n!A0HN&vZEG?C{V=ABuDD3<L
-X<=DewY$H`b00000NkvXXu0mjfrJ!K8
-
-diff --git a/chrome/android/java/res/drawable-xxxhdpi/settings_translate.png b/chrome/android/java/res/drawable-xxxhdpi/settings_translate.png
-deleted file mode 100644
-index 058b50b84dd216d983e9dea2ea264b39773ac318..0000000000000000000000000000000000000000
-GIT binary patch
-literal 0
-HcmV?d00001
-
-literal 1038
-zcmV+p1o8WcP)<h;3K|Lk000e1NJLTq003YB003YJ1ONa4NRhv@000BkNkl<ZcwX(>
-zK}Zx)90u@NR77ZDqzI8+I%LtIBq1>CB9(`rB#V~#N{sTXQQ#UFR4mj+L_yL)FVdw5
-zWziyt2t7o(5K@$fpoFMU*4D8)xU9Pq43Ec~9k(6b`LAza_%8CfJov%x+j;ZfQFNEb
-z12`KG-~l{<2LKCHgb{}Zy~t>YBMcRaBe4w#ApzaNBoHbkpa(iZdP)TdK_^P66aW<o
-zGC%?<Js=F7FkyN?+%{m2FFR)&5T^%dqyUW`ppydhRRcUgbKdOZfPML2wf+F5xOe~$
-za5X2_a&lcrfC1Ws*OwkpL^d<PXBoFq``hX^=<WnOVSo$r0_HGoWCB?$0G$l*T3*0U
-zRIr6&7Qk=#4L}fCncqTZ7+{YDaF5Y0%Y7~MjxY7x)Mrs=v_5>56u{HU0Q*gCKWkg%
-zzZ!iHpXGBfgAJ^klo-HsmH{^5htXtkfHkMxaUPh*CPp}jjBvX|#jNB2o*};A4dL$x
-zZaR^jWPl1(GQd%H9Vr*E#k6n`zua~vj+y|s+;yl=;Uat{fDf0DatmMzyH{Mi0aNk=
-z7SV+=VZjqPArQ*Yg+(*KsriBvfHVeB1BIss!$v=x(+(m{a9cQ39AFtk*a}5R2a=qY
-zM2G2rH)-YzYX!{XHtL`Vsl}LuIEGp%Af7L*1<;Mkoc-n;k}EEs#5wq==L@R`yh6DE
-zXe@BOIf?tU^9B0=>sf0D9wH09K(eHO_}X@%^EiwcGSJsOT46u}y38pI7<D_Kr9^-i
-zP=vg64xr$P1wcPDKIJ5!8q?%}`J8W;O8jyTpdd(2xC138cbx<%s3v|R?c{)Z)Ej_Z
-zjsbXDFiNzkzJbCM<!8IM&H##xEx>u<B=-&9*y*m*Er37RzyZxh(`*3z`0Eb9fWRFv
-zHG}Q|Gzy#Ng3&CnO?9su03QYHao!$h%_sQ*-2z~Qw<D~%AUhz1jU1q2iT6uT*&Xkc
-z+<->{wR6Q0;bXZ0hXla52{6vu7MTGve7a+uW@Zs&Q??m-0eu3rC-3h{ugD5mMnC|3
-zumC<VKmZvz0Z(nO@k~y@G24JP83D5>w+*PktbBkdCkD`$Cjm}~$_Loa0g=4O2nTGJ
-z4KN`LLB8h&d>4i%6LJCCIpB!UT62U0+GPT0sN#Uwe*rNLsDdUBpr7+<3XGr9!nmqm
-z9zX*J^g=I?UJhtjCjd!2fc<E02gFGMDSAMd6fjK>P)UbW5mEs8p!*B_)Bwsy8PjNj
-zLJc5zn3UxUnxN1F9DJOYCxvN5;D?e6@Sf=Q03N^tcmNOZ5BbKcjE%x^TL1t607*qo
-IM6N<$g2Gw1A^-pY
+ chrome/android/java/res/xml/site_settings_preferences.xml             | 4 ----
+ .../chrome/browser/preferences/website/SiteSettingsPreferences.java   | 3 +--
+ 2 files changed, 1 insertion(+), 6 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/site_settings_preferences.xml b/chrome/android/java/res/xml/site_settings_preferences.xml
 --- a/chrome/android/java/res/xml/site_settings_preferences.xml
 +++ b/chrome/android/java/res/xml/site_settings_preferences.xml
-@@ -50,9 +50,9 @@
+@@ -49,10 +49,6 @@
+     <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
          android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
          android:key="ads" />
-     <!-- Background sync -->
+-    <!-- Background sync -->
 -    <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
-+    <!-- org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
-         android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
+-        android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
 -        android:key="background_sync" />
-+        android:key="background_sync" /-->
      <!-- Automatic Downloads -->
      <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
          android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
-@@ -77,11 +77,11 @@
-         android:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
-         android:key="sound" />
-     <!-- Google Translate -->
--    <Preference
-+    <!-- Preference
-         android:fragment="org.chromium.chrome.browser.preferences.website.TranslatePreferences"
-         android:key="translate"
-         android:title="@string/google_translate"
--        android:icon="@drawable/settings_translate" />
-+        android:icon="@drawable/settings_translate" /-->
-     <!-- Storage -->
-     <!-- TODO(finnur): Move this over to the new Usage screen, once it exists. -->
-     <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
 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
-@@ -37,7 +37,6 @@ public class SiteSettingsPreferences extends PreferenceFragment
-     // are defined in the SiteSettingsCategory, additional keys
-     // are listed here.
-     static final String MEDIA_KEY = "media";
--    static final String TRANSLATE_KEY = "translate";
- 
-     // Whether this class is handling showing the Media sub-menu (and not the main menu).
-     boolean mMediaSubMenu;
-@@ -76,11 +75,10 @@ public class SiteSettingsPreferences extends PreferenceFragment
+@@ -74,7 +74,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++) {
@@ -173,50 +33,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
                  getPreferenceScreen().removePreference(findPreference(i));
              }
              getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
--            getPreferenceScreen().removePreference(findPreference(TRANSLATE_KEY));
-         } else {
-             // These will be tucked under the Media subkey, so don't show them on the main menu.
-             getPreferenceScreen().removePreference(findPreference(Type.AUTOPLAY));
-@@ -91,7 +89,6 @@ public class SiteSettingsPreferences extends PreferenceFragment
-             if (!SiteSettingsCategory.adsCategoryEnabled()) {
-                 getPreferenceScreen().removePreference(findPreference(Type.ADS));
-             }
--            getPreferenceScreen().removePreference(findPreference(TRANSLATE_KEY));
-             if (!ChromeFeatureList.isEnabled(ChromeFeatureList.SENSOR_CONTENT_SETTING)) {
-                 getPreferenceScreen().removePreference(findPreference(Type.SENSORS));
-             }
-@@ -105,10 +102,6 @@ public class SiteSettingsPreferences extends PreferenceFragment
-     private void updatePreferenceStates() {
-         PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
- 
--        // Translate preference.
--        Preference translatePref = findPreference(TRANSLATE_KEY);
--        if (translatePref != null) setTranslateStateSummary(translatePref);
--
-         // Preferences that navigate to Website Settings.
-         List<Integer> websitePrefs = new ArrayList<Integer>();
-         if (mMediaSubMenu) {
-@@ -119,7 +112,7 @@ public class SiteSettingsPreferences extends PreferenceFragment
+@@ -115,7 +115,6 @@ public class SiteSettingsPreferences
                  websitePrefs.add(Type.ADS);
              }
              websitePrefs.add(Type.AUTOMATIC_DOWNLOADS);
 -            websitePrefs.add(Type.BACKGROUND_SYNC);
-+//            websitePrefs.add(Type.BACKGROUND_SYNC);
-             websitePrefs.add(Type.CAMERA);
-             if (!FeatureUtilities.isNoTouchModeEnabled()) {
-                 websitePrefs.add(Type.CLIPBOARD);
-@@ -217,11 +210,4 @@ public class SiteSettingsPreferences extends PreferenceFragment
-                 preference.getTitle().toString());
-         return false;
-     }
--
--    private void setTranslateStateSummary(Preference translatePref) {
--        boolean translateEnabled = PrefServiceBridge.getInstance().isTranslateEnabled();
--        translatePref.setSummary(translateEnabled
--                ? R.string.website_settings_category_ask
--                : R.string.website_settings_category_blocked);
--    }
- }
+             CommandLine commandLine = CommandLine.getInstance();
+             if (commandLine.hasSwitch(ContentSwitches.ENABLE_WEB_BLUETOOTH_SCANNING)) {
+                 websitePrefs.add(Type.BLUETOOTH_SCANNING);
 -- 
 2.11.0
 

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

@@ -7,7 +7,8 @@ Subject: Remove help menu item
  .../java/src/org/chromium/chrome/browser/ChromeActivity.java     | 9 ---------
  .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java  | 3 ---
  .../chromium/chrome/browser/customtabs/CustomTabActivity.java    | 2 +-
- 4 files changed, 1 insertion(+), 15 deletions(-)
+ .../chrome/browser/directactions/MenuDirectActionHandler.java    | 2 --
+ 5 files changed, 1 insertion(+), 17 deletions(-)
 
 diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
 --- a/chrome/android/java/res/menu/main_menu.xml
@@ -24,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
-@@ -2085,15 +2085,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2087,15 +2087,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  
@@ -43,7 +44,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
-@@ -341,9 +341,6 @@ public class KeyboardShortcuts {
+@@ -338,9 +338,6 @@ public class KeyboardShortcuts {
                      tab = activity.getActivityTab();
                      if (tab != null && tab.canGoForward()) tab.goForward();
                      return true;
@@ -56,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
-@@ -753,7 +753,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
+@@ -626,7 +626,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
@@ -65,6 +66,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
                  || id == R.id.new_incognito_tab_menu_id || id == R.id.new_tab_menu_id
                  || id == R.id.open_history_menu_id) {
              return true;
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandler.java
+@@ -35,7 +35,6 @@ class MenuDirectActionHandler implements DirectActionHandler {
+         map.put(ChromeDirectActionIds.RELOAD, R.id.reload_menu_id);
+         map.put(ChromeDirectActionIds.BOOKMARK_THIS_PAGE, R.id.bookmark_this_page_id);
+         map.put(ChromeDirectActionIds.DOWNLOADS, R.id.downloads_menu_id);
+-        map.put(ChromeDirectActionIds.HELP, R.id.help_id);
+         map.put(ChromeDirectActionIds.NEW_TAB, R.id.new_tab_menu_id);
+         map.put(ChromeDirectActionIds.OPEN_HISTORY, R.id.open_history_menu_id);
+         map.put(ChromeDirectActionIds.PREFERENCES, R.id.preferences_id);
+@@ -91,7 +90,6 @@ class MenuDirectActionHandler implements DirectActionHandler {
+         }
+ 
+         availableItemIds.add(R.id.downloads_menu_id);
+-        availableItemIds.add(R.id.help_id);
+         availableItemIds.add(R.id.new_tab_menu_id);
+         availableItemIds.add(R.id.preferences_id);
+ 
 -- 
 2.11.0
 

+ 64 - 64
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       | 72 +++-------------------
- 1 file changed, 7 insertions(+), 65 deletions(-)
+ .../chrome/browser/signin/SigninManager.java       | 63 +++-------------------
+ .../android/signin/signin_manager_android.cc       |  3 +-
+ 2 files changed, 7 insertions(+), 59 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
-@@ -28,11 +28,7 @@ import org.chromium.base.metrics.RecordHistogram;
+@@ -27,10 +27,7 @@ import org.chromium.base.annotations.NativeMethods;
+ import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.base.metrics.RecordUserAction;
  import org.chromium.base.task.PostTask;
- import org.chromium.chrome.browser.ChromeFeatureList;
 -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;
-@@ -48,7 +44,7 @@ import java.util.List;
+@@ -46,7 +43,7 @@ import java.util.List;
   * <p/>
   * See chrome/browser/signin/signin_manager_android.h for more details.
   */
@@ -30,39 +30,39 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      private static final String TAG = "SigninManager";
  
      /**
-@@ -182,8 +178,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
-     private final long mNativeSigninManagerAndroid;
+@@ -187,7 +184,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<>();
-@@ -228,28 +222,20 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
-     }
- 
-     private SigninManager(SigninManagerDelegate delegate) {
--        this(ContextUtils.getApplicationContext(), delegate,
--                IdentityServicesProvider.getAccountTrackerService(), AndroidSyncSettings.get());
-+        this(ContextUtils.getApplicationContext(), delegate);
+@@ -222,28 +218,23 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+      */
+     @CalledByNative
+     private static SigninManager create(long nativeSigninManagerAndroid,
+-            SigninManagerDelegate delegate, AccountTrackerService accountTrackerService) {
++            SigninManagerDelegate delegate) {
+         assert nativeSigninManagerAndroid != 0;
+         assert delegate != null;
+-        assert accountTrackerService != null;
+         return new SigninManager(ContextUtils.getApplicationContext(), nativeSigninManagerAndroid,
+-                delegate, accountTrackerService);
++                delegate);
      }
  
      @VisibleForTesting
--    SigninManager(Context context, SigninManagerDelegate delegate,
--            AccountTrackerService accountTrackerService, AndroidSyncSettings androidSyncSettings) {
-+    SigninManager(Context context, SigninManagerDelegate delegate) {
+-    SigninManager(Context context, long nativeSigninManagerAndroid, SigninManagerDelegate delegate,
+-            AccountTrackerService accountTrackerService) {
++    SigninManager(Context context, long nativeSigninManagerAndroid, SigninManagerDelegate delegate) {
          ThreadUtils.assertOnUiThread();
          assert context != null;
-         assert delegate != null;
--        assert accountTrackerService != null;
--        assert androidSyncSettings != null;
-         mDelegate = delegate;
          mContext = context;
+         mNativeSigninManagerAndroid = nativeSigninManagerAndroid;
+         mDelegate = delegate;
 -        mAccountTrackerService = accountTrackerService;
--        mAndroidSyncSettings = androidSyncSettings;
  
-         mNativeSigninManagerAndroid = SigninManagerJni.get().init(this);
          mSigninAllowedByPolicy =
                  SigninManagerJni.get().isSigninAllowedByPolicy(this, mNativeSigninManagerAndroid);
 -
@@ -70,7 +70,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -285,8 +271,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -252,7 +243,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+      */
+     @CalledByNative
+     public void destroy() {
+-        mAccountTrackerService.removeSystemAccountsSeededListener(this);
+         mNativeSigninManagerAndroid = 0;
+     }
+ 
+@@ -289,8 +279,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
       * Returns true if signin can be started now.
       */
      public boolean isSignInAllowed() {
@@ -80,26 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -301,16 +286,14 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
-      *         Google Play Services installed.
-      */
-     public boolean isSigninSupported() {
--        return !ApiCompatibilityUtils.isDemoUser(mContext)
--                && mDelegate.isGooglePlayServicesPresent(mContext)
--                && !ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY);
-+        return false;
-     }
- 
-     /**
-      * @return Whether force sign-in is enabled by policy.
-      */
-     public boolean isForceSigninEnabled() {
--        return SigninManagerJni.get().isForceSigninEnabled(this, mNativeSigninManagerAndroid);
-+        return false;
-     }
- 
-     /**
-@@ -344,27 +327,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -348,27 +337,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
      }
  
      /**
@@ -127,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
-@@ -419,16 +381,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
+@@ -423,16 +391,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
      }
  
      private void progressSignInFlowSeedSystemAccounts() {
@@ -145,36 +134,47 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninMa
      }
  
      /**
-@@ -494,12 +447,6 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
-         SigninManagerJni.get().onSignInCompleted(
-                 this, mNativeSigninManagerAndroid, mSignInState.mAccount.name);
+@@ -467,14 +426,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);
+-
 -        // 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);
--        mAndroidSyncSettings.updateAccount(mSignInState.mAccount);
--        mAndroidSyncSettings.enableChromeSync();
+-        mDelegate.enableSync(mSignInState.mAccount);
 -
          if (mSignInState.mCallback != null) {
              mSignInState.mCallback.onSignInComplete();
          }
-@@ -675,16 +622,11 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed
-         // Should be set at beginning of sign-out flow.
-         assert mSignOutState != null;
+@@ -642,12 +593,10 @@ 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);
--        mAndroidSyncSettings.updateAccount(null);
--
-         if (mSignOutState.mManagementDomain != null) {
-             wipeProfileData();
-         } else {
-             wipeGoogleServiceWorkerCaches();
-         }
--
+         if (mSignOutState.mWipeDataHooks != null) mSignOutState.mWipeDataHooks.preWipeData();
+         mDelegate.disableSyncAndWipeData(
+                 mSignOutState.mManagementDomain != null || mSignOutState.mForceWipeUserData,
+                 this::onProfileDataWiped);
 -        mAccountTrackerService.invalidateAccountSeedStatus(true);
      }
  
-     private void wipeProfileData() {
+     @VisibleForTesting
+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(
+ 
+   java_signin_manager_ = Java_SigninManager_create(
+       base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
+-      signin_manager_delegate_->GetJavaObject(),
+-      identity_manager_->LegacyGetAccountTrackerServiceJavaObject());
++      signin_manager_delegate_->GetJavaObject());
+ }
+ 
+ base::android::ScopedJavaLocalRef<jobject>
 -- 
 2.11.0
 

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

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

@@ -4,8 +4,8 @@ Subject: Use 4 tile rows, never show logo
 
 ---
  .../java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java  | 6 +++---
- .../chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java | 2 +-
- .../src/org/chromium/chrome/browser/suggestions/SiteSection.java    | 2 +-
+ .../browser/suggestions/mostvisited/MostVisitedSitesBridge.java     | 2 +-
+ .../org/chromium/chrome/browser/suggestions/tile/SiteSection.java   | 2 +-
  chrome/browser/engagement/important_sites_util.cc                   | 2 +-
  components/history/core/browser/top_sites_impl.h                    | 2 +-
  5 files changed, 7 insertions(+), 7 deletions(-)
@@ -40,10 +40,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
      }
  
      /**
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
-@@ -27,7 +27,7 @@ public class MostVisitedSitesBridge
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
+@@ -29,7 +29,7 @@ public class MostVisitedSitesBridge
       * Maximum number of tiles that is explicitly supported. UMA relies on this value, so even if
       * the UI supports it, getting more can raise unexpected issues.
       */
@@ -52,10 +52,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/Mos
  
      private long mNativeMostVisitedSitesBridge;
  
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
-@@ -113,7 +113,7 @@ public class SiteSection extends OptionalLeaf implements TileGroup.Observer {
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SiteSection.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SiteSection.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SiteSection.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SiteSection.java
+@@ -115,7 +115,7 @@ public class SiteSection extends OptionalLeaf implements TileGroup.Observer {
                          ExploreSitesBridge.getVariation())) {
              return 1;
          }

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

@@ -25,7 +25,7 @@ sandboxing.
 diff --git a/android_webview/apk/java/AndroidManifest.xml b/android_webview/apk/java/AndroidManifest.xml
 --- a/android_webview/apk/java/AndroidManifest.xml
 +++ b/android_webview/apk/java/AndroidManifest.xml
-@@ -28,7 +28,6 @@
+@@ -22,7 +22,6 @@
                   android:icon="@{{manifest_package|default('com.android.webview')}}:drawable/icon_webview"
                   android:name="{{ application_name|default('com.android.webview.chromium.WebViewApkApplication') }}"
                   android:multiArch="true"

+ 4 - 4
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
-@@ -14,7 +14,8 @@
+@@ -15,7 +15,8 @@
  namespace version_info {
  
  std::string GetProductNameAndVersionForUserAgent() {
@@ -25,16 +25,16 @@ diff --git a/components/version_info/version_info.cc b/components/version_info/v
 diff --git a/content/common/user_agent.cc b/content/common/user_agent.cc
 --- a/content/common/user_agent.cc
 +++ b/content/common/user_agent.cc
-@@ -84,7 +84,7 @@ std::string BuildOSCpuInfo(bool include_android_build_number) {
+@@ -83,7 +83,7 @@ std::string BuildOSCpuInfo(bool include_android_build_number) {
        architecture_token = "; Win64; IA64";
    }
  #elif defined(OS_ANDROID)
 -  std::string android_version_str = base::SysInfo::OperatingSystemVersion();
 +  std::string android_version_str = "8.0.0";
    std::string android_info_str = GetAndroidOSInfo(include_android_build_number);
- #elif (defined(OS_POSIX) && !defined(OS_MACOSX)) || defined(OS_FUCHSIA)
+ #elif defined(OS_POSIX) && !defined(OS_MACOSX)
    // Should work on any Posix system.
-@@ -162,16 +162,9 @@ std::string BuildUserAgentFromProductAndExtraOSInfo(
+@@ -155,16 +155,9 @@ std::string BuildUserAgentFromProductAndExtraOSInfo(
  }
  
  std::string GetAndroidOSInfo(bool include_android_build_number) {

+ 67 - 34
build/patches/autofill-disable-autofill-download-manager.patch

@@ -4,38 +4,58 @@ Subject: autofill: disable autofill download manager
 
 Disables the autofill download manager (trk:158).
 ---
- .../autofill/core/browser/autofill_download_manager.cc | 13 ++++++++++++-
- components/autofill/core/browser/autofill_manager.cc   | 18 ------------------
- 2 files changed, 12 insertions(+), 19 deletions(-)
+ .../core/browser/autofill_download_manager.cc      | 60 +++-------------------
+ .../autofill/core/browser/autofill_manager.cc      | 18 -------
+ 2 files changed, 7 insertions(+), 71 deletions(-)
 
 diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc
 --- a/components/autofill/core/browser/autofill_download_manager.cc
 +++ b/components/autofill/core/browser/autofill_download_manager.cc
-@@ -59,7 +59,6 @@ constexpr std::pair<int, int> kAutofillExperimentRanges[] = {
+@@ -58,7 +58,6 @@ constexpr std::pair<int, int> kAutofillExperimentRanges[] = {
      {3314445, 3314448}, {3314854, 3314883},
  };
  
--const size_t kMaxQueryGetSize = 1400;  // 1.25KB
+-const size_t kMaxQueryGetSize = 1400;  // 1.25 KiB
  const size_t kAutofillDownloadManagerMaxFormCacheSize = 16;
  const size_t kMaxFieldsPerQueryRequest = 100;
  
-@@ -447,6 +446,7 @@ bool GetUploadPayloadForApi(const AutofillUploadContents& upload,
+@@ -446,35 +445,6 @@ bool GetUploadPayloadForApi(const AutofillUploadContents& upload,
    return upload_request.SerializeToString(payload);
  }
  
-+/*
- // Gets an API method URL given its type (query or upload) and an optional
- // resource ID.
- // Example usage:
-@@ -469,6 +469,7 @@ std::string GetAPIMethodUrl(AutofillDownloadManager::RequestType type,
-   }
-   return base::StrCat({api_method_url, "/", resource_id});
- }
-+*/
- 
- }  // namespace
- 
-@@ -642,6 +643,7 @@ void AutofillDownloadManager::ClearUploadHistory(PrefService* pref_service) {
+-// Gets an API method URL given its type (query or upload), an optional
+-// resource ID, and the HTTP method to be used.
+-// Example usage:
+-// * GetAPIMethodUrl(REQUEST_QUERY, "1234", "GET") will return "/v1/pages/1234".
+-// * GetAPIMethodUrl(REQUEST_QUERY, "1234", "POST") will return "/v1/pages:get".
+-// * GetAPIMethodUrl(REQUEST_UPLOAD, "", "POST") will return "/v1/forms:vote".
+-std::string GetAPIMethodUrl(AutofillDownloadManager::RequestType type,
+-                            base::StringPiece resource_id,
+-                            base::StringPiece method) {
+-  const char* api_method_url;
+-  if (type == AutofillDownloadManager::REQUEST_QUERY) {
+-    if (method == "POST") {
+-      api_method_url = "/v1/pages:get";
+-    } else {
+-      api_method_url = "/v1/pages";
+-    }
+-  } else if (type == AutofillDownloadManager::REQUEST_UPLOAD) {
+-    api_method_url = "/v1/forms:vote";
+-  } else {
+-    // This should not be reached, but we never know.
+-    NOTREACHED() << "Request of type " << type << " is invalid";
+-    return "";
+-  }
+-  if (resource_id.empty()) {
+-    return std::string(api_method_url);
+-  }
+-  return base::StrCat({api_method_url, "/", resource_id});
+-}
+-
+ // 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(
  
  std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
      const FormRequestData& request_data) const {
@@ -43,7 +63,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
    std::string method("POST");
    std::string query_str;
  
-@@ -664,12 +666,17 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
+@@ -702,35 +673,18 @@ std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
    GURL url = autofill_server_url_
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .ReplaceComponents(replacements);
@@ -57,25 +77,38 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
  std::tuple<GURL, std::string>
  AutofillDownloadManager::GetRequestURLAndMethodForApi(
      const FormRequestData& request_data) const {
-+#if 0
-   // ID of the resource to add to the API request URL. Nothing will be added if
-   // |resource_id| is empty.
-   std::string resource_id;
-@@ -698,6 +705,10 @@ AutofillDownloadManager::GetRequestURLAndMethodForApi(
-       (request_data.request_type == AutofillDownloadManager::REQUEST_QUERY)
-           ? "GET"
-           : "POST";
-+#else
+-  // ID of the resource to add to the API request URL. Nothing will be added if
+-  // |resource_id| is empty.
+-  std::string resource_id;
+-  std::string method = "POST";
+-
+-  if (request_data.request_type == AutofillDownloadManager::REQUEST_QUERY) {
+-    if (GetPayloadLength(request_data.payload) <= kMaxAPIQueryGetSize) {
+-      resource_id = request_data.payload;
+-      method = "GET";
+-      UMA_HISTOGRAM_BOOLEAN("Autofill.Query.ApiUrlIsTooLong", false);
+-    } else {
+-      UMA_HISTOGRAM_BOOLEAN("Autofill.Query.ApiUrlIsTooLong", true);
+-    }
+-    UMA_HISTOGRAM_BOOLEAN("Autofill.Query.Method", (method == "GET") ? 0 : 1);
+-  }
+-
+-  // Make the canonical URL to query the API, e.g.,
+-  // https://autofill.googleapis.com/v1/forms/1234?alt=proto.
+-  GURL url = autofill_server_url_.Resolve(
+-      GetAPIMethodUrl(request_data.request_type, resource_id, method));
+-
+-  // Add the query parameter to set the response format to a serialized proto.
+-  url = net::AppendQueryParameter(url, "alt", "proto");
 +  std::string method("GET");
 +  GURL url = GURL("about:blank");
-+#endif
+ 
    return std::make_tuple(std::move(url), std::move(method));
  }
- 
 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
-@@ -178,19 +178,6 @@ void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder,
+@@ -181,19 +181,6 @@ void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder,
    }
  }
  
@@ -95,8 +128,8 @@ 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;
-@@ -1327,11 +1314,6 @@ AutofillManager::AutofillManager(
-       weak_ptr_factory_(this) {
+@@ -1360,11 +1347,6 @@ AutofillManager::AutofillManager(
+       is_rich_query_enabled_(IsRichQueryEnabled(client->GetChannel())) {
    DCHECK(driver);
    DCHECK(client_);
 -  if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) {

+ 2 - 2
build/patches/battery_status_service-disable-more-privacy-nightmares.patch

@@ -24,7 +24,7 @@ References: https://github.com/iridium-browser/iridium-browser/issues/40
 diff --git a/services/device/battery/battery_status_service.cc b/services/device/battery/battery_status_service.cc
 --- a/services/device/battery/battery_status_service.cc
 +++ b/services/device/battery/battery_status_service.cc
-@@ -41,6 +41,7 @@ BatteryStatusService::AddCallback(const BatteryUpdateCallback& callback) {
+@@ -70,6 +70,7 @@ BatteryStatusService::AddCallback(const BatteryUpdateCallback& callback) {
    if (!battery_fetcher_)
      battery_fetcher_ = BatteryStatusManager::Create(update_callback_);
  
@@ -32,7 +32,7 @@ diff --git a/services/device/battery/battery_status_service.cc b/services/device
    if (callback_list_.empty()) {
      bool success = battery_fetcher_->StartListeningBatteryChange();
      // On failure pass the default values back.
-@@ -52,6 +53,7 @@ BatteryStatusService::AddCallback(const BatteryUpdateCallback& callback) {
+@@ -81,6 +82,7 @@ BatteryStatusService::AddCallback(const BatteryUpdateCallback& callback) {
      // Send recent status to the new callback if already available.
      callback.Run(status_);
    }

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

@@ -11,7 +11,7 @@ sysroot.
 diff --git a/DEPS b/DEPS
 --- a/DEPS
 +++ b/DEPS
-@@ -73,7 +73,7 @@ vars = {
+@@ -75,7 +75,7 @@ vars = {
  
    # Check out and download nacl by default. This can be disabled e.g. with
    # custom_vars.
@@ -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.
-@@ -92,8 +92,8 @@ vars = {
-   # By default do not check out the Oculus SDK. Only available for Googlers.
-   'checkout_oculus_sdk' : 'checkout_src_internal and checkout_win',
+@@ -97,8 +97,8 @@ vars = {
+   # By default do not checkout the OpenXR loader library.
+   'checkout_openxr' : False,
  
 -  '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
-@@ -2309,49 +2309,6 @@ hooks = [
+@@ -2323,49 +2323,6 @@ hooks = [
      ],
    },
    {
@@ -81,7 +81,7 @@ diff --git a/DEPS b/DEPS
      # Case-insensitivity for the Win SDK. Must run before win_toolchain below.
      'name': 'ciopfs_linux',
      'pattern': '.',
-@@ -2378,43 +2335,6 @@ hooks = [
+@@ -2392,43 +2349,6 @@ hooks = [
      'condition': 'checkout_ios or checkout_mac',
      'action': ['python', 'src/build/mac_toolchain.py'],
    },
@@ -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
-@@ -2474,18 +2394,6 @@ hooks = [
+@@ -2488,18 +2408,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',
-@@ -2511,29 +2419,6 @@ hooks = [
+@@ -2525,29 +2433,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
      ],
    },

+ 26 - 0
build/patches/disable-AdsBlockedInfoBar.patch

@@ -0,0 +1,26 @@
+From: Zoraver Kang <zkang@wpi.edu>
+Date: Mon, 26 Aug 2019 17:54:28 -0400
+Subject: disable AdsBlockedInfoBar
+
+---
+ .../browser/subresource_filter/chrome_subresource_filter_client.cc   | 5 -----
+ 1 file changed, 5 deletions(-)
+
+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) {
+ }
+ 
+ void ChromeSubresourceFilterClient::ShowUI(const GURL& url) {
+-#if defined(OS_ANDROID)
+-  InfoBarService* infobar_service =
+-      InfoBarService::FromWebContents(web_contents());
+-  AdsBlockedInfobarDelegate::Create(infobar_service);
+-#endif
+   TabSpecificContentSettings* content_settings =
+       TabSpecificContentSettings::FromWebContents(web_contents());
+   content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_ADS);
+-- 
+2.11.0
+

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

+ 68 - 0
build/patches/enable-subresource-filter-on-all-sites.patch

@@ -0,0 +1,68 @@
+From: Zoraver Kang <zkang@wpi.edu>
+Date: Thu, 22 Aug 2019 01:24:00 -0400
+Subject: enable subresource filter on all sites
+
+---
+ .../core/browser/subresource_filter_features.cc             | 13 ++++++++++++-
+ .../core/browser/subresource_filter_features.h              |  2 ++
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/components/subresource_filter/core/browser/subresource_filter_features.cc b/components/subresource_filter/core/browser/subresource_filter_features.cc
+--- a/components/subresource_filter/core/browser/subresource_filter_features.cc
++++ b/components/subresource_filter/core/browser/subresource_filter_features.cc
+@@ -128,7 +128,9 @@ std::vector<Configuration> FillEnabledPresetConfigurations(
+       {kPresetPerformanceTestingDryRunOnAllSites, ad_tagging_enabled,
+        &Configuration::MakePresetForPerformanceTestingDryRunOnAllSites},
+       {kPresetLiveRunForBetterAds, true,
+-       &Configuration::MakePresetForLiveRunForBetterAds}};
++       &Configuration::MakePresetForLiveRunForBetterAds},
++      {kPresetLiveRunOnAllSites, true,
++       &Configuration::MakePresetForLiveRunOnAllSites}};
+ 
+   CommaSeparatedStrings enabled_presets(
+       TakeVariationParamOrReturnEmpty(params, kEnablePresetsParameterName));
+@@ -270,6 +272,7 @@ const char kPresetPerformanceTestingDryRunOnAllSites[] =
+     "performance_testing_dryrun_on_all_sites";
+ const char kPresetLiveRunForBetterAds[] =
+     "liverun_on_better_ads_violating_sites";
++const char kPresetLiveRunOnAllSites[] = "liverun_on_all_sites";
+ 
+ // Configuration --------------------------------------------------------------
+ 
+@@ -300,6 +303,14 @@ Configuration Configuration::MakePresetForLiveRunForBetterAds() {
+   return config;
+ }
+ 
++// static
++Configuration Configuration::MakePresetForLiveRunOnAllSites() {
++  Configuration config(mojom::ActivationLevel::kEnabled,
++                       ActivationScope::ALL_SITES);
++  config.activation_conditions.priority = 600;
++  return config;
++}
++
+ Configuration::Configuration() = default;
+ Configuration::Configuration(mojom::ActivationLevel activation_level,
+                              ActivationScope activation_scope,
+diff --git a/components/subresource_filter/core/browser/subresource_filter_features.h b/components/subresource_filter/core/browser/subresource_filter_features.h
+--- a/components/subresource_filter/core/browser/subresource_filter_features.h
++++ b/components/subresource_filter/core/browser/subresource_filter_features.h
+@@ -122,6 +122,7 @@ struct Configuration {
+   static Configuration MakePresetForLiveRunOnPhishingSites();
+   static Configuration MakePresetForPerformanceTestingDryRunOnAllSites();
+   static Configuration MakePresetForLiveRunForBetterAds();
++  static Configuration MakePresetForLiveRunOnAllSites();
+ 
+   ActivationConditions activation_conditions;
+   ActivationOptions activation_options;
+@@ -219,6 +220,7 @@ extern const char kDisablePresetsParameterName[];
+ extern const char kPresetLiveRunOnPhishingSites[];
+ extern const char kPresetPerformanceTestingDryRunOnAllSites[];
+ extern const char kPresetLiveRunForBetterAds[];
++extern const char kPresetLiveRunOnAllSites[];
+ 
+ }  // namespace subresource_filter
+ 
+-- 
+2.11.0
+

+ 0 - 36
build/patches/extensions-always-show-component-extensions-in-the-ext-list.patch

@@ -1,36 +0,0 @@
-From: Joachim Bauch <jojo@struktur.de>
-Date: Thu, 25 Jun 2015 15:34:10 +0200
-Subject: extensions: always show component extensions in the ext list
-
-The attached patch makes sure that component extensions are always
-shown in "chrome://extensions".
-
-Currently these are
-- Bookmark Manager
-- Chromium PDF Viewer
-- CryptoTokenExtension
-
-References: https://github.com/iridium-browser/iridium-browser/issues/28
----
- extensions/common/extension.cc | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc
---- a/extensions/common/extension.cc
-+++ b/extensions/common/extension.cc
-@@ -377,9 +377,12 @@ bool Extension::ShouldDisplayInExtensionSettings() const {
- }
- 
- bool Extension::ShouldExposeViaManagementAPI() const {
-+#if 0
-   // Hide component extensions because they are only extensions as an
-   // implementation detail of Chrome.
-   return !extensions::Manifest::IsComponentLocation(location());
-+#endif
-+  return false;
- }
- 
- Extension::ManifestData* Extension::GetManifestData(const std::string& key)
--- 
-2.11.0
-

+ 18 - 32
build/patches/getClientRects-getBoundingClientRect-measureText-add-fingerprinting-mitigation.patch

@@ -13,27 +13,19 @@ to poison the well.
 
 See also: http://www.gsd.inesc-id.pt/~mpc/pubs/fingerprinting-trustcom2016.pdf
 ---
- third_party/blink/renderer/core/dom/document.cc        | 13 +++++++++++++
+ third_party/blink/renderer/core/dom/document.cc        | 12 ++++++++++++
  third_party/blink/renderer/core/dom/document.h         |  5 +++++
  third_party/blink/renderer/core/dom/element.cc         | 16 ++++++++++++++++
  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     | 10 +++++++++-
- 7 files changed, 80 insertions(+), 2 deletions(-)
+ .../canvas/canvas2d/canvas_rendering_context_2d.cc     |  6 ++++++
+ 7 files changed, 76 insertions(+), 1 deletion(-)
 
 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
-@@ -35,6 +35,7 @@
- #include "base/auto_reset.h"
- #include "base/macros.h"
- #include "base/optional.h"
-+#include "base/rand_util.h"
- #include "cc/input/overscroll_behavior.h"
- #include "cc/input/scroll_snap_data.h"
- #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
-@@ -734,6 +735,10 @@ Document::Document(const DocumentInit& initializer,
+@@ -1102,6 +1102,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.
@@ -44,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());
-@@ -798,6 +803,14 @@ Range* Document::CreateRangeAdjustedToTreeScope(const TreeScope& tree_scope,
+@@ -1162,6 +1166,14 @@ Range* Document::CreateRangeAdjustedToTreeScope(const TreeScope& tree_scope,
                                       Position::BeforeNode(*shadow_host));
  }
  
@@ -62,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
-@@ -395,6 +395,9 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -398,6 +398,9 @@ class CORE_EXPORT Document : public ContainerNode,
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -72,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;
-@@ -1866,6 +1869,8 @@ class CORE_EXPORT Document : public ContainerNode,
+@@ -1871,6 +1874,8 @@ class CORE_EXPORT Document : public ContainerNode,
    Vector<AXContext*> ax_contexts_;
    Member<AXObjectCache> ax_object_cache_;
    Member<DocumentMarkerController> markers_;
@@ -84,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
-@@ -1346,6 +1346,15 @@ DOMRectList* Element::getClientRects() {
+@@ -1370,6 +1370,15 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -100,7 +92,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
    return DOMRectList::Create(quads);
  }
  
-@@ -1363,6 +1372,13 @@ DOMRect* Element::getBoundingClientRect() {
+@@ -1387,6 +1396,13 @@ DOMRect* Element::getBoundingClientRect() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
@@ -117,7 +109,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/
 diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/renderer/core/dom/range.cc
 --- a/third_party/blink/renderer/core/dom/range.cc
 +++ b/third_party/blink/renderer/core/dom/range.cc
-@@ -1632,11 +1632,27 @@ DOMRectList* Range::getClientRects() const {
+@@ -1631,11 +1631,27 @@ DOMRectList* Range::getClientRects() const {
    Vector<FloatQuad> quads;
    GetBorderAndTextQuads(quads);
  
@@ -189,32 +181,26 @@ diff --git a/third_party/blink/renderer/core/html/canvas/text_metrics.h b/third_
 diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
 +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
-@@ -33,6 +33,8 @@
+@@ -33,6 +33,7 @@
  
  #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
  
 +#include "base/rand_util.h"
-+
+ #include "base/metrics/histogram_functions.h"
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/platform/platform.h"
- #include "third_party/blink/public/platform/task_type.h"
-@@ -804,9 +806,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
-   else
-     direction = ToTextDirection(GetState().GetDirection(), canvas());
- 
--  return MakeGarbageCollected<TextMetrics>(font, direction,
-+  auto *textMetrics = MakeGarbageCollected<TextMetrics>(font, direction,
-                                            GetState().GetTextBaseline(),
-                                            GetState().GetTextAlign(), text);
+@@ -814,6 +815,11 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) {
+   base::TimeDelta elapsed = base::TimeTicks::Now() - start_time;
+   base::UmaHistogramMicrosecondsTimesUnderTenMilliseconds(
+       "Canvas.TextMetrics.MeasureText", elapsed);
 +
 +  // scale text metrics by 3/1000000th
 +  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
-+  textMetrics->Shuffle(shuffleFactor);
++  text_metrics->Shuffle(shuffleFactor);
 +
-+  return textMetrics;
+   return text_metrics;
  }
  
- void CanvasRenderingContext2D::DrawTextInternal(
 -- 
 2.11.0
 

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

@@ -21,7 +21,7 @@ diff --git a/components/gcm_driver/gcm_channel_status_request.cc b/components/gc
  const int kDefaultPollIntervalSeconds = 60 * 60;  // 60 minutes.
  const int kMinPollIntervalSeconds = 30 * 60;  // 30 minutes.
  
-@@ -57,6 +59,7 @@ int GCMChannelStatusRequest::min_poll_interval_seconds() {
+@@ -56,6 +58,7 @@ int GCMChannelStatusRequest::min_poll_interval_seconds() {
  
  void GCMChannelStatusRequest::Start() {
    // url_loader_factory_ can be null for tests.
@@ -29,7 +29,7 @@ diff --git a/components/gcm_driver/gcm_channel_status_request.cc b/components/gc
    if (!url_loader_factory_)
      return;
  
-@@ -111,6 +114,9 @@ void GCMChannelStatusRequest::Start() {
+@@ -110,6 +113,9 @@ void GCMChannelStatusRequest::Start() {
    resource_request->allow_credentials = false;
    resource_request->method = "POST";
    resource_request->headers.SetHeader(net::HttpRequestHeaders::kUserAgent,

+ 47 - 24
build/patches/kill-GCM.patch

@@ -4,29 +4,29 @@ Subject: kill GCM
 
 ---
  chrome/android/BUILD.gn                            |   1 -
- chrome/android/chrome_java_sources.gni             |   5 -
- chrome/android/java/AndroidManifest.xml            |  62 ---------
- .../chrome/browser/BackgroundSyncLauncher.java     |  97 --------------
+ chrome/android/chrome_java_sources.gni             |   6 -
+ chrome/android/java/AndroidManifest.xml            |  64 --------
+ .../chrome/browser/BackgroundSyncLauncher.java     |  97 ------------
  .../chrome/browser/ChromeBackgroundService.java    |   1 -
- .../invalidation/InvalidationController.java       |   8 --
- .../browser/ntp/snippets/SnippetsLauncher.java     |  44 -------
+ .../invalidation/InvalidationController.java       |   8 -
+ .../browser/ntp/snippets/SnippetsLauncher.java     |  44 ------
  .../browser/services/gcm/GCMBackgroundTask.java    |   2 +-
- .../gcm/InvalidationGcmUpstreamSender.java         |  15 ---
+ .../gcm/InvalidationGcmUpstreamSender.java         |  15 --
  components/background_task_scheduler/BUILD.gn      |   1 -
- .../BackgroundTaskSchedulerGcmNetworkManager.java  | 146 +--------------------
+ .../BackgroundTaskSchedulerGcmNetworkManager.java  | 166 +--------------------
  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   |  40 +----
  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(+), 519 deletions(-)
+ 18 files changed, 9 insertions(+), 542 deletions(-)
 
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/chrome/android/BUILD.gn
-@@ -361,7 +361,6 @@ android_library("chrome_java") {
+@@ -368,7 +368,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",
@@ -37,7 +37,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/chrome/android/chrome_java_sources.gni
-@@ -22,7 +22,6 @@ chrome_java_sources = [
+@@ -20,7 +20,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/ChromeActivity.java",
    "java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java",
    "java/src/org/chromium/chrome/browser/ChromeApplication.java",
@@ -45,11 +45,12 @@ 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",
-@@ -1381,10 +1380,6 @@ chrome_java_sources = [
+@@ -1395,11 +1394,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",
 -  "java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java",
+-  "java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundService.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundTask.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/GcmUma.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/InvalidationGcmUpstreamSender.java",
@@ -59,7 +60,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_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
-@@ -76,22 +76,17 @@ by a child template that "extends" this file.
+@@ -78,22 +78,17 @@ by a child template that "extends" this file.
      <permission android:name="{{ manifest_package }}.permission.CHILD_SERVICE" android:protectionLevel="signature" />
      <permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" />
      <permission android:name="{{ manifest_package }}.TOS_ACKED" android:protectionLevel="signatureOrSystem" />
@@ -82,7 +83,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 %}
-@@ -1039,47 +1034,8 @@ by a child template that "extends" this file.
+@@ -1040,49 +1035,8 @@ by a child template that "extends" this file.
              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
              android:hardwareAccelerated="false" />
  
@@ -118,6 +119,8 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
 -              <action android:name="com.google.android.c2dm.intent.RECEIVE" />
 -            </intent-filter>
 -        </service>
+-        <service android:name="org.chromium.chrome.browser.services.gcm.GCMBackgroundService"
+-            android:exported="false"/>
 -        <meta-data android:name="ipc.invalidation.ticl.gcm_upstream_service_class"
 -            android:value="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender" />
 -        <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
@@ -130,7 +133,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"
-@@ -1106,24 +1062,6 @@ by a child template that "extends" this file.
+@@ -1109,24 +1063,6 @@ by a child template that "extends" this file.
              android:exported="false"
              android:permission="android.permission.BIND_JOB_SERVICE"/>
  
@@ -493,9 +496,9 @@ 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;
-@@ -34,104 +26,6 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
-     @VisibleForTesting
-     static final String BACKGROUND_TASK_EXTRAS_KEY = "_background_task_extras";
+@@ -42,124 +34,6 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
+         sClock = clock;
+     }
  
 -    static BackgroundTask getBackgroundTaskFromTaskParams(@NonNull TaskParams taskParams) {
 -        String backgroundTaskClassName = getBackgroundTaskClassFromTaskParams(taskParams);
@@ -508,6 +511,19 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -        return extras.getString(BACKGROUND_TASK_CLASS_KEY);
 -    }
 -
+-    static Long getDeadlineTimeFromTaskParams(@NonNull TaskParams taskParams) {
+-        Bundle extras = taskParams.getExtras();
+-        if (extras == null || !extras.containsKey(BACKGROUND_TASK_DEADLINE_KEY)) {
+-            return null;
+-        }
+-        return extras.getLong(BACKGROUND_TASK_DEADLINE_KEY);
+-    }
+-
+-    private static long getDeadlineTime(TaskInfo taskInfo) {
+-        long windowEndTimeMs = taskInfo.getOneOffInfo().getWindowEndTimeMs();
+-        return sClock.currentTimeMillis() + windowEndTimeMs;
+-    }
+-
 -    /**
 -     * Retrieves the {@link TaskParameters} from the {@link TaskParams}, which are passed as
 -     * one of the keys. Only values valid for {@link android.os.BaseBundle} are supported, and other
@@ -539,6 +555,9 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -        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;
@@ -574,8 +593,12 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -        long windowStartSeconds = oneOffInfo.hasWindowStartTimeConstraint()
 -                ? TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowStartTimeMs())
 -                : 0;
--        builder.setExecutionWindow(windowStartSeconds,
--                TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowEndTimeMs()));
+-        long windowEndTimeMs = oneOffInfo.getWindowEndTimeMs();
+-        if (oneOffInfo.expiresAfterWindowEndTime()) {
+-            windowEndTimeMs += DEADLINE_DELTA_MS;
+-        }
+-        builder.setExecutionWindow(
+-                windowStartSeconds, TimeUnit.MILLISECONDS.toSeconds(windowEndTimeMs));
 -        return builder;
 -    }
 -
@@ -598,7 +621,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
      @Override
      public boolean schedule(Context context, @NonNull TaskInfo taskInfo) {
          ThreadUtils.assertOnUiThread();
-@@ -142,50 +36,12 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
+@@ -170,50 +44,12 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
                              + " has no parameterless public constructor.");
              return false;
          }
@@ -653,7 +676,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 diff --git a/components/gcm_driver/android/BUILD.gn b/components/gcm_driver/android/BUILD.gn
 --- a/components/gcm_driver/android/BUILD.gn
 +++ b/components/gcm_driver/android/BUILD.gn
-@@ -15,7 +15,6 @@ android_library("gcm_driver_java") {
+@@ -14,7 +14,6 @@ android_library("gcm_driver_java") {
    deps = [
      "//base:base_java",
      "//content/public/android:content_java",
@@ -664,7 +687,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
-@@ -27,7 +27,6 @@ android_library("instance_id_driver_java") {
+@@ -25,7 +25,6 @@ android_library("instance_id_driver_java") {
  
    java_files = [
      "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java",

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

@@ -10,7 +10,7 @@ Subject: kill Location, fall back to system
 diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn
 --- a/services/device/geolocation/BUILD.gn
 +++ b/services/device/geolocation/BUILD.gn
-@@ -137,7 +137,6 @@ if (is_android) {
+@@ -136,7 +136,6 @@ if (is_android) {
        "android/java/src/org/chromium/device/geolocation/LocationProviderAdapter.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java",

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

@@ -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
-@@ -177,7 +177,6 @@
+@@ -179,7 +179,6 @@
      <dimen name="fre_button_padding">12dp</dimen>
      <dimen name="fre_margin">24dp</dimen>
      <dimen name="fre_image_height">120dp</dimen>

+ 4 - 4
build/patches/kill-Translate.patch

@@ -9,15 +9,15 @@ Subject: kill Translate
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
-@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.datareduction.DataReductionPromoUtils;
- import org.chromium.chrome.browser.datareduction.DataReductionProxyUma;
+@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.datareduction.DataReductionProxyUma;
  import org.chromium.chrome.browser.metrics.UmaUtils;
  import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
+ import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
 +import org.chromium.chrome.browser.preferences.PrefServiceBridge;
- import org.chromium.chrome.browser.search_engines.TemplateUrlService;
  import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
  import org.chromium.ui.base.LocalizationUtils;
-@@ -138,6 +139,8 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
+ 
+@@ -137,6 +138,8 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
          if (mPostNativePageSequenceCreated) return;
          mFirstRunFlowSequencer.onNativeInitialized(mFreProperties);
  

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

@@ -13,7 +13,7 @@ Barcode, face and text detection APIs
 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
-@@ -86,14 +86,10 @@ if (is_android) {
+@@ -85,14 +85,10 @@ if (is_android) {
  
    android_library("shape_detection_java") {
      java_files = [

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

@@ -5,14 +5,14 @@ Subject: openH264: enable ARM/ARM64 optimizations
 Enable the optimizations not only for ChromeOS but for all compatbile ARM/ARM64 architectures
 Limit threads auto-detect only for iOS
 ---
- content/renderer/media_recorder/h264_encoder.cc |  6 ++---
- third_party/openh264/BUILD.gn                   | 31 +++++++++++++++++++------
+ .../renderer/modules/mediarecorder/h264_encoder.cc |  6 ++---
+ third_party/openh264/BUILD.gn                      | 31 +++++++++++++++++-----
  2 files changed, 27 insertions(+), 10 deletions(-)
 
-diff --git a/content/renderer/media_recorder/h264_encoder.cc b/content/renderer/media_recorder/h264_encoder.cc
---- a/content/renderer/media_recorder/h264_encoder.cc
-+++ b/content/renderer/media_recorder/h264_encoder.cc
-@@ -150,11 +150,11 @@ void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
+diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
+--- a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
++++ b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
+@@ -152,11 +152,11 @@ void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
      init_params.iRCMode = RC_OFF_MODE;
    }
  

+ 7 - 7
build/patches/prefs-disable-signinallowed-by-default.patch

@@ -3,21 +3,21 @@ Date: Fri, 9 Nov 2018 11:59:50 +0100
 Subject: prefs: disable signinallowed by default
 
 ---
- components/signin/core/browser/signin_manager_base.cc | 2 +-
+ components/signin/internal/identity_manager/primary_account_manager.cc | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/components/signin/core/browser/signin_manager_base.cc b/components/signin/core/browser/signin_manager_base.cc
---- a/components/signin/core/browser/signin_manager_base.cc
-+++ b/components/signin/core/browser/signin_manager_base.cc
-@@ -59,7 +59,7 @@ void SigninManagerBase::RegisterProfilePrefs(PrefRegistrySimple* registry) {
+diff --git a/components/signin/internal/identity_manager/primary_account_manager.cc b/components/signin/internal/identity_manager/primary_account_manager.cc
+--- a/components/signin/internal/identity_manager/primary_account_manager.cc
++++ b/components/signin/internal/identity_manager/primary_account_manager.cc
+@@ -58,7 +58,7 @@ void PrimaryAccountManager::RegisterProfilePrefs(PrefRegistrySimple* registry) {
                                 std::string());
    registry->RegisterBooleanPref(prefs::kAutologinEnabled, true);
    registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList);
 -  registry->RegisterBooleanPref(prefs::kSigninAllowed, true);
 +  registry->RegisterBooleanPref(prefs::kSigninAllowed, false);
-   registry->RegisterInt64Pref(prefs::kSignedInTime,
-                               base::Time().ToInternalValue());
    registry->RegisterBooleanPref(prefs::kSignedInWithCredentialProvider, false);
+ 
+   // Deprecated prefs: will be removed in a future release.
 -- 
 2.11.0
 

+ 1 - 1
build/patches/promo-disable-Google-promotion-fetching.patch

@@ -22,7 +22,7 @@ References: https://github.com/iridium-browser/iridium-browser/issues/33
 diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc
 --- a/chrome/browser/signin/signin_promo.cc
 +++ b/chrome/browser/signin/signin_promo.cc
-@@ -57,6 +57,7 @@ GURL GetEmbeddedPromoURL(signin_metrics::AccessPoint access_point,
+@@ -56,6 +56,7 @@ GURL GetEmbeddedPromoURL(signin_metrics::AccessPoint access_point,
      url = net::AppendQueryParameter(url, signin::kSignInPromoQueryKeyAutoClose,
                                      "1");
    }

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

@@ -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
-@@ -358,7 +358,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -356,7 +356,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");
-@@ -440,7 +440,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -438,7 +438,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetClientReportUrl(kClientReportMalwareUrl);
    resource_request->method = "POST";
@@ -38,7 +38,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
 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
-@@ -751,7 +751,7 @@ void CheckClientDownloadRequest::SendRequest() {
+@@ -773,7 +773,7 @@ void CheckClientDownloadRequest::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
-@@ -252,7 +252,7 @@ void PPAPIDownloadRequest::SendRequest() {
+@@ -251,7 +251,7 @@ void PPAPIDownloadRequest::SendRequest() {
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetDownloadRequestUrl();
    resource_request->method = "POST";

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

@@ -59,7 +59,7 @@ 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
-@@ -322,8 +322,10 @@ SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() {
+@@ -257,8 +257,10 @@ SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() {
  
  void SafeBrowsingService::RegisterAllDelayedAnalysis() {
  #if defined(FULL_SAFE_BROWSING)

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

@@ -26,7 +26,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
  
  }  // namespace
  
-@@ -289,6 +291,10 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -287,6 +289,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());
-@@ -371,6 +377,7 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -369,6 +375,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(
-@@ -385,6 +392,10 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -383,6 +390,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);
-@@ -454,6 +465,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -452,6 +463,7 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
  
    // Record that we made a malware request
    malware_report_times_.push(base::Time::Now());

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

@@ -7,17 +7,17 @@ NOTE: This can break Remote Debugging
 This also fixes local debugging with domain substitution
 Related comment: https://bugs.chromium.org/p/chromium/issues/detail?id=710701#c14
 ---
- third_party/blink/renderer/devtools/BUILD.gn                      | 6 ++----
- third_party/blink/renderer/devtools/front_end/audits2_worker.json | 2 +-
- third_party/blink/renderer/devtools/front_end/devtools_app.json   | 6 +++---
- third_party/blink/renderer/devtools/front_end/shell.json          | 4 ++--
- third_party/blink/renderer/devtools/front_end/worker_app.json     | 2 +-
+ third_party/blink/renderer/devtools/BUILD.gn                     | 6 ++----
+ third_party/blink/renderer/devtools/front_end/audits_worker.json | 2 +-
+ third_party/blink/renderer/devtools/front_end/devtools_app.json  | 6 +++---
+ third_party/blink/renderer/devtools/front_end/shell.json         | 4 ++--
+ third_party/blink/renderer/devtools/front_end/worker_app.json    | 2 +-
  5 files changed, 9 insertions(+), 11 deletions(-)
 
 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
-@@ -1286,10 +1286,8 @@ action("generate_devtools_grd") {
+@@ -1281,10 +1281,8 @@ action("generate_devtools_grd") {
        devtools_embedder_scripts +
        [ "$resources_out_dir/devtools_extension_api.js" ]
  
@@ -30,15 +30,15 @@ diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/re
  
    inputs = grd_files + devtools_image_files
    outfile = "$root_gen_dir/devtools/devtools_resources.grd"
-diff --git a/third_party/blink/renderer/devtools/front_end/audits2_worker.json b/third_party/blink/renderer/devtools/front_end/audits2_worker.json
---- a/third_party/blink/renderer/devtools/front_end/audits2_worker.json
-+++ b/third_party/blink/renderer/devtools/front_end/audits2_worker.json
+diff --git a/third_party/blink/renderer/devtools/front_end/audits_worker.json b/third_party/blink/renderer/devtools/front_end/audits_worker.json
+--- a/third_party/blink/renderer/devtools/front_end/audits_worker.json
++++ b/third_party/blink/renderer/devtools/front_end/audits_worker.json
 @@ -1,6 +1,6 @@
  {
      "modules": [
          { "name": "worker_service", "type": "autostart" },
--        { "name": "audits2_worker", "type": "remote" }
-+        { "name": "audits2_worker" }
+-        { "name": "audits_worker", "type": "remote" }
++        { "name": "audits_worker" }
      ]
  }
 diff --git a/third_party/blink/renderer/devtools/front_end/devtools_app.json b/third_party/blink/renderer/devtools/front_end/devtools_app.json
@@ -51,7 +51,7 @@ diff --git a/third_party/blink/renderer/devtools/front_end/devtools_app.json b/t
 -    { "name": "accessibility", "type": "remote" },
 +    { "name": "accessibility" },
      { "name": "animation" },
-     { "name": "audits2" },
+     { "name": "audits" },
      { "name": "browser_debugger" },
      { "name": "cookie_table" },
      { "name": "devices" },

+ 13 - 13
build/patches/ungoogled-chromium-Disable-GCM.patch

@@ -10,7 +10,7 @@ Disable Google Cloud Messaging (GCM) client
 diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc
 --- a/components/gcm_driver/gcm_client_impl.cc
 +++ b/components/gcm_driver/gcm_client_impl.cc
-@@ -492,6 +492,7 @@ void GCMClientImpl::StartGCM() {
+@@ -463,6 +463,7 @@ void GCMClientImpl::StartGCM() {
    device_checkin_info_.Reset();
    StartCheckin();
  }
@@ -18,22 +18,22 @@ diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gc
  
  void GCMClientImpl::InitializeMCSClient() {
    DCHECK(network_connection_tracker_);
-@@ -684,6 +685,7 @@ void GCMClientImpl::RemoveHeartbeatInterval(const std::string& scope) {
- }
- 
- void GCMClientImpl::StartCheckin() {
+@@ -655,6 +656,7 @@ void GCMClientImpl::AddHeartbeatInterval(const std::string& scope,
+                                          int interval_ms) {
+   DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+   DCHECK(mcs_client_);
 +  return;
-   // Make sure no checkin is in progress.
-   if (checkin_request_)
-     return;
-@@ -759,6 +761,7 @@ void GCMClientImpl::SetGServicesSettingsCallback(bool success) {
+   mcs_client_->AddHeartbeatInterval(scope, interval_ms);
  }
  
- void GCMClientImpl::SchedulePeriodicCheckin() {
+@@ -730,6 +732,7 @@ void GCMClientImpl::OnCheckinCompleted(
+     }
+ 
+     last_checkin_time_ = clock_->Now();
 +  return;
-   // Make sure no checkin is in progress.
-   if (checkin_request_.get() || !device_checkin_info_.accounts_set)
-     return;
+     gcm_store_->SetLastCheckinInfo(
+         last_checkin_time_,
+         device_checkin_info_.last_checkin_accounts,
 -- 
 2.11.0
 

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

@@ -15,7 +15,7 @@ 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
-@@ -363,7 +363,6 @@
+@@ -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" />
        <include name="IDR_INLINE_LOGIN_JS" file="resources\inline_login\inline_login.js" flattenhtml="true" type="BINDATA" />
@@ -26,7 +26,7 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou
 diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc
 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc
 +++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc
-@@ -53,7 +53,6 @@ content::WebUIDataSource* CreateWebUIDataSource() {
+@@ -52,7 +52,6 @@ content::WebUIDataSource* CreateWebUIDataSource() {
  
    source->AddResourcePath("inline_login.css", IDR_INLINE_LOGIN_CSS);
    source->AddResourcePath("inline_login.js", IDR_INLINE_LOGIN_JS);
@@ -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";
-@@ -263,6 +263,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
+@@ -261,6 +261,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;
-@@ -313,6 +314,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
+@@ -311,6 +312,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
        base::BindOnce(&GaiaAuthFetcher::OnURLLoadComplete,
                       base::Unretained(this)),
        kMaxMessageSize);

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

@@ -327,7 +327,7 @@ diff --git a/components/google/core/common/google_util.cc b/components/google/co
 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
-@@ -505,11 +505,7 @@ base::string16 TemplateURLRef::SearchTermToString16(
+@@ -500,11 +500,7 @@ base::string16 TemplateURLRef::SearchTermToString16(
  bool TemplateURLRef::HasGoogleBaseURLs(
      const SearchTermsData& search_terms_data) const {
    ParseIfNecessary(search_terms_data);

+ 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
-@@ -76,9 +76,7 @@ void IntranetRedirectDetector::FinishSleep() {
+@@ -75,9 +75,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
-@@ -1380,8 +1380,6 @@ jumbo_split_static_library("browser") {
+@@ -1392,8 +1392,6 @@ jumbo_split_static_library("browser") {
      "profiles/profile_attributes_entry.h",
      "profiles/profile_attributes_storage.cc",
      "profiles/profile_attributes_storage.h",

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott