فهرست منبع

Release 77.0.3865.81

csagan5 5 سال پیش
والد
کامیت
5330cb879f
100فایلهای تغییر یافته به همراه3469 افزوده شده و 2487 حذف شده
  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
 # 76.0.3809.129
 * disable CFI to fix x86 crashes (fixes https://github.com/bromite/bromite/issues/357)
 * 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_resource_whitelist_generation=false
 enable_vr=false
 enable_vr=false
 fieldtrial_testing_like_official_build=true
 fieldtrial_testing_like_official_build=true
-is_cfi=false
+is_cfi=true
 is_component_build=false
 is_component_build=false
 is_debug=false
 is_debug=false
 is_official_build=true
 is_official_build=true

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 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
 diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
 --- a/media/base/mime_util_internal.cc
 --- a/media/base/mime_util_internal.cc
 +++ b/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:
      case THEORA:
        return false;
        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
 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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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},
       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
  #endif  // OS_ANDROID
  
  
  const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = {
  const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = {
-@@ -3273,6 +3281,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3438,6 +3446,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kEnableSyncUSSBookmarksName,
       flag_descriptions::kEnableSyncUSSBookmarksName,
       flag_descriptions::kEnableSyncUSSBookmarksDescription, kOsAll,
       flag_descriptions::kEnableSyncUSSBookmarksDescription, kOsAll,
       FEATURE_VALUE_TYPE(switches::kSyncUSSBookmarks)},
       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
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/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 "
      "When enabled, and navigation fails with an offline error, schedule a "
      "fetch of the page when online again.";
      "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
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/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 kAutoFetchOnNetErrorPageName[];
  extern const char kAutoFetchOnNetErrorPageDescription[];
  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
 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
 --- a/chrome/browser/net/system_network_context_manager.cc
 +++ b/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/component_updater/crl_set_component_installer.h"
- #include "chrome/browser/io_thread.h"
  #include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
  #include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
 +#include "components/network_session_configurator/common/network_switches.h"
 +#include "components/network_session_configurator/common/network_switches.h"
  #include "chrome/browser/safe_browsing/safe_browsing_service.h"
  #include "chrome/browser/safe_browsing/safe_browsing_service.h"
  #include "chrome/browser/ssl/ssl_config_service_manager.h"
  #include "chrome/browser/ssl/ssl_config_service_manager.h"
  #include "chrome/common/channel_info.h"
  #include "chrome/common/channel_info.h"
-@@ -124,6 +125,7 @@ void GetStubResolverConfig(
+@@ -111,6 +112,7 @@ void GetStubResolverConfig(
        if (!net::dns_util::IsValidDoHTemplate(
        if (!net::dns_util::IsValidDoHTemplate(
                doh_server_list[i].GetString(),
                doh_server_list[i].GetString(),
                doh_server_method_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;
          continue;
        }
        }
  
  
-@@ -400,15 +402,12 @@ SystemNetworkContextManager::SystemNetworkContextManager(
+@@ -378,15 +380,12 @@ SystemNetworkContextManager::SystemNetworkContextManager(
                                      base::Value(ShouldEnableAsyncDns()));
                                      base::Value(ShouldEnableAsyncDns()));
    base::ListValue default_doh_servers;
    base::ListValue default_doh_servers;
    base::ListValue default_doh_server_methods;
    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
 diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 --- a/net/dns/dns_transaction.cc
 +++ b/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_->SetExtraRequestHeaders(extra_request_headers);
      request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE |
      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);
                             LOAD_BYPASS_PROXY);
      request_->set_allow_credentials(false);
      request_->set_allow_credentials(false);
    }
    }
-@@ -811,7 +790,7 @@ class DnsTransactionImpl : public DnsTransaction,
+@@ -806,7 +807,7 @@ class DnsTransactionImpl : public DnsTransaction,
          doh_attempt_(false),
          doh_attempt_(false),
          first_server_index_(0),
          first_server_index_(0),
          url_request_context_(url_request_context),
          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
 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
 --- a/net/url_request/url_request_http_job.cc
 +++ b/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.
    // plugin could set a referrer although sending the referrer is inhibited.
    request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
    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
    // Our consumer should have made sure that this is a safe referrer. See for
    // instance WebCore::FrameLoader::HideReferrer.
    // instance WebCore::FrameLoader::HideReferrer.
    if (referrer.is_valid()) {
    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,
      request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
                                            referer_value);
                                            referer_value);
    }
    }
@@ -254,7 +223,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque
  
  
    AddExtraHeaders();
    AddExtraHeaders();
    AddCookieHeaderAndStart();
    AddCookieHeaderAndStart();
-@@ -588,10 +592,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
+@@ -582,10 +586,12 @@ void URLRequestHttpJob::AddExtraHeaders() {
      } else {
      } else {
        // Advertise "br" encoding only if transferred data is opaque to proxy.
        // Advertise "br" encoding only if transferred data is opaque to proxy.
        bool advertise_brotli = false;
        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.
 Offer auto-complete for the proxy page URL.
 ---
 ---
  chrome/android/java/res/values/values.xml          |   3 +
  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_autocomplete_provider_client.cc         |   2 +
  chrome/browser/browser_resources.grd               |   2 +
  chrome/browser/browser_resources.grd               |   2 +
  .../prefs/chrome_command_line_pref_store.cc        |   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/resources/proxy_config.js           | 252 +++++++++++++
  chrome/browser/ui/BUILD.gn                         |   2 +
  chrome/browser/ui/BUILD.gn                         |   2 +
  .../ui/webui/chrome_web_ui_controller_factory.cc   |   3 +
  .../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/browser/ui/webui/proxy_config_ui.h          |  33 ++
  chrome/common/webui_url_constants.cc               |   4 +
  chrome/common/webui_url_constants.cc               |   4 +
  chrome/common/webui_url_constants.h                |   2 +
  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 +-
  components/proxy_config/proxy_config_dictionary.h  |   6 +-
  net/proxy_resolution/proxy_config.cc               |  45 +++
  net/proxy_resolution/proxy_config.cc               |  45 +++
  net/proxy_resolution/proxy_config.h                |   3 +
  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.css
  create mode 100644 chrome/browser/resources/proxy_config.html
  create mode 100644 chrome/browser/resources/proxy_config.html
  create mode 100644 chrome/browser/resources/proxy_config.js
  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
 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
 --- a/chrome/android/java/res/values/values.xml
 +++ b/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_selected">1</integer>
      <integer name="list_item_level_incognito">2</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
 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
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/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
 +    <org.chromium.chrome.browser.preferences.HyperlinkPreference
 +        android:key="proxy"
 +        android:key="proxy"
 +        android:title="@string/proxy_title"
 +        android:title="@string/proxy_title"
 +        app:url="@string/proxy_url" />
 +        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
 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
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/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(
    builtins_to_provide.push_back(
        base::ASCIIToUTF16(chrome::kChromeUIFlagsURL));
        base::ASCIIToUTF16(chrome::kChromeUIFlagsURL));
    builtins_to_provide.push_back(
    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
 diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 +++ b/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" />
          <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>
        </if>
        <include name="IDR_SUPERVISED_USER_INTERNALS_HTML" file="resources\supervised_user_internals\supervised_user_internals.html" allowexternalscript="true" compress="gzip" type="BINDATA" />
        <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
 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
 --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc
 +++ b/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(
      SetValue(
          proxy_config::prefs::kProxy,
          proxy_config::prefs::kProxy,
          std::make_unique<base::Value>(ProxyConfigDictionary::CreateFixedServers(
          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
 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
 --- a/chrome/browser/ui/BUILD.gn
 --- a/chrome/browser/ui/BUILD.gn
 +++ b/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/metrics_handler.h",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.cc",
      "webui/net_export_ui.h",
      "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/proxy_config_ui.h",
      "webui/net_internals/net_internals_ui.cc",
      "webui/net_internals/net_internals_ui.cc",
      "webui/net_internals/net_internals_ui.h",
      "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
 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
 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 +++ b/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/password_manager_internals/password_manager_internals_ui.h"
  #include "chrome/browser/ui/webui/policy_ui.h"
  #include "chrome/browser/ui/webui/policy_ui.h"
  #include "chrome/browser/ui/webui/predictors/predictors_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/quota_internals/quota_internals_ui.h"
  #include "chrome/browser/ui/webui/settings/settings_ui.h"
  #include "chrome/browser/ui/webui/settings/settings_ui.h"
  #include "chrome/browser/ui/webui/settings_utils.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>;
      return &NewWebUI<MemoryInternalsUI>;
    if (url.host_piece() == chrome::kChromeUINetExportHost)
    if (url.host_piece() == chrome::kChromeUINetExportHost)
      return &NewWebUI<NetExportUI>;
      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>;
 +    return &NewWebUI<ProxyConfigUI>;
    if (url.host_piece() == chrome::kChromeUINetInternalsHost)
    if (url.host_piece() == chrome::kChromeUINetInternalsHost)
      return &NewWebUI<NetInternalsUI>;
      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
 diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webui/proxy_config_ui.cc
 new file mode 100644
 new file mode 100644
 --- /dev/null
 --- /dev/null
 +++ b/chrome/browser/ui/webui/proxy_config_ui.cc
 +++ b/chrome/browser/ui/webui/proxy_config_ui.cc
-@@ -0,0 +1,398 @@
+@@ -0,0 +1,397 @@
 +/*
 +/*
 +    This file is part of Bromite.
 +    This file is part of Bromite.
 +
 +
@@ -577,7 +574,6 @@ new file mode 100644
 +#include "base/strings/utf_string_conversions.h"
 +#include "base/strings/utf_string_conversions.h"
 +#include "base/values.h"
 +#include "base/values.h"
 +#include "chrome/browser/browser_process.h"
 +#include "chrome/browser/browser_process.h"
-+#include "chrome/browser/io_thread.h"
 +#include "chrome/browser/net/proxy_service_factory.h"
 +#include "chrome/browser/net/proxy_service_factory.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/profiles/profile.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
 diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
 --- a/chrome/common/webui_url_constants.cc
 --- a/chrome/common/webui_url_constants.cc
 +++ b/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 kChromeUINativeScheme[] = "chrome-native";
  const char kChromeUIOfflineInternalsHost[] = "offline-internals";
  const char kChromeUIOfflineInternalsHost[] = "offline-internals";
  const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics";
  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 kChromeUISnippetsInternalsHost[] = "snippets-internals";
  const char kChromeUIWebApksHost[] = "webapks";
  const char kChromeUIWebApksHost[] = "webapks";
  #endif
  #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_ANDROID)
  #if !defined(OS_CHROMEOS)
  #if !defined(OS_CHROMEOS)
      kChromeUIAppLauncherPageHost,
      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
 diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
 --- a/chrome/common/webui_url_constants.h
 --- a/chrome/common/webui_url_constants.h
 +++ b/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 kChromeUINTPTilesInternalsHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINaClHost[];
  extern const char kChromeUINetExportHost[];
  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 ++++
  .../chrome/browser/appmenu/AppMenuHandlerImpl.java | 11 ++++
  .../contextmenu/ChromeContextMenuPopulator.java    |  9 ++-
  .../contextmenu/ChromeContextMenuPopulator.java    |  9 ++-
  .../chrome/browser/tabmodel/ChromeTabCreator.java  | 24 ++++++-
  .../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
  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
 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
 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
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/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:key="always_incognito"
 +        android:title="@string/always_incognito_title"
 +        android:title="@string/always_incognito_title"
 +        android:summary="@string/always_incognito_summary"
 +        android:summary="@string/always_incognito_summary"
 +        android:defaultValue="false" />
 +        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
 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
 new file mode 100644
 --- /dev/null
 --- /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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/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;
      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.
       * 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(
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
                      "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.metrics.RecordHistogram;
 +import org.chromium.base.ContextUtils;
 +import org.chromium.base.ContextUtils;
  import org.chromium.chrome.R;
  import org.chromium.chrome.R;
- import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabPanel;
  import org.chromium.chrome.browser.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 static final String TAG = "CCMenuPopulator";
      private final ContextMenuItemDelegate mDelegate;
      private final ContextMenuItemDelegate mDelegate;
      private final @ContextMenuMode int mMode;
      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
       * 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
              if (FirstRunStatus.getFirstRunFlowComplete() && mMode == ContextMenuMode.NORMAL
                      && !isEmptyUrl(params.getUrl())
                      && !isEmptyUrl(params.getUrl())
                      && UrlUtilities.isAcceptedScheme(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.TabDelegateFactory;
  import org.chromium.chrome.browser.tab.TabParentIntent;
  import org.chromium.chrome.browser.tab.TabParentIntent;
  import org.chromium.chrome.browser.tab.TabRedirectHandler;
  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 ChromeActivity mActivity;
      private final boolean mIncognito;
      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 WindowAndroid mNativeWindow;
      private TabModel mTabModel;
      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;
          mActivity = activity;
          mNativeWindow = nativeWindow;
          mNativeWindow = nativeWindow;
          mIncognito = incognito;
          mIncognito = incognito;
@@ -252,7 +250,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
      }
      }
  
  
      @Override
      @Override
-@@ -169,6 +178,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -170,6 +179,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                          tab.getWebContents());
                          tab.getWebContents());
              }
              }
  
  
@@ -263,7 +261,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
              mTabModel.addTab(tab, position, type);
              mTabModel.addTab(tab, position, type);
              return tab;
              return tab;
          } finally {
          } finally {
-@@ -197,6 +210,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
+@@ -198,6 +211,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
                            .setWindow(mNativeWindow)
                            .setWindow(mNativeWindow)
                            .setLaunchType(type)
                            .setLaunchType(type)
                            .build();
                            .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);
          tab.initialize(webContents, delegateFactory, !openInForeground, null, false);
          mTabModel.addTab(tab, position, type);
          mTabModel.addTab(tab, position, type);
          return true;
          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,
      public Tab launchUrlFromExternalApp(String url, String referer, String headers,
              String appId, boolean forceNewTab, Intent intent, long intentTimestamp) {
              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());
          boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
  
  
          // If an external app sends an intent for a Weblite URL and the Data Reduction Proxy is
          // 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());
                  state.isIncognito());
          tab.initialize(null, createDefaultTabDelegateFactory(), !selectTab, state, false);
          tab.initialize(null, createDefaultTabDelegateFactory(), !selectTab, state, false);
          assert state.isIncognito() == mIncognito;
          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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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>
        </message>
+ 
++      <!-- always incognito -->
 +      <message name="IDS_ALWAYS_INCOGNITO_TITLE" desc="Title for always incognito mode">
 +      <message name="IDS_ALWAYS_INCOGNITO_TITLE" desc="Title for always incognito mode">
 +        Open links in incognito tabs always
 +        Open links in incognito tabs always
 +      </message>
 +      </message>
 +      <message name="IDS_ALWAYS_INCOGNITO_SUMMARY" desc="Summary for always incognito mode">
 +      <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
 +        Opens links in incognito tabs when you click on new tab or on a link
 +      </message>
 +      </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
 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 +
  .../chrome/browser/bookmarks/BookmarkPage.java     |   1 +
  .../java/strings/android_chrome_strings.grd        |   6 +
  .../java/strings/android_chrome_strings.grd        |   6 +
  chrome/browser/BUILD.gn                            |   8 +-
  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/android/bookmarks/bookmark_bridge.h |  20 +-
  chrome/browser/importer/profile_writer.cc          |  12 ++
  chrome/browser/importer/profile_writer.cc          |  12 ++
  chrome/browser/importer/profile_writer.h           |   6 +
  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/BUILD.gn                            |   7 +-
  chrome/utility/importer/bookmark_html_reader.cc    |  27 ++-
  chrome/utility/importer/bookmark_html_reader.cc    |  27 ++-
  chrome/utility/importer/bookmark_html_reader.h     |   9 +
  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.h              |   2 +
  ui/shell_dialogs/select_file_dialog_android.cc     |   6 +
  ui/shell_dialogs/select_file_dialog_android.cc     |   6 +
  ui/shell_dialogs/select_file_dialog_android.h      |   2 +
  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
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 +++ b/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 %}
      {% endif %}
      <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
      <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
      <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
      <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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
 +++ b/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) {
          } else if (menuItem.getItemId() == R.id.search_menu_id) {
              mDelegate.openSearchUI();
              mDelegate.openSearchUI();
              return true;
              return true;
@@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          }
          }
  
  
          SelectionDelegate<BookmarkId> selectionDelegate = mDelegate.getSelectionDelegate();
          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() {
      void showLoadingUi() {
          setTitle(null);
          setTitle(null);
          setNavigationButton(NAVIGATION_BUTTON_NONE);
          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.search_menu_id).setVisible(false);
          getMenu().findItem(R.id.edit_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();
          super.showNormalView();
  
  
          if (mDelegate == null) {
          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.search_menu_id).setVisible(false);
              getMenu().findItem(R.id.edit_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) {
      public void onFolderStateSet(BookmarkId folder) {
          mCurrentFolder = mDelegate.getModel().getBookmarkById(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
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java
 @@ -12,6 +12,7 @@ import org.chromium.base.VisibleForTesting;
 @@ -12,6 +12,7 @@ import org.chromium.base.VisibleForTesting;
  import org.chromium.chrome.browser.SnackbarActivity;
  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.components.bookmarks.BookmarkId;
 +import org.chromium.ui.base.ActivityWindowAndroid;
 +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.ArrayList;
  import java.util.List;
  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.
       * Synchronously gets a list of bookmarks that match the specified search query.
       * @param query Keyword used for searching bookmarks.
       * @param query Keyword used for searching bookmarks.
       * @param maxNumberOfResult Maximum number of result to fetch.
       * @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);
          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) {
      private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) {
          List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
          List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
          for (int i = 0; i < left.length; i++) {
          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);
              boolean getFolders, boolean getBookmarks, List<BookmarkId> bookmarksList);
      private native BookmarkId nativeGetChildAt(long nativeBookmarkBridge, long id, int type,
      private native BookmarkId nativeGetChildAt(long nativeBookmarkBridge, long id, int type,
              int index);
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java
 +++ b/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();
      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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
 +++ b/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.BookmarkItem;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
 +import org.chromium.chrome.browser.ChromeActivity;
 +import org.chromium.chrome.browser.ChromeActivity;
  import org.chromium.chrome.browser.favicon.LargeIconBridge;
  import org.chromium.chrome.browser.favicon.LargeIconBridge;
  import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
  import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
  import org.chromium.chrome.browser.native_page.BasicNativePage;
  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.SelectableListToolbar.SearchDelegate;
  import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
  import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
  import org.chromium.components.bookmarks.BookmarkId;
  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;
  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 Activity mActivity;
      private ViewGroup mMainView;
      private ViewGroup mMainView;
      private BookmarkModel mBookmarkModel;
      private BookmarkModel mBookmarkModel;
@@ -291,7 +291,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private BookmarkUndoController mUndoController;
      private BookmarkUndoController mUndoController;
      private final ObserverList<BookmarkUIObserver> mUIObservers = new ObserverList<>();
      private final ObserverList<BookmarkUIObserver> mUIObservers = new ObserverList<>();
      private BasicNativePage mNativePage;
      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
       * @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
       *         yet in this session, on phone return last used state stored in preference; on tablet
       *         return the url previously set by {@link #updateForUrl(String)}.
       *         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
      @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
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/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.h",
      "bitmap_fetcher/bitmap_fetcher_service_factory.cc",
      "bitmap_fetcher/bitmap_fetcher_service_factory.cc",
      "bitmap_fetcher/bitmap_fetcher_service_factory.h",
      "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.cc",
      "bookmarks/bookmark_model_factory.h",
      "bookmarks/bookmark_model_factory.h",
      "bookmarks/chrome_bookmark_client.cc",
      "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.cc",
        "banners/app_banner_manager_desktop.h",
        "banners/app_banner_manager_desktop.h",
 -      "bookmarks/bookmark_html_writer.cc",
 -      "bookmarks/bookmark_html_writer.cc",
@@ -372,7 +372,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
        "certificate_viewer.h",
        "certificate_viewer.h",
        "chrome_browser_field_trials_desktop.cc",
        "chrome_browser_field_trials_desktop.cc",
        "chrome_browser_field_trials_desktop.h",
        "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/importer_uma.h",
        "importer/in_process_importer_bridge.cc",
        "importer/in_process_importer_bridge.cc",
        "importer/in_process_importer_bridge.h",
        "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
 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
 --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
 +++ b/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/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/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 "base/strings/utf_string_conversions.h"
 +#include "chrome/utility/importer/bookmark_html_reader.h"
 +#include "chrome/utility/importer/bookmark_html_reader.h"
 +#include "chrome/browser/bookmarks/bookmark_html_writer.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/importer/profile_writer.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/platform_util.h"
 +#include "chrome/browser/ui/chrome_select_file_policy.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/imported_bookmark_entry.h"
 +#include "chrome/common/importer/importer_data_types.h"
 +#include "chrome/common/importer/importer_data_types.h"
 +#include "chrome/common/url_constants.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/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 "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 "ui/android/window_android.h"
- #include "services/identity/public/cpp/identity_manager.h"
- 
++
  using base::android::AttachCurrentThread;
  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 bookmarks::BookmarkType;
  using content::BrowserThread;
  using content::BrowserThread;
  
  
@@ -487,7 +464,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
  namespace {
  namespace {
  
  
  class BookmarkTitleComparer {
  class BookmarkTitleComparer {
-@@ -130,6 +195,10 @@ BookmarkBridge::~BookmarkBridge() {
+@@ -131,6 +197,10 @@ BookmarkBridge::~BookmarkBridge() {
    bookmark_model_->RemoveObserver(this);
    bookmark_model_->RemoveObserver(this);
    if (partner_bookmarks_shim_)
    if (partner_bookmarks_shim_)
      partner_bookmarks_shim_->RemoveObserver(this);
      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>&) {
  void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) {
-@@ -475,6 +544,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
+@@ -444,6 +514,152 @@ jint BookmarkBridge::GetTotalBookmarkCount(
    return count;
    return count;
  }
  }
  
  
@@ -686,7 +663,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
    jboolean IsEditBookmarksEnabled(
    jboolean IsEditBookmarksEnabled(
        JNIEnv* env,
        JNIEnv* env,
        const base::android::JavaParamRef<jobject>& obj);
        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,
                               jlong id,
                               jint type);
                               jint type);
  
  
@@ -700,7 +677,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
    void SetBookmarkTitle(JNIEnv* env,
    void SetBookmarkTitle(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& obj,
                          const base::android::JavaParamRef<jobject>& obj,
                          jlong id,
                          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;
    void ShimBeingDeleted(PartnerBookmarksShim* shim) override;
  
  
    Profile* profile_;
    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
 diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc
 --- a/chrome/browser/importer/profile_writer.cc
 --- a/chrome/browser/importer/profile_writer.cc
 +++ b/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_,
      HistoryServiceFactory::GetForProfile(profile_,
                                           ServiceAccessType::EXPLICIT_ACCESS)
                                           ServiceAccessType::EXPLICIT_ACCESS)
          ->AddPagesWithDetails(page, visit_source);
          ->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) {
  void ProfileWriter::AddHomepage(const GURL& home_page) {
-@@ -123,6 +125,16 @@ void ProfileWriter::AddBookmarks(
+@@ -122,6 +124,16 @@ void ProfileWriter::AddBookmarks(
      return;
      return;
  
  
    BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_);
    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
 diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
 --- a/chrome/common/BUILD.gn
 --- a/chrome/common/BUILD.gn
 +++ b/chrome/common/BUILD.gn
 +++ b/chrome/common/BUILD.gn
-@@ -438,6 +438,9 @@ static_library("common") {
+@@ -445,6 +445,9 @@ static_library("common") {
      sources += [
      sources += [
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.cc",
        "media/chrome_media_drm_bridge_client.h",
        "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
 diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
 --- a/chrome/utility/BUILD.gn
 --- a/chrome/utility/BUILD.gn
 +++ b/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) {
    if (!is_android) {
      sources += [
      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.cc",
        "importer/bookmarks_file_importer.h",
        "importer/bookmarks_file_importer.h",
        "importer/edge_database_reader_win.cc",
        "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);
              if (!window.hasPermission(storagePermission)) missingPermissions.add(storagePermission);
          } else {
          } else {
              if (((mSupportsImageCapture && shouldShowImageTypes())
              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();
                              onFileNotSelected();
                              return;
                              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);
              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;
          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;
          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
 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
 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
 --- 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
 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
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/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:key="allow_custom_tab_intents"
 +        android:title="@string/allow_custom_tab_intents_title"
 +        android:title="@string/allow_custom_tab_intents_title"
 +        android:summary="@string/allow_custom_tab_intents_summary"
 +        android:summary="@string/allow_custom_tab_intents_summary"
 +        android:defaultValue="false" />
 +        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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
 +++ b/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.searchwidget.SearchActivity;
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.util.FeatureUtilities;
  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) {
      public static boolean isCustomTabIntent(Intent intent) {
          if (intent == null) return false;
          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
 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
 --- 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
 +++ 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)) {
 +        } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
 +            sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
 +            sharedPreferencesEditor.apply();
 +            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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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">
        <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
           Close other incognito tabs
        </message>
        </message>
++      <!-- Allow custom tab intents -->
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
 +        Allow custom tab intents
 +        Allow custom tab intents
 +      </message>
 +      </message>
 +      <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_SUMMARY" desc="Summary text for 'Allow custom tab intents' settings-privacy option.">
 +      <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.
 +        Allow applications to open custom tab intents, similar to webview.
 +      </message>
 +      </message>
-+
  
  
        <!-- Autofill Assistant preferences -->
        <!-- Autofill Assistant preferences -->
        <message name="IDS_PREFS_AUTOFILL_ASSISTANT_TITLE" desc="Title for the Autofill Assistant preferences screen. [CHAR-LIMIT=32]">
        <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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/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);
                      new AddToHomescreenManager(this, currentTab);
              addToHomescreenManager.start();
              addToHomescreenManager.start();
              RecordUserAction.record("MobileMenuAddToHomescreen");
              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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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]">
        <message name="IDS_MENU_PREFERENCES" desc="Menu item for opening browser preferences. [CHAR-LIMIT=27]">
          Settings
          Settings
        </message>
        </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.cc                          |  3 +++
  .../common/network_features.h                           |  4 ++++
  .../common/network_features.h                           |  4 ++++
  .../common/network_switch_list.h                        |  4 ++++
  .../common/network_switch_list.h                        |  4 ++++
+ components/url_formatter/top_domains/BUILD.gn           |  1 +
  net/socket/client_socket_pool_manager.cc                | 17 +++++++++++++++++
  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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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},
       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
  // Ensure that all effective connection types returned by Network Quality
  // Estimator (NQE) are also exposed via flags.
  // Estimator (NQE) are also exposed via flags.
  static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 ==
  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::kPassiveDocumentEventListenersName,
       flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll,
       flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kPassiveDocumentEventListeners)},
       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
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/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 kMarkHttpAsName[] = "Mark non-secure origins as non-secure";
  const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
  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
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/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 kMarkHttpAsWarningAndDangerousOnFormEdits[];
  extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
  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
 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
 --- a/components/network_session_configurator/common/network_switch_list.h
 +++ b/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.
  // Enables the QUIC protocol.  This is a temporary testing flag.
  NETWORK_SWITCH(kEnableQuic, "enable-quic")
  NETWORK_SWITCH(kEnableQuic, "enable-quic")
+ 
 +// Allows specifying a higher number of maximum connections per host
 +// Allows specifying a higher number of maximum connections per host
 +// (15 instead of 6, mirroring the value Mozilla uses).
 +// (15 instead of 6, mirroring the value Mozilla uses).
 +NETWORK_SWITCH(kMaxConnectionsPerHost, "max-connections-per-host")
 +NETWORK_SWITCH(kMaxConnectionsPerHost, "max-connections-per-host")
 +
 +
- 
  // Ignores certificate-related errors.
  // Ignores certificate-related errors.
  NETWORK_SWITCH(kIgnoreCertificateErrors, "ignore-certificate-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
 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
 --- a/net/socket/client_socket_pool_manager.cc
 +++ b/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
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/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 kMemlogStackModeNativeWithThreadNames[] = "Native with thread names";
  const char kMemlogStackModePseudo[] = "Trace events";
  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
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/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 kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  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
 diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
 --- a/media/base/media_switches.cc
 --- a/media/base/media_switches.cc
 +++ b/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.
  // when in background.
  const base::Feature kResumeBackgroundVideo {
  const base::Feature kResumeBackgroundVideo {
    "resume-background-video",
    "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
 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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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,
           kMarkHttpAsFeatureVariations,
           "HTTPReallyBadFinal")},
           "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
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/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 kHomePageButtonName[] = "Force Enable Home Page Button";
  const char kHomePageButtonDescription[] = "Displays a home button if enabled.";
  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
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/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 kEnablePortalsName[];
  extern const char kEnablePortalsDescription[];
  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 kEnablePictureInPictureName[];
  extern const char kEnablePictureInPictureDescription[];
  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
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/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/client_socket_factory.h"
  #include "net/socket/datagram_client_socket.h"
  #include "net/socket/datagram_client_socket.h"
  #include "net/url_request/url_request_context.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"
  #include "url/url_canon_ip.h"
  
  
  #if BUILDFLAG(ENABLE_MDNS)
  #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;
    bool cached = true;
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
        kIPv6ProbePeriodMs) {
        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
 diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
 --- a/services/network/public/cpp/features.cc
 --- a/services/network/public/cpp/features.cc
 +++ b/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",
  const base::Feature kThrottleDelayable{"ThrottleDelayable",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
                                         base::FEATURE_ENABLED_BY_DEFAULT};
  
  
 +// Enable IPv6 ping probes to RIPE DNS.
 +// Enable IPv6 ping probes to RIPE DNS.
 +const base::Feature kIPv6Probing{"IPv6Probing",
 +const base::Feature kIPv6Probing{"IPv6Probing",
-+                                       base::FEATURE_DISABLED_BY_DEFAULT};
++                                       base::FEATURE_ENABLED_BY_DEFAULT};
 +
 +
  // When kPriorityRequestsDelayableOnSlowConnections is enabled, HTTP
  // When kPriorityRequestsDelayableOnSlowConnections is enabled, HTTP
  // requests fetched from a SPDY/QUIC/H2 proxies can be delayed by the
  // 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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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,
      {"enable-generic-sensor", flag_descriptions::kEnableGenericSensorName,
       flag_descriptions::kEnableGenericSensorDescription, kOsAll,
       flag_descriptions::kEnableGenericSensorDescription, kOsAll,
       FEATURE_VALUE_TYPE(features::kGenericSensor)},
       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
 diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/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, "
      "Accelerometer, LinearAccelerationSensor, Gyroscope, "
      "AbsoluteOrientationSensor and RelativeOrientationSensor interfaces.";
      "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
 diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 --- a/chrome/browser/flag_descriptions.h
 +++ b/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 kEnableGenericSensorName[];
  extern const char kEnableGenericSensorDescription[];
  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
 diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
 --- a/content/child/runtime_features.cc
 --- a/content/child/runtime_features.cc
 +++ b/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::kSharedArrayBuffer) ||
        base::FeatureList::IsEnabled(features::kWebAssemblyThreads));
        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
 diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
 --- a/content/public/common/content_features.cc
 --- a/content/public/common/content_features.cc
 +++ b/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.
  // TODO(rouslan): Remove this.
  const base::Feature kWebPayments{"WebPayments",
  const base::Feature kWebPayments{"WebPayments",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
                                   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
 diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
 --- a/content/public/common/content_features.h
 --- a/content/public/common/content_features.h
 +++ b/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 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
 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
 --- a/third_party/blink/public/platform/web_runtime_features.h
 +++ b/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 EnableCanvas2dImageChromium(bool);
    BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool);
    BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool);
    BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(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
 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
 --- a/third_party/blink/renderer/modules/modules_initializer.cc
 +++ b/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(
  void ModulesInitializer::OnClearWindowObjectInMainWorld(
      Document& document,
      Document& document,
      const Settings& settings) const {
      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
 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
 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
 +++ b/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);
    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
 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
 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
 +++ b/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",
        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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/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(
              currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent(
                      !usingDesktopUserAgent, reloadOnChange);
                      !usingDesktopUserAgent, reloadOnChange);
              RecordUserAction.record("MobileMenuRequestDesktopSite");
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/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);
                  NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
              }
              }
              RecordUserAction.record("MobileMenuDownloadManager");
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
 +++ b/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 */);
              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.
              // Only display reader mode settings menu option if the current page is in reader mode.
              menu.findItem(R.id.reader_mode_prefs_id)
              menu.findItem(R.id.reader_mode_prefs_id)
                      .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl()));
                      .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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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]">
        <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
          Find in page
        </message>
        </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
 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
 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
 --- a/chrome/android/java/res/values/values.xml
 +++ b/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. -->
      <!-- TODO(peconn): Add help section. -->
      <!-- <string name="help_context_suggestions">mobile_content_suggestions</string> -->
      <!-- <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
 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
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/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:key="close_tabs_on_exit"
 +        android:title="@string/close_tabs_on_exit_title"
 +        android:title="@string/close_tabs_on_exit_title"
 +        android:summary="@string/close_tabs_on_exit_summary"
 +        android:summary="@string/close_tabs_on_exit_summary"
 +        android:defaultValue="false" />
 +        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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/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 =
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
                      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.content.SharedPreferences;
  import android.os.Bundle;
  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.MenuInflater;
  import android.view.MenuItem;
  import android.view.MenuItem;
  
  
 +import org.chromium.base.ContextUtils;
 +import org.chromium.base.ContextUtils;
  import org.chromium.base.BuildInfo;
  import org.chromium.base.BuildInfo;
- import org.chromium.base.metrics.RecordHistogram;
  import org.chromium.chrome.R;
  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_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)) {
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
              PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue);
-             recordNetworkPredictionEnablingUMA((boolean) newValue);
 +        } else if (PREF_CLOSE_TABS_ON_EXIT.equals(key)) {
 +        } 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();
 +            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
 +            sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean)newValue);
 +            sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean)newValue);
 +            sharedPreferencesEditor.apply();
 +            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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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.">
        <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
          IMAGE
        </message>
        </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 +++++
  .../android/java/res/xml/homepage_preferences.xml  |  5 +++++
  .../partnercustomizations/HomepageManager.java     | 24 ++++++++++++++++++++--
  .../partnercustomizations/HomepageManager.java     | 24 ++++++++++++++++++++--
- .../browser/preferences/HomepagePreferences.java   | 14 ++++++++++++-
+ .../browser/preferences/HomepagePreferences.java   | 10 +++++++++
  .../chrome/browser/tabmodel/TabCreatorManager.java | 11 ++++++++--
  .../chrome/browser/tabmodel/TabCreatorManager.java | 11 ++++++++--
  .../java/strings/android_chrome_strings.grd        |  3 +++
  .../java/strings/android_chrome_strings.grd        |  3 +++
  chrome/browser/ui/browser_ui_prefs.cc              |  2 ++
  chrome/browser/ui/browser_ui_prefs.cc              |  2 ++
  chrome/common/pref_names.cc                        |  4 ++++
  chrome/common/pref_names.cc                        |  4 ++++
  chrome/common/pref_names.h                         |  1 +
  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
 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
 --- a/chrome/android/java/res/xml/homepage_preferences.xml
 +++ b/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:key="ntp_is_homepage_switch"
 +        android:summaryOn="@string/options_ntp_is_homepage_label"
 +        android:summaryOn="@string/options_ntp_is_homepage_label"
 +        android:summaryOff="@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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
 +++ b/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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/HomepagePreferences.java
 +++ b/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_HOMEPAGE_EDIT = "homepage_edit";
 +    private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
 +    private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
  
  
      private HomepageManager mHomepageManager;
      private HomepageManager mHomepageManager;
--    private ChromeSwitchPreference mHomepageSwitch;
-+    private ChromeSwitchPreference mHomepageSwitch, mNTPIsHomepageSwitch;
      private Preference mHomepageEdit;
      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();
 +        boolean isHomepageNTPEnabled = mHomepageManager.getPrefNTPIsHomepageEnabled();
 +        mNTPIsHomepageSwitch.setChecked(isHomepageNTPEnabled);
 +        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);
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
 +++ b/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.LoadUrlParams;
  import org.chromium.content_public.browser.WebContents;
  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 {
 @@ -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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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.">
        <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
          Open this page
        </message>
        </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
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/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.
  // A boolean specifying whether the New Tab page is the home page or not.
  const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage";
  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
 diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
 --- a/chrome/common/pref_names.h
 --- a/chrome/common/pref_names.h
 +++ b/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)
  #endif  // defined(OS_CHROMEOS)
  extern const char kShowHomeButton[];
  extern const char kShowHomeButton[];
 +extern const char kNewTabPageIsHomePage[];
 +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
 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
 --- a/chrome/android/java/res/values/values.xml
 +++ b/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_reload">0</integer>
      <integer name="reload_button_level_stop">1</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:defaultValue="true"
          android:persistent="false" />
          android:persistent="false" />
 +    <!-- A toggle for cookies to be saved only until session exit, only shown for the Cookies category. -->
 +    <!-- 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:key="cookies_session_only"
 +        android:title="@string/allow_cookies_session_only_title"
 +        android:title="@string/allow_cookies_session_only_title"
 +        android:summary="@string/allow_cookies_session_only_summary"
 +        android:summary="@string/allow_cookies_session_only_summary"
 +        android:defaultValue="true"
 +        android:defaultValue="true"
 +        android:persistent="false" />
 +        android:persistent="false" />
      <!-- A toggle for enabling vibration in notifications. -->
      <!-- A toggle for enabling vibration in notifications. -->
-     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference
+     <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat
          android:key="notifications_vibrate"
          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
 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
 --- 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
       * @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);
          nativeSetBlockThirdPartyCookiesEnabled(enabled);
      }
      }
  
  
@@ -66,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Pre
      public void setDoNotTrackEnabled(boolean enabled) {
      public void setDoNotTrackEnabled(boolean enabled) {
          nativeSetDoNotTrackEnabled(enabled);
          nativeSetDoNotTrackEnabled(enabled);
      }
      }
-@@ -1075,6 +1083,7 @@ public class PrefServiceBridge {
+@@ -1070,6 +1078,7 @@ public class PrefServiceBridge {
      private native boolean nativeGetAutoplayEnabled();
      private native boolean nativeGetAutoplayEnabled();
      private native boolean nativeGetBackgroundSyncEnabled();
      private native boolean nativeGetBackgroundSyncEnabled();
      private native boolean nativeGetBlockThirdPartyCookiesEnabled();
      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 nativeGetBlockThirdPartyCookiesManaged();
      private native boolean nativeGetRememberPasswordsEnabled();
      private native boolean nativeGetRememberPasswordsEnabled();
      private native boolean nativeGetPasswordManagerAutoSigninEnabled();
      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 nativeSetAutoplayEnabled(boolean enabled);
      private native void nativeSetAllowCookiesEnabled(boolean enabled);
      private native void nativeSetAllowCookiesEnabled(boolean enabled);
      private native void nativeSetBackgroundSyncEnabled(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
 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
 --- 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
 +++ 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.
      // Keys for category-specific preferences (toggle, link, button etc.), dynamically shown.
      public static final String THIRD_PARTY_COOKIES_TOGGLE_KEY = "third_party_cookies";
      public static final String 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 NOTIFICATIONS_VIBRATE_TOGGLE_KEY = "notifications_vibrate";
      public static final String EXPLAIN_PROTECTED_MEDIA_KEY = "protected_content_learn_more";
      public static final String EXPLAIN_PROTECTED_MEDIA_KEY = "protected_content_learn_more";
      private static final String ADD_EXCEPTION_KEY = "add_exception";
      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
                  if (type == SiteSettingsCategory.Type.COOKIES
                          && !FeatureUtilities.isNoTouchModeEnabled()) {
                          && !FeatureUtilities.isNoTouchModeEnabled()) {
                      updateThirdPartyCookiesCheckBox();
                      updateThirdPartyCookiesCheckBox();
@@ -101,7 +101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
                  } else if (type == SiteSettingsCategory.Type.NOTIFICATIONS) {
                  } else if (type == SiteSettingsCategory.Type.NOTIFICATIONS) {
                      updateNotificationsVibrateCheckBox();
                      updateNotificationsVibrateCheckBox();
                  }
                  }
-@@ -508,6 +510,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -523,6 +525,8 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              int setting = (int) newValue;
              int setting = (int) newValue;
              prefServiceBridge.setContentSetting(mCategory.getContentSettingsType(), setting);
              prefServiceBridge.setContentSetting(mCategory.getContentSettingsType(), setting);
              getInfoForOrigins();
              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())) {
          } else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) {
              prefServiceBridge.setBlockThirdPartyCookiesEnabled(((boolean) newValue));
              prefServiceBridge.setBlockThirdPartyCookiesEnabled(((boolean) newValue));
          } else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) {
          } 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 triStateToggle =
                  (TriStateSiteSettingsPreference) screen.findPreference(TRI_STATE_TOGGLE_KEY);
                  (TriStateSiteSettingsPreference) screen.findPreference(TRI_STATE_TOGGLE_KEY);
          Preference thirdPartyCookies = screen.findPreference(THIRD_PARTY_COOKIES_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 notificationsVibrate = screen.findPreference(NOTIFICATIONS_VIBRATE_TOGGLE_KEY);
          Preference explainProtectedMediaKey = screen.findPreference(EXPLAIN_PROTECTED_MEDIA_KEY);
          Preference explainProtectedMediaKey = screen.findPreference(EXPLAIN_PROTECTED_MEDIA_KEY);
          PreferenceGroup allowedGroup = (PreferenceGroup) screen.findPreference(ALLOWED_GROUP);
          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) {
          if (hideSecondaryToggles) {
              screen.removePreference(thirdPartyCookies);
              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(notificationsVibrate);
              screen.removePreference(explainProtectedMediaKey);
              screen.removePreference(explainProtectedMediaKey);
              screen.removePreference(allowedGroup);
              screen.removePreference(allowedGroup);
-@@ -862,14 +869,17 @@ public class SingleCategoryPreferences extends PreferenceFragment
+@@ -881,14 +888,17 @@ public class SingleCategoryPreferences extends PreferenceFragmentCompat
              return;
              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.
          // 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());
                  preference -> PrefServiceBridge.getInstance().isBlockThirdPartyCookiesManaged());
      }
      }
  
  
 +    private void updateCookiesSessionOnlyCheckBox() {
 +    private void updateCookiesSessionOnlyCheckBox() {
-+        ChromeBaseCheckBoxPreference cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreference)
++        ChromeBaseCheckBoxPreferenceCompat cookiesSessionOnlyPref = (ChromeBaseCheckBoxPreferenceCompat)
 +                getPreferenceScreen().findPreference(COOKIES_SESSION_ONLY_TOGGLE_KEY);
 +                getPreferenceScreen().findPreference(COOKIES_SESSION_ONLY_TOGGLE_KEY);
 +        cookiesSessionOnlyPref.setChecked(
 +        cookiesSessionOnlyPref.setChecked(
 +                PrefServiceBridge.getInstance().isCookiesSessionOnlyEnabled());
 +                PrefServiceBridge.getInstance().isCookiesSessionOnlyEnabled());
@@ -160,12 +160,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/web
 +    }
 +    }
 +
 +
      private void updateNotificationsVibrateCheckBox() {
      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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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">
        <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
          Prevent third-party websites from saving and reading cookie data
        </message>
        </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
 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
 --- a/chrome/browser/android/preferences/pref_service_bridge.cc
 +++ b/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);
    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(
  static jboolean JNI_PrefServiceBridge_GetBlockThirdPartyCookiesManaged(
      JNIEnv* env,
      JNIEnv* env,
      const JavaParamRef<jobject>& obj) {
      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);
    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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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,
      {"debug-packed-apps", flag_descriptions::kDebugPackedAppName,
       flag_descriptions::kDebugPackedAppDescription, kOsDesktop,
       flag_descriptions::kDebugPackedAppDescription, kOsDesktop,
       SINGLE_VALUE_TYPE(switches::kDebugPackedApps)},
       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(
  void WebMediaPlayerImpl::EnabledAudioTracksChanged(
      const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) {
      const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) {
    DCHECK(main_task_runner_->BelongsToCurrentThread());
    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.
    // Audio only stream is allowed to play when in background.
    // TODO: We should check IsBackgroundOptimizationCandidate here. But we need
    // TODO: We should check IsBackgroundOptimizationCandidate here. But we need
    // to move the logic of checking video frames out of that function.
    // 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
 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
 --- a/chrome/browser/signin/account_consistency_mode_manager.cc
 +++ b/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,
    registry->RegisterBooleanPref(prefs::kAccountConsistencyMirrorRequired,
                                  false);
                                  false);
  #endif
  #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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
 +++ b/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
              @Override
              protected Void doInBackground() {
              protected Void doInBackground() {
                  try {
                  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
 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
 --- a/chrome/browser/net/system_network_context_manager.cc
 +++ b/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.
  // Android this includes checking the Android version in the field trial.
  bool ShouldEnableAsyncDns() {
  bool ShouldEnableAsyncDns() {
    bool feature_can_be_enabled = true;
    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
 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
 --- a/components/cronet/url_request_context_config.cc
 +++ b/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);
          effective_experimental_options->Remove(it.key(), nullptr);
          continue;
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
 +++ b/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() {
          deferredStartupHandler.addDeferredTask(new Runnable() {
              @Override
              @Override
              public void run() {
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java
 +++ b/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();
          updateSyncAndServicesPreference();
          updateSearchEnginePreference();
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
 +++ b/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 sHasGoogleAccountAuthenticator;
      private static Boolean sHasRecognitionIntentHandler;
      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 sIsHomepageTileEnabled;
      private static Boolean sIsNewTabPageButtonEnabled;
      private static Boolean sIsNewTabPageButtonEnabled;
      private static Boolean sIsBottomToolbarEnabled;
      private static Boolean sIsBottomToolbarEnabled;
-@@ -173,7 +172,6 @@ public class FeatureUtilities {
+@@ -176,7 +175,6 @@ public class FeatureUtilities {
      public static void cacheNativeFlags() {
      public static void cacheNativeFlags() {
          cacheCommandLineOnNonRootedEnabled();
          cacheCommandLineOnNonRootedEnabled();
          FirstRunUtils.cacheFirstRunPrefs();
          FirstRunUtils.cacheFirstRunPrefs();
@@ -145,7 +145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUti
          cacheHomepageTileEnabled();
          cacheHomepageTileEnabled();
          cacheNewTabPageButtonEnabled();
          cacheNewTabPageButtonEnabled();
          cacheBottomToolbarEnabled();
          cacheBottomToolbarEnabled();
-@@ -212,38 +210,6 @@ public class FeatureUtilities {
+@@ -224,38 +222,6 @@ public class FeatureUtilities {
          return Build.VERSION.SDK_INT > Build.VERSION_CODES.M;
          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;
 -        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
 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 --- a/chrome/browser/about_flags.cc
 +++ b/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,
      {"enable-chrome-duet-labels", flag_descriptions::kChromeDuetLabelsName,
       flag_descriptions::kChromeDuetLabelsDescription, kOsAndroid,
       flag_descriptions::kChromeDuetLabelsDescription, kOsAndroid,
       FEATURE_VALUE_TYPE(chrome::android::kChromeDuetLabeled)},
       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,
      &kHomepageTile,
      &kHorizontalTabSwitcherAndroid,
      &kHorizontalTabSwitcherAndroid,
      &kIdentityDisc,
      &kIdentityDisc,
-@@ -412,9 +411,6 @@ const base::Feature kForegroundNotificationManager{
+@@ -413,9 +412,6 @@ const base::Feature kForegroundNotificationManager{
  const base::Feature kHandleMediaIntents{"HandleMediaIntents",
  const base::Feature kHandleMediaIntents{"HandleMediaIntents",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
                                          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
 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
 --- a/third_party/blink/renderer/modules/webaudio/analyser_node.idl
 +++ b/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.
      // Copies the current frequency data into the passed array.
      // If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped.
      // 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
 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
 --- a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
 +++ b/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
      // Channel access
      readonly attribute unsigned long numberOfChannels;
      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>
 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.cc |  71 ++++
  android_webview/browser/net/aw_network_delegate.h  |   3 +
  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/BUILD.gn                                       |   7 +
  net/url_request/adblock_intercept.cc               | 389 +++++++++++++++++++++
  net/url_request/adblock_intercept.cc               | 389 +++++++++++++++++++++
  net/url_request/adblock_intercept.h                |  35 ++
  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.cc
  create mode 100644 net/url_request/adblock_intercept.h
  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,
    int OnBeforeStartTransaction(net::URLRequest* request,
                                 net::CompletionOnceCallback callback,
                                 net::CompletionOnceCallback callback,
                                 net::HttpRequestHeaders* headers) override;
                                 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
 diff --git a/net/BUILD.gn b/net/BUILD.gn
 --- a/net/BUILD.gn
 --- a/net/BUILD.gn
 +++ b/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",
        "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
 Credits to Slaviro (https://github.com/Slaviro) for coming up with a better
 approach to change color components.
 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 +-
  .../modules/webgl/webgl_debug_renderer_info.cc     |   4 +-
  third_party/blink/renderer/platform/BUILD.gn       |   4 +-
  third_party/blink/renderer/platform/BUILD.gn       |   4 +-
  .../platform/graphics/image_data_buffer.cc         |   5 +
  .../platform/graphics/image_data_buffer.cc         |   5 +
  .../platform/graphics/static_bitmap_image.cc       | 156 +++++++++++++++++++++
  .../platform/graphics/static_bitmap_image.cc       | 156 +++++++++++++++++++++
  .../platform/graphics/static_bitmap_image.h        |   2 +
  .../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
 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
 --- 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
 +++ 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 "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
  
  
 -#include "base/rand_util.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/common/features.h"
  #include "third_party/blink/public/platform/platform.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
    // scale text metrics by 3/1000000th
 -  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
 -  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
 +  auto shuffleFactor = 1 + (canvas()->GetDocument().GetShuffleFactorX() - 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
 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
 --- a/third_party/blink/renderer/modules/webgl/webgl_debug_renderer_info.cc
 +++ b/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
 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
 --- a/third_party/blink/renderer/platform/BUILD.gn
 +++ b/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",
      "//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/core/SkSurface.h"
  #include "third_party/skia/include/gpu/GrContext.h"
  #include "third_party/skia/include/gpu/GrContext.h"
  #include "v8/include/v8.h"
  #include "v8/include/v8.h"
-@@ -152,10 +155,163 @@ bool StaticBitmapImage::ConvertToArrayBufferContents(
+@@ -154,10 +157,163 @@ bool StaticBitmapImage::ConvertToArrayBufferContents(
    DCHECK(read_pixels_successful ||
    DCHECK(read_pixels_successful ||
           !sk_image->bounds().intersect(SkIRect::MakeXYWH(
           !sk_image->bounds().intersect(SkIRect::MakeXYWH(
               rect.X(), rect.Y(), info.width(), info.height())));
               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
 diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc
 --- a/components/ntp_snippets/features.cc
 --- a/components/ntp_snippets/features.cc
 +++ b/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{
  const base::Feature kArticleSuggestionsFeature{
 -    "NTPArticleSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
 -    "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{
  const base::Feature kRemoteSuggestionsEmulateM58FetchingSchedule{
      "RemoteSuggestionsEmulateM58FetchingSchedule",
      "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 char kNotificationsIgnoredLimitParam[] = "ignored_limit";
  
  
  const base::Feature kKeepPrefetchedContentSuggestions{
  const base::Feature kKeepPrefetchedContentSuggestions{
 -    "KeepPrefetchedContentSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
 -    "KeepPrefetchedContentSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
 +    "KeepPrefetchedContentSuggestions", base::FEATURE_DISABLED_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
 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
 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
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/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};
      base::FEATURE_DISABLED_BY_DEFAULT};
  
  
  const base::Feature kJellyBeanSupported{"JellyBeanSupported",
  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
 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
 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
 --- 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
 +++ 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);
          PreferenceUtils.addPreferencesFromResource(this, R.xml.data_reduction_preferences);
          getActivity().setTitle(R.string.data_reduction_title_lite_mode);
          getActivity().setTitle(R.string.data_reduction_title_lite_mode);
 -        boolean isEnabled = DataReductionProxySettings.getInstance().isDataReductionProxyEnabled();
 -        boolean isEnabled = DataReductionProxySettings.getInstance().isDataReductionProxyEnabled();
@@ -24,21 +25,35 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/dat
  
  
          setHasOptionsMenu(true);
          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) {
      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
 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
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/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/content/TabCreationMode.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityComponent.java",
    "java/src/org/chromium/chrome/browser/customtabs/dependency_injection/CustomTabActivityModule.java",
    "java/src/org/chromium/chrome/browser/customtabs/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/ModuleMetrics.java",
 -  "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.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/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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
 +++ b/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.content.TabCreationMode;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityComponent;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityComponent;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityModule;
  import org.chromium.chrome.browser.customtabs.dependency_injection.CustomTabActivityModule;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
  import org.chromium.chrome.browser.customtabs.features.CustomTabNavigationBarController;
  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.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();
      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 ActivityTabTaskDescriptionHelper mTaskDescriptionHelper;
  
  
      private CustomTabNightModeStateController mNightModeStateController;
      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() {
      public void finishNativeInitialization() {
          if (!mIntentDataProvider.isInfoPage()) FirstRunSignInProcessor.start(this);
          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();
 -            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();
          WebContents webContents = tab == null ? null : tab.getWebContents();
          mConnection.resetPostMessageHandlerForSession(
          mConnection.resetPostMessageHandlerForSession(
                  mIntentDataProvider.getSession(), webContents);
                  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()) {
          if (mIntentDataProvider.isTrustedWebActivity()) {
              component.resolveTrustedWebActivityCoordinator();
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
 +++ b/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.IntentHandler;
- import org.chromium.chrome.browser.UrlConstants;
  import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider;
  import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
  import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
  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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
 +++ b/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.Origin;
  import org.chromium.chrome.browser.browserservices.PostMessageHandler;
  import org.chromium.chrome.browser.browserservices.PostMessageHandler;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleLoader;
 -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.device.DeviceClassManager;
  import org.chromium.chrome.browser.init.ChainedTasks;
  import org.chromium.chrome.browser.init.ChainedTasks;
  import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
  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;
      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>
       * <strong>DO NOT CALL</strong>
       * Public to be instanciable from {@link ChromeApplication}. This is however
       * 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)) {
          if (ChromeApplication.isSevereMemorySignal(level)) {
              getInstance().mClientManager.cleanupUnusedSessions();
              getInstance().mClientManager.cleanupUnusedSessions();
          }
          }
@@ -151,7 +151,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
      }
      }
  
  
      @VisibleForTesting
      @VisibleForTesting
-@@ -1464,32 +1460,6 @@ public class CustomTabsConnection {
+@@ -1495,32 +1491,6 @@ public class CustomTabsConnection {
              CustomTabsSessionToken session, String url, String origin, int referrerPolicy,
              CustomTabsSessionToken session, String url, String origin, int referrerPolicy,
              @DetachedResourceRequestMotivation int motivation);
              @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
 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
 --- 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
 +++ 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.CustomTabActivityTabController;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactory;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactory;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
  import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
 -import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController;
 -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.ActivityScope;
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
  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
  @ActivityScope
  public interface CustomTabActivityComponent extends ChromeActivityComponent {
  public interface CustomTabActivityComponent extends ChromeActivityComponent {
      TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator();
      TrustedWebActivityCoordinator resolveTrustedWebActivityCoordinator();
 -    DynamicModuleToolbarController resolveDynamicModuleToolbarController();
 -    DynamicModuleToolbarController resolveDynamicModuleToolbarController();
 -    DynamicModuleCoordinator resolveDynamicModuleCoordinator();
 -    DynamicModuleCoordinator resolveDynamicModuleCoordinator();
  
  
-     TabObserverRegistrar resolveTabObserverRegistrar();
-     CustomTabTopBarDelegate resolveTobBarDelegate();
+     CustomTabBottomBarDelegate resolveBottomBarDelegate();
+     CustomTabActivityTabController resolveTabController();
 -- 
 -- 
 2.11.0
 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
 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
 --- a/chrome/browser/media/router/media_router_feature.cc
 +++ b/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) {
  bool MediaRouterEnabled(content::BrowserContext* context) {
  #if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
  #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
 diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
 --- a/chrome/browser/profiles/profile.cc
 --- a/chrome/browser/profiles/profile.cc
 +++ b/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,
        prefs::kMediaRouterFirstRunFlowAcknowledged,
        false,
        false,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
        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
 diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
 --- a/chrome/browser/profiles/profile_impl.cc
 --- a/chrome/browser/profiles/profile_impl.cc
 +++ b/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(
    registry->RegisterStringPref(
        prefs::kPrintPreviewDefaultDestinationSelectionRules, std::string());
        prefs::kPrintPreviewDefaultDestinationSelectionRules, std::string());
    registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false);
    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
 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
 --- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
 +++ b/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 "chrome/browser/profiles/profile_android.h"
  #include "components/favicon_base/favicon_types.h"
  #include "components/favicon_base/favicon_types.h"
  #include "components/history/core/browser/history_service.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
 diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
 --- a/chrome/browser/browser_process_impl.cc
 --- a/chrome/browser/browser_process_impl.cc
 +++ b/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)
  #endif  // defined(OS_CHROMEOS)
  
  
    registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled,
    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
 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
 --- a/chrome/browser/profiles/profile_io_data.cc
 +++ b/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/cookie_config/cookie_store_util.h"
  #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
  #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
  #include "components/dom_distiller/core/url_constants.h"
  #include "components/dom_distiller/core/url_constants.h"
 -#include "components/metrics/metrics_pref_names.h"
 -#include "components/metrics/metrics_pref_names.h"
 -#include "components/metrics/metrics_service.h"
 -#include "components/metrics/metrics_service.h"
  #include "components/net_log/chrome_net_log.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/policy/core/common/cloud/user_cloud_policy_manager.h"
+ #include "components/prefs/pref_service.h"
 -- 
 -- 
 2.11.0
 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
 diff --git a/components/url_formatter/url_formatter.cc b/components/url_formatter/url_formatter.cc
 --- a/components/url_formatter/url_formatter.cc
 --- a/components/url_formatter/url_formatter.cc
 +++ b/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
  }  // namespace
  
  
  const FormatUrlType kFormatUrlOmitNothing = 0;
  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
 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
 --- a/third_party/blink/renderer/core/frame/local_frame.cc
 +++ b/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 {
  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.
 bookmarks, never reach signin thresholds.
 ---
 ---
  .../personalized_signin_promo_view_bookmarks.xml   | 30 ------------
  .../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 +-------
  .../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
  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
 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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
 +++ b/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 BookmarkDelegate mDelegate;
      private Context mContext;
      private Context mContext;
@@ -59,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      private String mSearchText;
      private String mSearchText;
      private BookmarkId mCurrentFolder;
      private BookmarkId mCurrentFolder;
  
  
-@@ -211,9 +210,9 @@ class BookmarkItemsAdapter
+@@ -217,9 +216,9 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
  
  
          switch (viewType) {
          switch (viewType) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
              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:
              case ViewType.FOLDER:
                  BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.from(
                  BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.from(
                          parent.getContext()).inflate(R.layout.bookmark_folder_row, parent, false);
                          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) {
      public void onBindViewHolder(ViewHolder holder, int position) {
          switch (holder.getItemViewType()) {
          switch (holder.getItemViewType()) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
@@ -80,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  break;
                  break;
              case ViewType.SYNC_PROMO:
              case ViewType.SYNC_PROMO:
                  break;
                  break;
-@@ -254,7 +251,6 @@ class BookmarkItemsAdapter
+@@ -260,7 +257,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
      public void onViewRecycled(ViewHolder holder) {
      public void onViewRecycled(ViewHolder holder) {
          switch (holder.getItemViewType()) {
          switch (holder.getItemViewType()) {
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
              case ViewType.PERSONALIZED_SIGNIN_PROMO:
@@ -88,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
                  break;
                  break;
              default:
              default:
                  // Other view holders don't have special recycling code.
                  // 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();
          populateTopLevelFoldersList();
          notifyDataSetChanged();
          notifyDataSetChanged();
      }
      }
-@@ -300,7 +295,6 @@ class BookmarkItemsAdapter
+@@ -307,7 +302,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
          mDelegate.removeUIObserver(this);
          mDelegate.removeUIObserver(this);
          mDelegate.getModel().removeObserver(mBookmarkModelObserver);
          mDelegate.getModel().removeObserver(mBookmarkModelObserver);
          mDelegate = null;
          mDelegate = null;
@@ -104,7 +105,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
      }
      }
  
  
      @Override
      @Override
-@@ -367,19 +361,6 @@ class BookmarkItemsAdapter
+@@ -397,19 +391,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
          if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
          if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
  
  
          assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
 +++ b/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.base.VisibleForTesting;
  import org.chromium.chrome.R;
  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.PersonalizedSigninPromoView;
  import org.chromium.chrome.browser.signin.ProfileDataCache;
  import org.chromium.chrome.browser.signin.ProfileDataCache;
  import org.chromium.chrome.browser.signin.SigninAccessPoint;
  import org.chromium.chrome.browser.signin.SigninAccessPoint;
  import org.chromium.chrome.browser.signin.SigninManager;
  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
 -     * @return Personalized signin promo header {@link ViewHolder} instance that can be used with
 -     *         {@link RecyclerView}.
 -     *         {@link RecyclerView}.
 -     */
 -     */
+-    // TODO(crbug.com/160194): Clean up after bookmark reordering launches.
 -    ViewHolder createPersonalizedSigninPromoHolder(ViewGroup parent) {
 -    ViewHolder createPersonalizedSigninPromoHolder(ViewGroup parent) {
 -        View view = LayoutInflater.from(mContext).inflate(
 -        View view = LayoutInflater.from(mContext).inflate(
 -                R.layout.personalized_signin_promo_view_bookmarks, parent, false);
 -                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
       * @return Sync promo header {@link ViewHolder} instance that can be used with
       *         {@link RecyclerView}.
       *         {@link RecyclerView}.
       */
       */
-@@ -153,42 +140,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -156,42 +142,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          return new ViewHolder(view) {};
          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() {
      private @PromoState int calculatePromoState() {
          if (sPromoStateForTests != null) {
          if (sPromoStateForTests != null) {
              return sPromoStateForTests;
              return sPromoStateForTests;
-@@ -201,8 +152,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
+@@ -204,8 +154,7 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
          if (!ChromeSigninController.get().isSignedIn()) {
          if (!ChromeSigninController.get().isSignedIn()) {
              boolean impressionLimitReached = !SigninPromoController.hasNotReachedImpressionLimit(
              boolean impressionLimitReached = !SigninPromoController.hasNotReachedImpressionLimit(
                      SigninAccessPoint.BOOKMARK_MANAGER);
                      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_NONE;
              }
              }
              return PromoState.PROMO_SIGNIN_PERSONALIZED;
              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() {
      private void triggerPromoUpdate() {
@@ -215,10 +217,65 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
          mPromoHeaderChangeAction.run();
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
 +++ b/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) {
      public static boolean hasNotReachedImpressionLimit(@AccessPoint int accessPoint) {
          SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences();
          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
 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
 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 +++ b/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' https://fonts.googleapis.com;";
 +  return "style-src 'self';";
 +  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
 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
 --- a/components/dom_distiller/core/html/preview.html
 +++ b/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
 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
 --- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js
 +++ b/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;
      return;
  
  
    var e = document.createElement('link');
    var e = document.createElement('link');

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 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
 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
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/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};
                                           base::FEATURE_DISABLED_BY_DEFAULT};
  
  
  const base::Feature kSearchReadyOmniboxFeature{
  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
 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
 --- a/components/variations/service/variations_field_trial_creator.cc
 +++ b/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)
  #endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
    bool used_seed = false;
    bool used_seed = false;
    if (!used_testing_config) {
    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
 Never show the data saver promo snackbar
 ---
 ---
  chrome/android/java/res/xml/main_preferences.xml   | 20 -----
  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 --
  .../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
 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
 --- 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 @@
 @@ -7,21 +7,6 @@
      android:orderingFromXml="false">
      android:orderingFromXml="false">
  
  
-     <PreferenceCategory
+     <android.support.v7.preference.PreferenceCategory
 -        android:key="account_section"
 -        android:key="account_section"
 -        android:order="0"
 -        android:order="0"
 -        android:title="@string/prefs_section_account"/>
 -        android:title="@string/prefs_section_account"/>
--    <org.chromium.chrome.browser.preferences.SignInPreference
+-    <org.chromium.chrome.browser.preferences.sync.SignInPreference
 -        android:key="sign_in"
 -        android:key="sign_in"
 -        android:order="1"
 -        android:order="1"
 -        android:title="@string/sign_in_to_chrome"/>
 -        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:key="sync_and_services"
 -        android:order="2"
 -        android:order="2"
 -        android:layout="@layout/account_management_account_row"
 -        android:layout="@layout/account_management_account_row"
 -        android:title="@string/prefs_sync_and_services"
 -        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:key="basics_section"
          android:order="3"
          android:order="3"
          android:title="@string/prefs_section_basics"/>
          android:title="@string/prefs_section_basics"/>
 @@ -91,11 +76,6 @@
 @@ -91,11 +76,6 @@
          android:order="16"
          android:order="16"
          android:title="@string/prefs_languages"/>
          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:fragment="org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment"
 -        android:key="data_reduction"
 -        android:key="data_reduction"
 -        android:order="17"
 -        android:order="17"
 -        android:title="@string/data_reduction_title_lite_mode"/>
 -        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:fragment="org.chromium.chrome.browser.preferences.download.DownloadPreferences"
          android:key="downloads"
          android:key="downloads"
          android:order="18"
          android:order="18"
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 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
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
 +++ b/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:title="@string/clear_browsing_data_title"
          android:summary="@string/clear_browsing_data_summary"
          android:summary="@string/clear_browsing_data_summary"
          android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" />
          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"
 -        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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java
 +++ b/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.base.VisibleForTesting;
  import org.chromium.chrome.R;
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.ChromeFeatureList;
  import org.chromium.chrome.browser.ChromeFeatureList;
 -import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
 -import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  import org.chromium.chrome.browser.night_mode.NightModeUtils;
  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.partnercustomizations.HomepageManager;
  import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
  import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
  import org.chromium.chrome.browser.preferences.autofill_assistant.AutofillAssistantPreferences;
  import org.chromium.chrome.browser.preferences.autofill_assistant.AutofillAssistantPreferences;
 -import org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment;
 -import org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferenceFragment;
  import org.chromium.chrome.browser.preferences.developer.DeveloperPreferences;
  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.
   * 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,
 -        implements TemplateUrlService.LoadListener, ProfileSyncService.SyncStateChangedListener,
 -                   SigninManager.SignInStateObserver {
 -                   SigninManager.SignInStateObserver {
 -    public static final String PREF_ACCOUNT_SECTION = "account_section";
 -    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_SEARCH_ENGINE = "search_engine";
      public static final String PREF_SAVED_PASSWORDS = "saved_passwords";
      public static final String PREF_SAVED_PASSWORDS = "saved_passwords";
      public static final String PREF_HOMEPAGE = "homepage";
      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 final Map<String, Preference> mAllPreferences = new HashMap<>();
 -    private SignInPreference mSignInPreference;
 -    private SignInPreference mSignInPreference;
  
  
      public MainPreferences() {
      public MainPreferences() {
          setHasOptionsMenu(true);
          setHasOptionsMenu(true);
-@@ -75,33 +66,16 @@ public class MainPreferences extends PreferenceFragment
+@@ -88,35 +80,16 @@ public class MainPreferences extends PreferenceFragmentCompat
      @Override
      @Override
      public void onDestroy() {
      public void onDestroy() {
          super.onDestroy();
          super.onDestroy();
@@ -115,8 +113,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      @Override
      @Override
      public void onStart() {
      public void onStart() {
          super.onStart();
          super.onStart();
--        if (SigninManager.get().isSigninSupported()) {
--            SigninManager.get().addSignInStateObserver(this);
+-        SigninManager signinManager = IdentityServicesProvider.getSigninManager();
+-        if (signinManager.isSigninSupported()) {
+-            signinManager.addSignInStateObserver(this);
 -            mSignInPreference.registerForUpdates();
 -            mSignInPreference.registerForUpdates();
 -        }
 -        }
 -        ProfileSyncService syncService = ProfileSyncService.get();
 -        ProfileSyncService syncService = ProfileSyncService.get();
@@ -128,8 +127,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      @Override
      @Override
      public void onStop() {
      public void onStop() {
          super.onStop();
          super.onStop();
--        if (SigninManager.get().isSigninSupported()) {
--            SigninManager.get().removeSignInStateObserver(this);
+-        SigninManager signinManager = IdentityServicesProvider.getSigninManager();
+-        if (signinManager.isSigninSupported()) {
+-            signinManager.removeSignInStateObserver(this);
 -            mSignInPreference.unregisterForUpdates();
 -            mSignInPreference.unregisterForUpdates();
 -        }
 -        }
 -        ProfileSyncService syncService = ProfileSyncService.get();
 -        ProfileSyncService syncService = ProfileSyncService.get();
@@ -139,16 +139,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
      }
      }
  
  
      @Override
      @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);
          PreferenceUtils.addPreferencesFromResource(this, R.xml.main_preferences);
          cachePreferences();
          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();
          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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              // If we are on Android O+ the Notifications preference should lead to the Android
              // 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);
              Preference preference = getPreferenceScreen().getPreference(index);
              mAllPreferences.put(preference.getKey(), preference);
              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) {
      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() {
      private void updatePreferences() {
--        if (SigninManager.get().isSigninSupported()) {
+-        if (IdentityServicesProvider.getSigninManager().isSigninSupported()) {
 -            addPreferenceIfAbsent(PREF_SIGN_IN);
 -            addPreferenceIfAbsent(PREF_SIGN_IN);
 -        } else {
 -        } else {
 -            removePreferenceIfPresent(PREF_SIGN_IN);
 -            removePreferenceIfPresent(PREF_SIGN_IN);
@@ -179,34 +174,32 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
          updateSearchEnginePreference();
          updateSearchEnginePreference();
  
  
          Preference homepagePref = addPreferenceIfAbsent(PREF_HOMEPAGE);
          Preference homepagePref = addPreferenceIfAbsent(PREF_HOMEPAGE);
-@@ -215,10 +173,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -224,10 +186,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          } else {
          } else {
              removePreferenceIfPresent(PREF_DEVELOPER);
              removePreferenceIfPresent(PREF_DEVELOPER);
          }
          }
 -
 -
--        ChromeBasePreference dataReduction =
--                (ChromeBasePreference) findPreference(PREF_DATA_REDUCTION);
+-        ChromeBasePreferenceCompat dataReduction =
+-                (ChromeBasePreferenceCompat) findPreference(PREF_DATA_REDUCTION);
 -        dataReduction.setSummary(DataReductionPreferenceFragment.generateSummary(getResources()));
 -        dataReduction.setSummary(DataReductionPreferenceFragment.generateSummary(getResources()));
      }
      }
  
  
      private Preference addPreferenceIfAbsent(String key) {
      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);
          if (preference != null) getPreferenceScreen().removePreference(preference);
      }
      }
  
  
 -    private void updateSyncAndServicesPreference() {
 -    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.setIcon(SyncPreferenceUtils.getSyncStatusIcon(getActivity()));
 -        syncAndServices.setSummary(SyncPreferenceUtils.getSyncStatusSummary(getActivity()));
 -        syncAndServices.setSummary(SyncPreferenceUtils.getSyncStatusSummary(getActivity()));
 -    }
 -    }
 -
 -
      private void updateSearchEnginePreference() {
      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));
          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.
      // TemplateUrlService.LoadListener implementation.
      @Override
      @Override
      public void onTemplateUrlServiceLoaded() {
      public void onTemplateUrlServiceLoaded() {
-@@ -301,11 +224,6 @@ public class MainPreferences extends PreferenceFragment
+@@ -308,11 +237,6 @@ public class MainPreferences extends PreferenceFragmentCompat
          updateSearchEnginePreference();
          updateSearchEnginePreference();
      }
      }
  
  
@@ -245,19 +238,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 -    }
 -    }
 -
 -
      @VisibleForTesting
      @VisibleForTesting
-     ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
+     ManagedPreferenceDelegateCompat getManagedPreferenceDelegateForTest() {
          return mManagedPreferenceDelegate;
          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
              @Override
              public boolean isPreferenceControlledByPolicy(Preference preference) {
              public boolean isPreferenceControlledByPolicy(Preference preference) {
 -                if (PREF_DATA_REDUCTION.equals(preference.getKey())) {
 -                if (PREF_DATA_REDUCTION.equals(preference.getKey())) {
 -                    return DataReductionProxySettings.getInstance().isDataReductionProxyManaged();
 -                    return DataReductionProxySettings.getInstance().isDataReductionProxyManaged();
 -                }
 -                }
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
                  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
              @Override
              public boolean isPreferenceClickDisabledByPolicy(Preference preference) {
              public boolean isPreferenceClickDisabledByPolicy(Preference preference) {
@@ -267,56 +260,48 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/Mai
 -                            && !settings.isDataReductionProxyEnabled();
 -                            && !settings.isDataReductionProxyEnabled();
 -                }
 -                }
                  if (PREF_SEARCH_ENGINE.equals(preference.getKey())) {
                  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
 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
 --- 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
 +++ 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.PrefServiceBridge;
  import org.chromium.chrome.browser.preferences.PreferenceUtils;
  import org.chromium.chrome.browser.preferences.PreferenceUtils;
  import org.chromium.chrome.browser.preferences.PreferencesLauncher;
  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.profiles.Profile;
  import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog;
  import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog;
  import org.chromium.ui.text.NoUnderlineClickableSpan;
  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_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_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
 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
 --- a/chrome/android/java/strings/android_chrome_strings.grd
 +++ b/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>
        </message>
  
  
        <!-- Sign-in, sync and personalization preferences -->
        <!-- 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]">
        <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
          Sign in to Chrome
        </message>
        </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.">
        <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
          Sends URLs of pages you visit to Google
        </message>
        </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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/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(
          try (TraceEvent e = TraceEvent.scoped(
                       "ChromeTabbedActivity.createToolbarButtonInProductHelpController")) {
                       "ChromeTabbedActivity.createToolbarButtonInProductHelpController")) {
              ChromePreferenceManager preferenceManager = ChromePreferenceManager.getInstance();
              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
 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
 --- a/components/content_settings/core/browser/cookie_settings.cc
 +++ b/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(
  void CookieSettings::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
    registry->RegisterBooleanPref(
 -      prefs::kBlockThirdPartyCookies, false,
 -      prefs::kBlockThirdPartyCookies, false,
 +      prefs::kBlockThirdPartyCookies, true,
 +      prefs::kBlockThirdPartyCookies, true,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
- }
- 
+   registry->RegisterBooleanPref(
+       prefs::kCookieControlsEnabled, false,
 -- 
 -- 
 2.11.0
 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.
  // base::Feature definition.
  const base::Feature kUnifiedConsent {
  const base::Feature kUnifiedConsent {
    "UnifiedConsent",
    "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
        base::FEATURE_DISABLED_BY_DEFAULT
  #else
  #else
        base::FEATURE_ENABLED_BY_DEFAULT
        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
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/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 = [
    resources = [
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/file_paths.xml",
      "java/res_template/xml/launchershortcuts.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"
 +    "java/res_template/xml/searchable.xml"
    ]
    ]
    res_dir = "java/res_template"
    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/file_paths.xml",
      "java/res_template/xml/launchershortcuts.xml",
      "java/res_template/xml/launchershortcuts.xml",
      "java/res_template/xml/searchable.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
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 +++ b/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" %}
      {% if target_sdk_version|int > 27 or target_sdk_version == "Q" %}
          <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
          <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
      {% endif %}
      {% 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) %}
      {% set enable_vr = enable_vr|default(0) %}
      {% if enable_vr == "true" %}
      {% if enable_vr == "true" %}
      <!-- Indicates use of Android's VR-mode, available only on Android N+. -->
      <!-- 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.google.android.c2dm.permission.RECEIVE" />
      <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
      <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 %}
      {% block extra_uses_permissions %}
      {% endblock %}
      {% 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" />
                  android:resource="@xml/file_paths" />
          </provider>
          </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 -->
          <!-- Broadcast receiver that will be notified of account changes -->
          <receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver">
          <receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver">
              <intent-filter>
              <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"
          <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
              android:exported="false"/>
              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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/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.BottomContainer;
  import org.chromium.chrome.browser.snackbar.SnackbarManager;
  import org.chromium.chrome.browser.snackbar.SnackbarManager;
  import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable;
  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
      @Nullable
      private ChromeFullscreenManager mFullscreenManager;
      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() {
      private void createContextReporterIfNeeded() {
          if (!mStarted) return; // Sync state reporting should work only in started state.
          if (!mStarted) return; // Sync state reporting should work only in started state.
          if (mContextReporter != null || getActivityTab() == null) return;
          if (mContextReporter != null || getActivityTab() == null) return;
@@ -165,7 +165,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.
      }
      }
  
  
      @Override
      @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()) {
          if (GSAState.getInstance(this).isGsaAvailable() && !SysUtils.isLowEndDevice()) {
              GSAAccountChangeListener.getInstance().disconnect();
              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
 diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 +++ b/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)
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",
  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
 diff --git a/services/network/network_context.cc b/services/network/network_context.cc
 --- a/services/network/network_context.cc
 --- a/services/network/network_context.cc
 +++ b/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);
                                                                   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
 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
 --- a/components/password_manager/core/browser/password_manager.cc
 +++ b/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,
    registry->RegisterBooleanPref(prefs::kBlacklistedCredentialsNormalized,
                                  false);
                                  false);
    registry->RegisterBooleanPref(
    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
 diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 +++ b/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)
  #if defined(OS_ANDROID)
  // Enable changing default downloads storage location on Android.
  // Enable changing default downloads storage location on Android.
  const base::Feature kDownloadsLocationChange{"DownloadsLocationChange",
  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
 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
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/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};
      "DownloadHomeShowStorageInfo", base::FEATURE_DISABLED_BY_DEFAULT};
  
  
  const base::Feature kDownloadRename{"DownloadRename",
  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
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 +++ b/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
 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
 --- a/chrome/browser/android/chrome_feature_list.cc
 +++ b/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};
      "AdjustWebApkInstallationSpace", base::FEATURE_DISABLED_BY_DEFAULT};
  
  
  const base::Feature kAndroidNightMode{"AndroidNightMode",
  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
 diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 --- a/chrome/common/chrome_features.cc
 +++ b/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.
  // browser_features, as they are only used on the browser side.
  const base::Feature kSitePerProcess {
  const base::Feature kSitePerProcess {
    "site-per-process",
    "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
  // 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().
  // base::SysInfo::AmountOfPhysicalMemoryMB().
  const base::Feature kSitePerProcessOnlyForHighMemoryClients{
  const base::Feature kSitePerProcessOnlyForHighMemoryClients{
      "site-per-process-only-for-high-memory-clients",
      "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
 diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
 --- a/chrome/browser/permissions/permission_manager.cc
 --- a/chrome/browser/permissions/permission_manager.cc
 +++ b/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)
    if (status != CONTENT_SETTING_DEFAULT)
      return PermissionResult(status, PermissionStatusSource::UNSPECIFIED);
      return PermissionResult(status, PermissionStatusSource::UNSPECIFIED);
    PermissionContextBase* context = GetPermissionContext(permission);
    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
 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
 --- 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
 +++ 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;
              return;
          }
          }
  
  
@@ -18,14 +18,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/pas
  
  
          PreferenceGroup passwordParent;
          PreferenceGroup passwordParent;
          if (mSearchQuery == null) {
          if (mSearchQuery == null) {
-@@ -324,7 +324,7 @@ public class SavePasswordsPreferences
+@@ -317,7 +317,7 @@ public class SavePasswordsPreferences
              return;
              return;
          }
          }
  
  
 -        displayManageAccountLink();
 -        displayManageAccountLink();
 +        //displayManageAccountLink();
 +        //displayManageAccountLink();
  
  
-         PreferenceCategory profileCategory = new PreferenceCategory(getActivity());
+         PreferenceCategory profileCategory = new PreferenceCategory(getStyledContext());
          profileCategory.setKey(PREF_KEY_CATEGORY_EXCEPTIONS);
          profileCategory.setKey(PREF_KEY_CATEGORY_EXCEPTIONS);
 -- 
 -- 
 2.11.0
 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
 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/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 ++++
  .../renderer/core/html/html_script_element.cc      |  5 ++++
  .../blink/renderer/core/html/html_script_element.h |  1 +
  .../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/anti_amp_cure.h
  create mode 100644 third_party/blink/renderer/core/dom/extensions/video_bg_play.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
 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
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/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/root_scroller_controller.h"
  #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h"
  #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h"
  #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
  #include "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/snap_coordinator.h"
  #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.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"
  #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/text/text_encoding_registry.h"
  #include "third_party/blink/renderer/platform/wtf/time.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
  #ifndef NDEBUG
  using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
  using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
  static WeakDocumentSet& liveDocumentSet();
  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
    // Parser should have picked up all preloads by now
    fetcher_->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
    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())
 +  if ((host == nullptr) || host.IsEmpty())
 +    return;
 +    return;
 +
 +
-+  LOG(INFO) << "checking URL host for possible injections: " << host;
 +  auto* bodyElement = body();
 +  auto* bodyElement = body();
 +  if (bodyElement) {
 +  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();
 +      LOG(INFO) << "injecting anti-AMP-cure Javascript payload, URL: " << url_.GetString();
 +      HTMLScriptElement* e = MakeGarbageCollected<HTMLScriptElement>(*this, CreateElementFlags());
 +      HTMLScriptElement* e = MakeGarbageCollected<HTMLScriptElement>(*this, CreateElementFlags());
 +      e->setTextDirect(ANTI_AMP_CURE_JS);
 +      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 setTextContent(const StringOrTrustedScript&, ExceptionState&) override;
 +  void setTextDirect(const char*);
 +  void setTextDirect(const char*);
  
  
-   KURL Src() const;
- 
+   void setAsync(bool);
+   bool async() const;
 -- 
 -- 
 2.11.0
 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
 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
 --- a/chrome/browser/background/background_mode_manager.cc
 +++ b/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::kChromeCreatedLoginItem, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
  #endif
  #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
 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
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/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(
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
    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
 diff --git a/chrome/browser/net/prediction_options.cc b/chrome/browser/net/prediction_options.cc
 --- a/chrome/browser/net/prediction_options.cc
 --- a/chrome/browser/net/prediction_options.cc
 +++ b/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;
        return NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK;
      default:
      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
 diff --git a/chrome/browser/net/prediction_options.h b/chrome/browser/net/prediction_options.h
 --- a/chrome/browser/net/prediction_options.h
 --- a/chrome/browser/net/prediction_options.h
 +++ b/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_ALWAYS,
    NETWORK_PREDICTION_WIFI_ONLY,
    NETWORK_PREDICTION_WIFI_ONLY,
    NETWORK_PREDICTION_NEVER,
    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
 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
 --- a/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html
 +++ b/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>
        <div slot="footer">
        <div slot="footer">
 -        <cr-checkbox id="sendSettings" checked>
 -        <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
 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
 --- a/components/autofill/core/browser/autofill_manager.cc
 +++ b/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();
    bool enabled = IsAutofillEnabled();
    sync_state_ = personal_data_ ? personal_data_->GetSyncSigninState()
    sync_state_ = personal_data_ ? personal_data_->GetSyncSigninState()
                                 : AutofillSyncSigninState::kNumSyncStates;
                                 : AutofillSyncSigninState::kNumSyncStates;
@@ -163,7 +163,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a
  
  
    return enabled;
    return enabled;
  }
  }
-@@ -685,10 +682,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
+@@ -704,10 +701,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl(
        // suggestions available.
        // suggestions available.
        // TODO(mathp): Differentiate between number of suggestions available
        // TODO(mathp): Differentiate between number of suggestions available
        // (current metric) and number shown to the user.
        // (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)
  #if defined(OS_ANDROID) || defined(OS_IOS)
    autofill_assistant_.Reset();
    autofill_assistant_.Reset();
  #endif
  #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
 diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmarks/browser/bookmark_utils.cc
 --- a/components/bookmarks/browser/bookmark_utils.cc
 --- a/components/bookmarks/browser/bookmark_utils.cc
 +++ b/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) {
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
    registry->RegisterBooleanPref(
        prefs::kShowBookmarkBar,
        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
 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
 --- a/components/safe_browsing/common/safe_browsing_prefs.cc
 +++ b/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(
    registry->RegisterBooleanPref(
        prefs::kSafeBrowsingSawInterstitialScoutReporting, false);
        prefs::kSafeBrowsingSawInterstitialScoutReporting, false);
    registry->RegisterBooleanPref(
    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
 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
 --- a/components/ntp_tiles/popular_sites_impl.cc
 +++ b/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_);
    DCHECK(!callback_);
    callback_ = 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
 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
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/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() {
  ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
    std::vector<base::string16> builtins_to_provide;
    std::vector<base::string16> builtins_to_provide;
    builtins_to_provide.push_back(
    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
 diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc
 --- a/chrome/common/chrome_content_client.cc
 --- a/chrome/common/chrome_content_client.cc
 +++ b/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;
      base::FilePath cdm_path;
      content::CdmCapability capability;
      content::CdmCapability capability;
      if (IsWidevineAvailable(&cdm_path, &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
 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
 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
 --- a/chrome/android/java/res/xml/site_settings_preferences.xml
 +++ b/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:fragment="org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences"
          android:key="ads" />
          android:key="ads" />
-     <!-- Background sync -->
+-    <!-- Background sync -->
 -    <org.chromium.chrome.browser.preferences.website.SiteSettingsPreference
 -    <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" />
-+        android:key="background_sync" /-->
      <!-- Automatic Downloads -->
      <!-- Automatic Downloads -->
      <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"
-@@ -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
 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
 --- 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
 +++ 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
              // The Media sub-menu only contains Protected Content and Autoplay, so remove all other
              // menus.
              // menus.
              for (@Type int i = 0; i < Type.NUM_ENTRIES; i++) {
              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(i));
              }
              }
              getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
              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.ADS);
              }
              }
              websitePrefs.add(Type.AUTOMATIC_DOWNLOADS);
              websitePrefs.add(Type.AUTOMATIC_DOWNLOADS);
 -            websitePrefs.add(Type.BACKGROUND_SYNC);
 -            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
 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/ChromeActivity.java     | 9 ---------
  .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java  | 3 ---
  .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java  | 3 ---
  .../chromium/chrome/browser/customtabs/CustomTabActivity.java    | 2 +-
  .../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
 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
 --- 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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
 +++ b/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();
          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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
 +++ b/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();
                      tab = activity.getActivityTab();
                      if (tab != null && tab.canGoForward()) tab.goForward();
                      if (tab != null && tab.canGoForward()) tab.goForward();
                      return true;
                      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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
 +++ b/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) {
      public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
          // Disable creating new tabs, bookmark, history, print, help, focus_url, etc.
          // 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
          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.new_incognito_tab_menu_id || id == R.id.new_tab_menu_id
                  || id == R.id.open_history_menu_id) {
                  || id == R.id.open_history_menu_id) {
              return true;
              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
 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
 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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
 +++ b/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.metrics.RecordUserAction;
  import org.chromium.base.task.PostTask;
  import org.chromium.base.task.PostTask;
- import org.chromium.chrome.browser.ChromeFeatureList;
 -import org.chromium.components.signin.AccountIdProvider;
 -import org.chromium.components.signin.AccountIdProvider;
  import org.chromium.components.signin.AccountManagerFacade;
  import org.chromium.components.signin.AccountManagerFacade;
 -import org.chromium.components.signin.AccountTrackerService;
 -import org.chromium.components.signin.AccountTrackerService;
 -import org.chromium.components.signin.ChromeSigninController;
 -import org.chromium.components.signin.ChromeSigninController;
--import org.chromium.components.sync.AndroidSyncSettings;
  import org.chromium.content_public.browser.UiThreadTaskTraits;
  import org.chromium.content_public.browser.UiThreadTaskTraits;
  
  
  import java.util.ArrayList;
  import java.util.ArrayList;
-@@ -48,7 +44,7 @@ import java.util.List;
+@@ -46,7 +43,7 @@ import java.util.List;
   * <p/>
   * <p/>
   * See chrome/browser/signin/signin_manager_android.h for more details.
   * 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";
      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 Context mContext;
      private final SigninManagerDelegate mDelegate;
      private final SigninManagerDelegate mDelegate;
 -    private final AccountTrackerService mAccountTrackerService;
 -    private final AccountTrackerService mAccountTrackerService;
--    private final AndroidSyncSettings mAndroidSyncSettings;
      private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>();
      private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>();
      private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers =
      private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers =
              new ObserverList<>();
              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
      @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();
          ThreadUtils.assertOnUiThread();
          assert context != null;
          assert context != null;
-         assert delegate != null;
--        assert accountTrackerService != null;
--        assert androidSyncSettings != null;
-         mDelegate = delegate;
          mContext = context;
          mContext = context;
+         mNativeSigninManagerAndroid = nativeSigninManagerAndroid;
+         mDelegate = delegate;
 -        mAccountTrackerService = accountTrackerService;
 -        mAccountTrackerService = accountTrackerService;
--        mAndroidSyncSettings = androidSyncSettings;
  
  
-         mNativeSigninManagerAndroid = SigninManagerJni.get().init(this);
          mSigninAllowedByPolicy =
          mSigninAllowedByPolicy =
                  SigninManagerJni.get().isSigninAllowedByPolicy(this, mNativeSigninManagerAndroid);
                  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.
       * Returns true if signin can be started now.
       */
       */
      public boolean isSignInAllowed() {
      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.
       * 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
       * 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() {
      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
 -        // 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.
 -        // sync tries to start without being signed in natively and crashes.
 -        ChromeSigninController.get().setSignedInAccountName(mSignInState.mAccount.name);
 -        ChromeSigninController.get().setSignedInAccountName(mSignInState.mAccount.name);
--        mAndroidSyncSettings.updateAccount(mSignInState.mAccount);
--        mAndroidSyncSettings.enableChromeSync();
+-        mDelegate.enableSync(mSignInState.mAccount);
 -
 -
          if (mSignInState.mCallback != null) {
          if (mSignInState.mCallback != null) {
              mSignInState.mCallback.onSignInComplete();
              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);
 -        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);
 -        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
 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
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 --- a/build/config/compiler/BUILD.gn
 +++ b/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" ]
          cflags += [ "-fstack-protector" ]
        }
        }
      } else if ((is_posix && !is_chromeos && !is_nacl) || is_fuchsia) {
      } 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 +++---
  .../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 +-
  chrome/browser/engagement/important_sites_util.cc                   | 2 +-
  components/history/core/browser/top_sites_impl.h                    | 2 +-
  components/history/core/browser/top_sites_impl.h                    | 2 +-
  5 files changed, 7 insertions(+), 7 deletions(-)
  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
       * 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.
       * 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;
      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())) {
                          ExploreSitesBridge.getVariation())) {
              return 1;
              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
 diff --git a/android_webview/apk/java/AndroidManifest.xml b/android_webview/apk/java/AndroidManifest.xml
 --- a/android_webview/apk/java/AndroidManifest.xml
 --- a/android_webview/apk/java/AndroidManifest.xml
 +++ b/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:icon="@{{manifest_package|default('com.android.webview')}}:drawable/icon_webview"
                   android:name="{{ application_name|default('com.android.webview.chromium.WebViewApkApplication') }}"
                   android:name="{{ application_name|default('com.android.webview.chromium.WebViewApkApplication') }}"
                   android:multiArch="true"
                   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
 diff --git a/components/version_info/version_info.cc b/components/version_info/version_info.cc
 --- a/components/version_info/version_info.cc
 --- a/components/version_info/version_info.cc
 +++ b/components/version_info/version_info.cc
 +++ b/components/version_info/version_info.cc
-@@ -14,7 +14,8 @@
+@@ -15,7 +15,8 @@
  namespace version_info {
  namespace version_info {
  
  
  std::string GetProductNameAndVersionForUserAgent() {
  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
 diff --git a/content/common/user_agent.cc b/content/common/user_agent.cc
 --- a/content/common/user_agent.cc
 --- a/content/common/user_agent.cc
 +++ b/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";
        architecture_token = "; Win64; IA64";
    }
    }
  #elif defined(OS_ANDROID)
  #elif defined(OS_ANDROID)
 -  std::string android_version_str = base::SysInfo::OperatingSystemVersion();
 -  std::string android_version_str = base::SysInfo::OperatingSystemVersion();
 +  std::string android_version_str = "8.0.0";
 +  std::string android_version_str = "8.0.0";
    std::string android_info_str = GetAndroidOSInfo(include_android_build_number);
    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.
    // 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) {
  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).
 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
 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
 --- a/components/autofill/core/browser/autofill_download_manager.cc
 +++ b/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},
      {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 kAutofillDownloadManagerMaxFormCacheSize = 16;
  const size_t kMaxFieldsPerQueryRequest = 100;
  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);
    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(
  std::tuple<GURL, std::string> AutofillDownloadManager::GetRequestURLAndMethod(
      const FormRequestData& request_data) const {
      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 method("POST");
    std::string query_str;
    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_
    GURL url = autofill_server_url_
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .Resolve(RequestTypeToString(request_data.request_type))
                   .ReplaceComponents(replacements);
                   .ReplaceComponents(replacements);
@@ -57,25 +77,38 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/com
  std::tuple<GURL, std::string>
  std::tuple<GURL, std::string>
  AutofillDownloadManager::GetRequestURLAndMethodForApi(
  AutofillDownloadManager::GetRequestURLAndMethodForApi(
      const FormRequestData& request_data) const {
      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");
 +  std::string method("GET");
 +  GURL url = GURL("about:blank");
 +  GURL url = GURL("about:blank");
-+#endif
+ 
    return std::make_tuple(std::move(url), std::move(method));
    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
 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
 --- a/components/autofill/core/browser/autofill_manager.cc
 +++ b/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) {
  ValuePatternsMetric GetValuePattern(const base::string16& value) {
    if (IsUPIVirtualPaymentAddress(value))
    if (IsUPIVirtualPaymentAddress(value))
      return ValuePatternsMetric::kUpiVpa;
      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(driver);
    DCHECK(client_);
    DCHECK(client_);
 -  if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) {
 -  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
 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
 --- a/services/device/battery/battery_status_service.cc
 +++ b/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_)
    if (!battery_fetcher_)
      battery_fetcher_ = BatteryStatusManager::Create(update_callback_);
      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()) {
    if (callback_list_.empty()) {
      bool success = battery_fetcher_->StartListeningBatteryChange();
      bool success = battery_fetcher_->StartListeningBatteryChange();
      // On failure pass the default values back.
      // 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.
      // Send recent status to the new callback if already available.
      callback.Run(status_);
      callback.Run(status_);
    }
    }

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

@@ -11,7 +11,7 @@ sysroot.
 diff --git a/DEPS b/DEPS
 diff --git a/DEPS b/DEPS
 --- a/DEPS
 --- a/DEPS
 +++ b/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
    # Check out and download nacl by default. This can be disabled e.g. with
    # custom_vars.
    # 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
    # By default, do not check out src-internal. This can be overridden e.g. with
    # custom_vars.
    # 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_traffic_annotation_tools': 'checkout_configuration != "small"',
 -  'checkout_instrumented_libraries': 'checkout_linux and 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
    # 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
    # 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.
      # Case-insensitivity for the Win SDK. Must run before win_toolchain below.
      'name': 'ciopfs_linux',
      'name': 'ciopfs_linux',
      'pattern': '.',
      'pattern': '.',
-@@ -2378,43 +2335,6 @@ hooks = [
+@@ -2392,43 +2349,6 @@ hooks = [
      'condition': 'checkout_ios or checkout_mac',
      'condition': 'checkout_ios or checkout_mac',
      'action': ['python', 'src/build/mac_toolchain.py'],
      '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
      # 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
      # 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',
                  '-s', 'src/buildtools/mac/clang-format.sha1',
      ],
      ],
    },
    },
@@ -144,7 +144,7 @@ diff --git a/DEPS b/DEPS
    # Pull rc binaries using checked-in hashes.
    # Pull rc binaries using checked-in hashes.
    {
    {
      'name': 'rc_win',
      'name': 'rc_win',
-@@ -2511,29 +2419,6 @@ hooks = [
+@@ -2525,29 +2433,6 @@ hooks = [
                  '-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
                  '-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
 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
 --- a/components/content_settings/core/browser/content_settings_registry.cc
 +++ b/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
    // TODO(crbug.com/904439): Update this to "SECURE_ONLY" once
    // DeviceOrientationEvents and DeviceMotionEvents are only fired in secure
    // DeviceOrientationEvents and DeviceMotionEvents are only fired in secure
    // contexts.
    // 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
 diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 --- a/net/dns/host_resolver_manager.cc
 +++ b/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
  // Time between IPv6 probes, i.e. for how long results of each IPv6 probe are
  // cached.
  // 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
 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/document.h         |  5 +++++
  third_party/blink/renderer/core/dom/element.cc         | 16 ++++++++++++++++
  third_party/blink/renderer/core/dom/element.cc         | 16 ++++++++++++++++
  third_party/blink/renderer/core/dom/range.cc           | 18 +++++++++++++++++-
  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.cc    | 18 ++++++++++++++++++
  .../blink/renderer/core/html/canvas/text_metrics.h     |  2 ++
  .../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
 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
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/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.
    // also depend on the url NOT getting immediately set in opened windows.
    // See fast/dom/early-frame-url.html
    // See fast/dom/early-frame-url.html
    // and fast/dom/location-new-window-no-crash.html, respectively.
    // 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?
    // FIXME: Can/should we unify this behavior?
    if (initializer.ShouldSetURL()) {
    if (initializer.ShouldSetURL()) {
      SetURL(initializer.Url());
      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));
                                       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
 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
 --- a/third_party/blink/renderer/core/dom/document.h
 +++ b/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;
      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;
    String visibilityState() const;
    bool IsPageVisible() const;
    bool IsPageVisible() const;
    bool hidden() 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_;
    Vector<AXContext*> ax_contexts_;
    Member<AXObjectCache> ax_object_cache_;
    Member<AXObjectCache> ax_object_cache_;
    Member<DocumentMarkerController> markers_;
    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
 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
 --- a/third_party/blink/renderer/core/dom/element.cc
 +++ b/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);
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
        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);
    return DOMRectList::Create(quads);
  }
  }
  
  
-@@ -1363,6 +1372,13 @@ DOMRect* Element::getBoundingClientRect() {
+@@ -1387,6 +1396,13 @@ DOMRect* Element::getBoundingClientRect() {
    DCHECK(element_layout_object);
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
                                                          *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
 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
 --- a/third_party/blink/renderer/core/dom/range.cc
 +++ b/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;
    Vector<FloatQuad> quads;
    GetBorderAndTextQuads(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
 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
 --- 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
 +++ 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 "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
  
  
 +#include "base/rand_util.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/common/features.h"
  #include "third_party/blink/public/platform/platform.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
 +  // scale text metrics by 3/1000000th
 +  auto shuffleFactor = 1 + (base::RandDouble() - 0.5) * 0.000003;
 +  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.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 kDefaultPollIntervalSeconds = 60 * 60;  // 60 minutes.
  const int kMinPollIntervalSeconds = 30 * 60;  // 30 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() {
  void GCMChannelStatusRequest::Start() {
    // url_loader_factory_ can be null for tests.
    // 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_)
    if (!url_loader_factory_)
      return;
      return;
  
  
-@@ -111,6 +114,9 @@ void GCMChannelStatusRequest::Start() {
+@@ -110,6 +113,9 @@ void GCMChannelStatusRequest::Start() {
    resource_request->allow_credentials = false;
    resource_request->allow_credentials = false;
    resource_request->method = "POST";
    resource_request->method = "POST";
    resource_request->headers.SetHeader(net::HttpRequestHeaders::kUserAgent,
    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/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 -
  .../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 +-
  .../browser/services/gcm/GCMBackgroundTask.java    |   2 +-
- .../gcm/InvalidationGcmUpstreamSender.java         |  15 ---
+ .../gcm/InvalidationGcmUpstreamSender.java         |  15 --
  components/background_task_scheduler/BUILD.gn      |   1 -
  components/background_task_scheduler/BUILD.gn      |   1 -
- .../BackgroundTaskSchedulerGcmNetworkManager.java  | 146 +--------------------
+ .../BackgroundTaskSchedulerGcmNetworkManager.java  | 166 +--------------------
  components/gcm_driver/android/BUILD.gn             |   1 -
  components/gcm_driver/android/BUILD.gn             |   1 -
  components/gcm_driver/instance_id/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 -
  components/sync/android/BUILD.gn                   |   1 -
  third_party/cacheinvalidation/BUILD.gn             |   6 -
  third_party/cacheinvalidation/BUILD.gn             |   6 -
- .../client/contrib/MultiplexingGcmListener.java    |  91 +------------
+ .../client/contrib/MultiplexingGcmListener.java    |  91 +----------
  .../android2/channel/AndroidNetworkChannel.java    |   6 +-
  .../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
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
 +++ b/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:com_google_protobuf_protobuf_lite_java",
      "//third_party/android_deps:javax_inject_javax_inject_java",
      "//third_party/android_deps:javax_inject_javax_inject_java",
      "//third_party/android_media:android_media_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
 diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 --- a/chrome/android/chrome_java_sources.gni
 +++ b/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/ChromeActivity.java",
    "java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java",
    "java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java",
    "java/src/org/chromium/chrome/browser/ChromeApplication.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/ChromeBackupAgent.java",
    "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java",
    "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java",
    "java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.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/AndroidEduAndChildAccountHelper.java",
    "java/src/org/chromium/chrome/browser/services/AndroidEduOwnerCheckCallback.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/GoogleServicesManager.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.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/GCMBackgroundTask.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/GcmUma.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/GcmUma.java",
 -  "java/src/org/chromium/chrome/browser/services/gcm/InvalidationGcmUpstreamSender.java",
 -  "java/src/org/chromium/chrome/browser/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
 diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 --- a/chrome/android/java/AndroidManifest.xml
 +++ b/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.CHILD_SERVICE" android:protectionLevel="signature" />
      <permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" />
      <permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" />
      <permission android:name="{{ manifest_package }}.TOS_ACKED" 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"/>
      <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  
  
      {% block extra_uses_permissions %}
      {% 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:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
              android:hardwareAccelerated="false" />
              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" />
 -              <action android:name="com.google.android.c2dm.intent.RECEIVE" />
 -            </intent-filter>
 -            </intent-filter>
 -        </service>
 -        </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"
 -        <meta-data android:name="ipc.invalidation.ticl.gcm_upstream_service_class"
 -            android:value="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender" />
 -            android:value="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender" />
 -        <service android:name="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"
          <receiver android:name="com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver"
              android:exported="false"/>
              android:exported="false"/>
          <receiver android:name="com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver"
          <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:exported="false"
              android:permission="android.permission.BIND_JOB_SERVICE"/>
              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.Log;
  import org.chromium.base.ThreadUtils;
  import org.chromium.base.ThreadUtils;
  import org.chromium.base.VisibleForTesting;
  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) {
 -    static BackgroundTask getBackgroundTaskFromTaskParams(@NonNull TaskParams taskParams) {
 -        String backgroundTaskClassName = getBackgroundTaskClassFromTaskParams(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);
 -        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
 -     * 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
 -     * 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();
 -        Bundle taskExtras = new Bundle();
 -        taskExtras.putString(
 -        taskExtras.putString(
 -                BACKGROUND_TASK_CLASS_KEY, taskInfo.getBackgroundTaskClass().getName());
 -                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());
 -        taskExtras.putBundle(BACKGROUND_TASK_EXTRAS_KEY, taskInfo.getExtras());
 -
 -
 -        Task.Builder builder;
 -        Task.Builder builder;
@@ -574,8 +593,12 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
 -        long windowStartSeconds = oneOffInfo.hasWindowStartTimeConstraint()
 -        long windowStartSeconds = oneOffInfo.hasWindowStartTimeConstraint()
 -                ? TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowStartTimeMs())
 -                ? TimeUnit.MILLISECONDS.toSeconds(oneOffInfo.getWindowStartTimeMs())
 -                : 0;
 -                : 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;
 -        return builder;
 -    }
 -    }
 -
 -
@@ -598,7 +621,7 @@ diff --git a/components/background_task_scheduler/android/java/src/org/chromium/
      @Override
      @Override
      public boolean schedule(Context context, @NonNull TaskInfo taskInfo) {
      public boolean schedule(Context context, @NonNull TaskInfo taskInfo) {
          ThreadUtils.assertOnUiThread();
          ThreadUtils.assertOnUiThread();
-@@ -142,50 +36,12 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
+@@ -170,50 +44,12 @@ class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedule
                              + " has no parameterless public constructor.");
                              + " has no parameterless public constructor.");
              return false;
              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
 diff --git a/components/gcm_driver/android/BUILD.gn b/components/gcm_driver/android/BUILD.gn
 --- a/components/gcm_driver/android/BUILD.gn
 --- a/components/gcm_driver/android/BUILD.gn
 +++ b/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 = [
    deps = [
      "//base:base_java",
      "//base:base_java",
      "//content/public/android:content_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
 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
 --- a/components/gcm_driver/instance_id/android/BUILD.gn
 +++ b/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_files = [
      "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java",
      "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
 diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn
 --- a/services/device/geolocation/BUILD.gn
 --- a/services/device/geolocation/BUILD.gn
 +++ b/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/LocationProviderAdapter.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java",
        "android/java/src/org/chromium/device/geolocation/LocationProviderFactory.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
 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
 --- a/chrome/android/java/res/values/dimens.xml
 +++ b/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_button_padding">12dp</dimen>
      <dimen name="fre_margin">24dp</dimen>
      <dimen name="fre_margin">24dp</dimen>
      <dimen name="fre_image_height">120dp</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
 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
 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
 +++ b/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.metrics.UmaUtils;
  import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
  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.preferences.PrefServiceBridge;
- import org.chromium.chrome.browser.search_engines.TemplateUrlService;
  import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
  import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
  import org.chromium.ui.base.LocalizationUtils;
  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;
          if (mPostNativePageSequenceCreated) return;
          mFirstRunFlowSequencer.onNativeInitialized(mFreProperties);
          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
 diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn
 --- a/services/shape_detection/BUILD.gn
 --- a/services/shape_detection/BUILD.gn
 +++ b/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") {
    android_library("shape_detection_java") {
      java_files = [
      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
 Enable the optimizations not only for ChromeOS but for all compatbile ARM/ARM64 architectures
 Limit threads auto-detect only for iOS
 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(-)
  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;
      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
 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(-)
  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());
                                 std::string());
    registry->RegisterBooleanPref(prefs::kAutologinEnabled, true);
    registry->RegisterBooleanPref(prefs::kAutologinEnabled, true);
    registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList);
    registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList);
 -  registry->RegisterBooleanPref(prefs::kSigninAllowed, true);
 -  registry->RegisterBooleanPref(prefs::kSigninAllowed, true);
 +  registry->RegisterBooleanPref(prefs::kSigninAllowed, false);
 +  registry->RegisterBooleanPref(prefs::kSigninAllowed, false);
-   registry->RegisterInt64Pref(prefs::kSignedInTime,
-                               base::Time().ToInternalValue());
    registry->RegisterBooleanPref(prefs::kSignedInWithCredentialProvider, false);
    registry->RegisterBooleanPref(prefs::kSignedInWithCredentialProvider, false);
+ 
+   // Deprecated prefs: will be removed in a future release.
 -- 
 -- 
 2.11.0
 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
 diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc
 --- a/chrome/browser/signin/signin_promo.cc
 --- a/chrome/browser/signin/signin_promo.cc
 +++ b/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,
      url = net::AppendQueryParameter(url, signin::kSignInPromoQueryKeyAutoClose,
                                      "1");
                                      "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
 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
 --- a/chrome/browser/safe_browsing/client_side_detection_service.cc
 +++ b/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>();
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetClientReportUrl(kClientReportPhishingUrl);
    resource_request->url = GetClientReportUrl(kClientReportPhishingUrl);
    resource_request->method = "POST";
    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),
    auto loader = network::SimpleURLLoader::Create(std::move(resource_request),
                                                   traffic_annotation);
                                                   traffic_annotation);
    loader->AttachStringForUpload(request_data, "application/octet-stream");
    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>();
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetClientReportUrl(kClientReportMalwareUrl);
    resource_request->url = GetClientReportUrl(kClientReportMalwareUrl);
    resource_request->method = "POST";
    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
 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
 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
 +++ b/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>();
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = PPAPIDownloadRequest::GetDownloadRequestUrl();
    resource_request->url = PPAPIDownloadRequest::GetDownloadRequestUrl();
    resource_request->method = "POST";
    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
 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
 --- a/chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc
 +++ b/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>();
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = GetDownloadRequestUrl();
    resource_request->url = GetDownloadRequestUrl();
    resource_request->method = "POST";
    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
 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
 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc
 +++ b/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() {
  void SafeBrowsingService::RegisterAllDelayedAnalysis() {
  #if defined(FULL_SAFE_BROWSING)
  #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
  }  // namespace
  
  
-@@ -289,6 +291,10 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
+@@ -287,6 +289,10 @@ void ClientSideDetectionService::StartClientReportPhishingRequest(
      return;
      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.
    // Fill in metadata about which model we used.
    if (is_extended_reporting) {
    if (is_extended_reporting) {
      request->set_model_filename(model_loader_extended_->name());
      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
    // Record that we made a request
    phishing_report_times_.push(base::Time::Now());
    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(
  void ClientSideDetectionService::StartClientReportMalwareRequest(
-@@ -385,6 +392,10 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
+@@ -383,6 +390,10 @@ void ClientSideDetectionService::StartClientReportMalwareRequest(
      return;
      return;
    }
    }
  
  
@@ -56,7 +56,7 @@ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chr
    std::string request_data;
    std::string request_data;
    if (!request->SerializeToString(&request_data)) {
    if (!request->SerializeToString(&request_data)) {
      UpdateEnumUMAHistogram(REPORT_FAILED_SERIALIZATION);
      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
    // Record that we made a malware request
    malware_report_times_.push(base::Time::Now());
    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
 This also fixes local debugging with domain substitution
 Related comment: https://bugs.chromium.org/p/chromium/issues/detail?id=710701#c14
 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(-)
  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
 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
 --- a/third_party/blink/renderer/devtools/BUILD.gn
 +++ b/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 +
        devtools_embedder_scripts +
        [ "$resources_out_dir/devtools_extension_api.js" ]
        [ "$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
    inputs = grd_files + devtools_image_files
    outfile = "$root_gen_dir/devtools/devtools_resources.grd"
    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 @@
 @@ -1,6 +1,6 @@
  {
  {
      "modules": [
      "modules": [
          { "name": "worker_service", "type": "autostart" },
          { "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
 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", "type": "remote" },
 +    { "name": "accessibility" },
 +    { "name": "accessibility" },
      { "name": "animation" },
      { "name": "animation" },
-     { "name": "audits2" },
+     { "name": "audits" },
      { "name": "browser_debugger" },
      { "name": "browser_debugger" },
      { "name": "cookie_table" },
      { "name": "cookie_table" },
      { "name": "devices" },
      { "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
 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
 --- a/components/gcm_driver/gcm_client_impl.cc
 +++ b/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();
    device_checkin_info_.Reset();
    StartCheckin();
    StartCheckin();
  }
  }
@@ -18,22 +18,22 @@ diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gc
  
  
  void GCMClientImpl::InitializeMCSClient() {
  void GCMClientImpl::InitializeMCSClient() {
    DCHECK(network_connection_tracker_);
    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;
 +  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;
 +  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
 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
 diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 --- a/chrome/browser/browser_resources.grd
 +++ b/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_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_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" />
        <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
 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
 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc
 +++ b/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.css", IDR_INLINE_LOGIN_CSS);
    source->AddResourcePath("inline_login.js", IDR_INLINE_LOGIN_JS);
    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 kBadAuthenticationError[] = "BadAuthentication";
  constexpr char kBadAuthenticationShortError[] = "badauth";
  constexpr char kBadAuthenticationShortError[] = "badauth";
-@@ -263,6 +263,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
+@@ -261,6 +261,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher(
      const net::NetworkTrafficAnnotationTag& traffic_annotation) {
      const net::NetworkTrafficAnnotationTag& traffic_annotation) {
    DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
    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>();
    auto resource_request = std::make_unique<network::ResourceRequest>();
    resource_request->url = gaia_gurl;
    resource_request->url = gaia_gurl;
    original_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::BindOnce(&GaiaAuthFetcher::OnURLLoadComplete,
                       base::Unretained(this)),
                       base::Unretained(this)),
        kMaxMessageSize);
        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
 diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
 --- a/components/search_engines/template_url.cc
 --- a/components/search_engines/template_url.cc
 +++ b/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(
  bool TemplateURLRef::HasGoogleBaseURLs(
      const SearchTermsData& search_terms_data) const {
      const SearchTermsData& search_terms_data) const {
    ParseIfNecessary(search_terms_data);
    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
 diff --git a/chrome/browser/intranet_redirect_detector.cc b/chrome/browser/intranet_redirect_detector.cc
 --- a/chrome/browser/intranet_redirect_detector.cc
 --- a/chrome/browser/intranet_redirect_detector.cc
 +++ b/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();
    simple_loaders_.clear();
    resulting_origins_.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
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
 +++ b/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_entry.h",
      "profiles/profile_attributes_storage.cc",
      "profiles/profile_attributes_storage.cc",
      "profiles/profile_attributes_storage.h",
      "profiles/profile_attributes_storage.h",

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است