Browse Source

Update to Chromium 79.0.3945.79 (#883)

* Update to Chromium 79.0.3945.16

* Update to Chromium 79.0.3945.36

* Replace widevine patch

* Update to Chromium 79.0.3945.45

* Remove unused GN flag

* Fix safe browsing and fingerprinting patch

* Update to Chromium 79.0.3945.56

* Fix patches

* Update to Chromium 79.0.3945.74

* Fix unused preferences patch

* Update to Chromium 79.0.3945.79
Albert Tang 4 years ago
parent
commit
ec18ba3799
53 changed files with 2688 additions and 2309 deletions
  1. 1 1
      chromium_version.txt
  2. 203 60
      domain_substitution.list
  3. 0 1
      flags.gn
  4. 10 7
      patches/core/bromite/disable-fetching-field-trials.patch
  5. 13 13
      patches/core/debian_buster/disable/unrar.patch
  6. 622 581
      patches/core/inox-patchset/0001-fix-building-without-safebrowsing.patch
  7. 2 2
      patches/core/inox-patchset/0003-disable-autofill-download-manager.patch
  8. 15 23
      patches/core/inox-patchset/0005-disable-default-extensions.patch
  9. 1 1
      patches/core/inox-patchset/chromium-exclude_unwind_tables.patch
  10. 74 74
      patches/core/iridium-browser/all-add-trk-prefixes-to-possibly-evil-connections.patch
  11. 2 2
      patches/core/iridium-browser/safe_browsing-disable-incident-reporting.patch
  12. 96 96
      patches/core/ungoogled-chromium/block-trk-and-subdomains.patch
  13. 12 12
      patches/core/ungoogled-chromium/disable-fonts-googleapis-references.patch
  14. 218 225
      patches/core/ungoogled-chromium/disable-google-host-detection.patch
  15. 7 7
      patches/core/ungoogled-chromium/disable-mei-preload.patch
  16. 1 1
      patches/core/ungoogled-chromium/disable-signin.patch
  17. 13 13
      patches/core/ungoogled-chromium/disable-translate.patch
  18. 58 58
      patches/core/ungoogled-chromium/disable-webstore-urls.patch
  19. 23 23
      patches/core/ungoogled-chromium/fix-building-without-one-click-signin.patch
  20. 281 184
      patches/core/ungoogled-chromium/fix-building-without-safebrowsing.patch
  21. 212 236
      patches/core/ungoogled-chromium/remove-unused-preferences-fields.patch
  22. 15 21
      patches/core/ungoogled-chromium/use-local-devtools-files.patch
  23. 167 168
      patches/extra/bromite/fingerprinting-flags-client-rects-and-measuretext.patch
  24. 75 75
      patches/extra/bromite/flag-fingerprinting-canvas-image-data-noise.patch
  25. 66 66
      patches/extra/bromite/flag-max-connections-per-host.patch
  26. 11 11
      patches/extra/debian_buster/disable/android.patch
  27. 2 2
      patches/extra/debian_buster/disable/fuzzers.patch
  28. 1 1
      patches/extra/debian_buster/disable/google-api-warning.patch
  29. 1 1
      patches/extra/debian_buster/disable/welcome-page.patch
  30. 42 0
      patches/extra/debian_buster/fixes/widevine-enable-version-string.patch
  31. 11 10
      patches/extra/inox-patchset/0006-modify-default-prefs.patch
  32. 0 20
      patches/extra/inox-patchset/chromium-widevine.patch
  33. 1 1
      patches/extra/iridium-browser/browser-disable-profile-auto-import-on-first-run.patch
  34. 1 1
      patches/extra/iridium-browser/prefs-always-prompt-for-download-directory-by-defaul.patch
  35. 4 4
      patches/extra/ungoogled-chromium/add-flag-for-search-engine-collection.patch
  36. 26 26
      patches/extra/ungoogled-chromium/add-flag-to-configure-extension-downloading.patch
  37. 1 1
      patches/extra/ungoogled-chromium/add-flag-to-force-punycode-hostnames.patch
  38. 1 1
      patches/extra/ungoogled-chromium/add-flag-to-hide-crashed-bubble.patch
  39. 3 3
      patches/extra/ungoogled-chromium/add-flag-to-scroll-tabs.patch
  40. 6 6
      patches/extra/ungoogled-chromium/add-flag-to-show-avatar-button.patch
  41. 14 14
      patches/extra/ungoogled-chromium/add-flag-to-stack-tabs.patch
  42. 1 1
      patches/extra/ungoogled-chromium/add-ipv6-probing-option.patch
  43. 127 127
      patches/extra/ungoogled-chromium/add-suggestions-url-field.patch
  44. 31 31
      patches/extra/ungoogled-chromium/default-to-https-scheme.patch
  45. 53 53
      patches/extra/ungoogled-chromium/disable-download-quarantine.patch
  46. 3 3
      patches/extra/ungoogled-chromium/disable-webgl-renderer-info.patch
  47. 17 17
      patches/extra/ungoogled-chromium/enable-page-saving-on-more-pages.patch
  48. 2 2
      patches/extra/ungoogled-chromium/enable-paste-and-go-new-tab-button.patch
  49. 1 1
      patches/extra/ungoogled-chromium/popups-to-tabs.patch
  50. 0 8
      patches/extra/ungoogled-chromium/searx.patch
  51. 1 1
      patches/series
  52. 139 12
      pruning.list
  53. 1 1
      revision.txt

+ 1 - 1
chromium_version.txt

@@ -1 +1 @@
-78.0.3904.108
+79.0.3945.79

File diff suppressed because it is too large
+ 203 - 60
domain_substitution.list


+ 0 - 1
flags.gn

@@ -1,7 +1,6 @@
 clang_use_chrome_plugins=false
 closure_compile=false
 enable_hangout_services_extension=false
-enable_hevc_demuxing=true
 enable_mdns=false
 enable_mse_mpeg2ts_stream_parser=true
 enable_nacl=false

+ 10 - 7
patches/core/bromite/disable-fetching-field-trials.patch

@@ -10,42 +10,45 @@ Subject: Disable fetching of all field trials
 
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
-@@ -106,9 +106,7 @@ public abstract class ChromeFeatureList
+@@ -107,10 +107,7 @@ public abstract class ChromeFeatureList
       */
      public static int getFieldTrialParamByFeatureAsInt(
              String featureName, String paramName, int defaultValue) {
 -        if (sTestFeatures != null) return defaultValue;
 -        assert isInitialized();
--        return nativeGetFieldTrialParamByFeatureAsInt(featureName, paramName, defaultValue);
+-        return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsInt(
+-                featureName, paramName, defaultValue);
 +        return defaultValue;
      }
  
      /**
-@@ -125,9 +123,7 @@ public abstract class ChromeFeatureList
+@@ -127,10 +124,7 @@ public abstract class ChromeFeatureList
       */
      public static double getFieldTrialParamByFeatureAsDouble(
              String featureName, String paramName, double defaultValue) {
 -        if (sTestFeatures != null) return defaultValue;
 -        assert isInitialized();
--        return nativeGetFieldTrialParamByFeatureAsDouble(featureName, paramName, defaultValue);
+-        return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsDouble(
+-                featureName, paramName, defaultValue);
 +        return defaultValue;
      }
  
      /**
-@@ -144,9 +140,7 @@ public abstract class ChromeFeatureList
+@@ -147,10 +141,7 @@ public abstract class ChromeFeatureList
       */
      public static boolean getFieldTrialParamByFeatureAsBoolean(
              String featureName, String paramName, boolean defaultValue) {
 -        if (sTestFeatures != null) return defaultValue;
 -        assert isInitialized();
--        return nativeGetFieldTrialParamByFeatureAsBoolean(featureName, paramName, defaultValue);
+-        return ChromeFeatureListJni.get().getFieldTrialParamByFeatureAsBoolean(
+-                featureName, paramName, defaultValue);
 +        return defaultValue;
      }
  
      // Alphabetical:
 --- a/components/variations/service/variations_service.cc
 +++ b/components/variations/service/variations_service.cc
-@@ -240,17 +240,7 @@ bool GetInstanceManipulations(const net:
+@@ -241,17 +241,7 @@ bool GetInstanceManipulations(const net:
  // Variations seed fetching is only enabled in official Chrome builds, if a URL
  // is specified on the command line, and for testing.
  bool IsFetchingEnabled() {

+ 13 - 13
patches/core/debian_buster/disable/unrar.patch

@@ -2,9 +2,20 @@ description: disable support for safe browsing inspection of rar files
 author: Michael Gilbert <mgilbert@debian.org>
 bug: http://bugs.debian.org/914487
 
+--- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
++++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
+@@ -92,7 +92,7 @@ void FileAnalyzer::Start(const base::Fil
+   if (inspection_type == DownloadFileType::ZIP) {
+     StartExtractZipFeatures();
+   } else if (inspection_type == DownloadFileType::RAR) {
+-    StartExtractRarFeatures();
++    LOG(WARNING) << "Safebrowser inspection of rar files is disabled in this build";
+ #if defined(OS_MACOSX)
+   } else if (inspection_type == DownloadFileType::DMG) {
+     StartExtractDmgFeatures();
 --- a/chrome/common/safe_browsing/BUILD.gn
 +++ b/chrome/common/safe_browsing/BUILD.gn
-@@ -65,41 +65,6 @@ if (safe_browsing_mode == 1) {
+@@ -78,41 +78,6 @@ if (safe_browsing_mode == 1) {
      ]
    }
  
@@ -46,7 +57,7 @@ bug: http://bugs.debian.org/914487
    source_set("disk_image_type_sniffer_mac") {
      sources = [
        "disk_image_type_sniffer_mac.cc",
-@@ -168,7 +133,6 @@ source_set("safe_browsing") {
+@@ -185,7 +150,6 @@ source_set("safe_browsing") {
        ":archive_analyzer_results",
        ":binary_feature_extractor",
        ":download_type_util",
@@ -74,14 +85,3 @@ bug: http://bugs.debian.org/914487
 -      std::move(rar_file), std::move(temporary_file), &results);
    std::move(callback).Run(results);
  }
---- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
-+++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
-@@ -92,7 +92,7 @@ void FileAnalyzer::Start(const base::Fil
-   if (inspection_type == DownloadFileType::ZIP) {
-     StartExtractZipFeatures();
-   } else if (inspection_type == DownloadFileType::RAR) {
--    StartExtractRarFeatures();
-+    LOG(WARNING) << "Safebrowser inspection of rar files is disabled in this build";
- #if defined(OS_MACOSX)
-   } else if (inspection_type == DownloadFileType::DMG) {
-     StartExtractDmgFeatures();

File diff suppressed because it is too large
+ 622 - 581
patches/core/inox-patchset/0001-fix-building-without-safebrowsing.patch


+ 2 - 2
patches/core/inox-patchset/0003-disable-autofill-download-manager.patch

@@ -1,6 +1,6 @@
 --- a/components/autofill/core/browser/autofill_download_manager.cc
 +++ b/components/autofill/core/browser/autofill_download_manager.cc
-@@ -827,86 +827,6 @@ AutofillDownloadManager::GetRequestURLAn
+@@ -829,86 +829,6 @@ AutofillDownloadManager::GetRequestURLAn
  }
  
  bool AutofillDownloadManager::StartRequest(FormRequestData request_data) {
@@ -83,7 +83,7 @@
 -      url_loader_factory.get(),
 -      base::BindOnce(&AutofillDownloadManager::OnSimpleLoaderComplete,
 -                     base::Unretained(this), std::move(--url_loaders_.end()),
--                     std::move(request_data), base::TimeTicks::Now()));
+-                     std::move(request_data), AutofillTickClock::NowTicks()));
    return true;
  }
  

+ 15 - 23
patches/core/inox-patchset/0005-disable-default-extensions.patch

@@ -1,6 +1,16 @@
+--- a/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc
++++ b/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc
+@@ -26,7 +26,6 @@ namespace extensions {
+ 
+ bool IsComponentExtensionWhitelisted(const std::string& extension_id) {
+   const char* const kAllowed[] = {
+-    extension_misc::kInAppPaymentsSupportAppId,
+     extension_misc::kMediaRouterStableExtensionId,
+     extension_misc::kPdfExtensionId,
+ #if defined(OS_CHROMEOS)
 --- a/chrome/browser/extensions/component_loader.cc
 +++ b/chrome/browser/extensions/component_loader.cc
-@@ -343,11 +343,6 @@ void ComponentLoader::AddWebStoreApp() {
+@@ -342,11 +342,6 @@ void ComponentLoader::AddWebStoreApp() {
    if (!IsNormalSession())
      return;
  #endif
@@ -12,7 +22,7 @@
  }
  
  #if defined(OS_CHROMEOS)
-@@ -445,11 +440,6 @@ void ComponentLoader::AddDefaultComponen
+@@ -444,11 +439,6 @@ void ComponentLoader::AddDefaultComponen
    AddKeyboardApp();
  #else  // defined(OS_CHROMEOS)
    DCHECK(!skip_session_components);
@@ -24,7 +34,7 @@
  #endif  // defined(OS_CHROMEOS)
  
    if (!skip_session_components) {
-@@ -522,13 +512,6 @@ void ComponentLoader::AddDefaultComponen
+@@ -523,13 +513,6 @@ void ComponentLoader::AddDefaultComponen
      AddHangoutServicesExtension();
  #endif  // BUILDFLAG(ENABLE_HANGOUT_SERVICES_EXTENSION)
  
@@ -52,7 +62,7 @@
    {
 --- a/chrome/browser/extensions/webstore_installer.cc
 +++ b/chrome/browser/extensions/webstore_installer.cc
-@@ -568,28 +568,6 @@ void WebstoreInstaller::DownloadNextPend
+@@ -562,20 +562,6 @@ void WebstoreInstaller::DownloadNextPend
  void WebstoreInstaller::DownloadCrx(
      const std::string& extension_id,
      InstallSource source) {
@@ -66,14 +76,6 @@
 -  base::FilePath download_directory(g_download_directory_for_tests ?
 -      *g_download_directory_for_tests : download_path);
 -
--#if defined(OS_CHROMEOS)
--  // Do not use drive for extension downloads.
--  if (drive::util::IsUnderDriveMountPoint(download_directory)) {
--    download_directory = DownloadPrefs::FromBrowserContext(
--        profile_)->GetDefaultDownloadDirectoryForProfile();
--  }
--#endif
--
 -  base::PostTaskAndReplyWithResult(
 -      GetExtensionFileTaskRunner().get(), FROM_HERE,
 -      base::BindOnce(&GetDownloadFilePath, download_directory, extension_id),
@@ -81,7 +83,7 @@
  }
  
  // http://crbug.com/165634
-@@ -737,21 +715,6 @@ void WebstoreInstaller::UpdateDownloadPr
+@@ -723,21 +709,6 @@ void WebstoreInstaller::UpdateDownloadPr
  void WebstoreInstaller::StartCrxInstaller(const DownloadItem& download) {
    DCHECK_CURRENTLY_ON(BrowserThread::UI);
    DCHECK(!crx_installer_.get());
@@ -103,13 +105,3 @@
  }
  
  void WebstoreInstaller::ReportFailure(const std::string& error,
---- a/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc
-+++ b/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc
-@@ -26,7 +26,6 @@ namespace extensions {
- 
- bool IsComponentExtensionWhitelisted(const std::string& extension_id) {
-   const char* const kAllowed[] = {
--    extension_misc::kInAppPaymentsSupportAppId,
-     extension_misc::kMediaRouterStableExtensionId,
-     extension_misc::kPdfExtensionId,
- #if defined(OS_CHROMEOS)

+ 1 - 1
patches/core/inox-patchset/chromium-exclude_unwind_tables.patch

@@ -1,6 +1,6 @@
 --- a/build/config/compiler/compiler.gni
 +++ b/build/config/compiler/compiler.gni
-@@ -83,19 +83,19 @@ declare_args() {
+@@ -87,19 +87,19 @@ declare_args() {
    # is_component_build=false. Very large debug symbols can have unwanted side
    # effects so this is enforced by default for chromium.
    forbid_non_component_debug_builds = build_with_chromium

+ 74 - 74
patches/core/iridium-browser/all-add-trk-prefixes-to-possibly-evil-connections.patch

@@ -95,7 +95,7 @@ by default.
  // creates and uses to publish OEM default apps to the extensions system.
 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
 +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
-@@ -1817,7 +1817,7 @@ void FileManagerPrivateInternalGetDownlo
+@@ -1053,7 +1053,7 @@ void FileManagerPrivateInternalGetDownlo
        IdentityManagerFactory::GetForProfile(chrome_details.GetProfile());
    const std::string& account_id = identity_manager->GetPrimaryAccountId();
    std::vector<std::string> scopes;
@@ -146,7 +146,7 @@ by default.
  const int kDownloadsLowSpaceWarningHelpNumber = 1061547;
 --- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc
 +++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc
-@@ -48,8 +48,8 @@ enum class U2FAttestationPromptResult {
+@@ -52,8 +52,8 @@ enum class U2FAttestationPromptResult {
  
  const char kGoogleDotCom[] = "google.com";
  constexpr const char* kGoogleGstaticAppIds[] = {
@@ -248,17 +248,6 @@ by default.
  
  // static
  DownloadFeedbackFactory* DownloadFeedback::factory_ = nullptr;
---- a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc
-+++ b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc
-@@ -30,7 +30,7 @@ namespace safe_search_api {
- namespace {
- 
- const char kSafeSearchApiUrl[] =
--    "https://safesearch.googleapis.com/v1:classify";
-+    "trk:238:https://safesearch.googleapis.com/v1:classify";
- const char kDataContentType[] = "application/x-www-form-urlencoded";
- const char kDataFormat[] = "key=%s&urls=%s&region_code=%s";
- 
 --- a/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
 +++ b/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
 @@ -263,7 +263,7 @@ GURL SpellcheckHunspellDictionary::GetDi
@@ -272,7 +261,7 @@ by default.
                base::ToLowerASCII(bdict_file));
 --- a/chrome/browser/supervised_user/supervised_user_service.cc
 +++ b/chrome/browser/supervised_user/supervised_user_service.cc
-@@ -84,7 +84,7 @@ namespace {
+@@ -81,7 +81,7 @@ namespace {
  
  // The URL from which to download a host blacklist if no local one exists yet.
  const char kBlacklistURL[] =
@@ -305,7 +294,7 @@ by default.
  // The maximum number of ignored bubble we track in the NumLaterPerReinstall
 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
 +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
-@@ -69,17 +69,17 @@ namespace {
+@@ -73,17 +73,17 @@ namespace {
  // The URL for the the Learn More page shown on incognito new tab.
  const char kLearnMoreIncognitoUrl[] =
  #if defined(OS_CHROMEOS)
@@ -343,7 +332,7 @@ by default.
  
 --- a/chrome/common/url_constants.cc
 +++ b/chrome/common/url_constants.cc
-@@ -254,7 +254,7 @@ const char kSyncErrorsHelpURL[] =
+@@ -246,7 +246,7 @@ const char kSyncErrorsHelpURL[] =
      "https://support.google.com/chrome/?p=settings_sync_error";
  
  const char kSyncGoogleDashboardURL[] =
@@ -352,8 +341,8 @@ by default.
  
  const char kSyncLearnMoreURL[] =
      "https://support.google.com/chrome/?p=settings_sign_in";
-@@ -355,7 +355,7 @@ const char kArcTermsURLPath[] = "arc/ter
- const char kArcPrivacyPolicyURLPath[] = "arc/privacy_policy";
+@@ -350,7 +350,7 @@ const char kNaturalScrollHelpURL[] =
+ const char kOemEulaURLPath[] = "oem";
  
  const char kOnlineEulaURLPath[] =
 -    "https://www.google.com/intl/%s/chrome/eula_text.html";
@@ -361,16 +350,16 @@ by default.
  
  const char kTPMFirmwareUpdateLearnMoreURL[] =
      "https://support.google.com/chromebook/?p=tpm_update";
---- a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
-+++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
-@@ -40,7 +40,7 @@ namespace {
- const wchar_t kIePath[] = L"Internet Explorer\\iexplore.exe";
- 
- const char kChromeInstallUrl[] =
--    "https://google.com/cloudprint/learn/chrome.html";
-+    "trk:252:https://google.com/cloudprint/learn/chrome.html";
+--- a/chrome/installer/setup/google_chrome_behaviors.cc
++++ b/chrome/installer/setup/google_chrome_behaviors.cc
+@@ -44,7 +44,7 @@ base::string16 LocalizeUrl(const wchar_t
  
- const wchar_t kCloudPrintRegKey[] = L"Software\\Google\\CloudPrint";
+ base::string16 GetUninstallSurveyUrl() {
+   static constexpr wchar_t kSurveyUrl[] =
+-      L"https://support.google.com/chrome/contact/chromeuninstall3?hl=$1";
++      L"trk:253:https://support.google.com/chrome/contact/chromeuninstall3?hl=$1";
+   return LocalizeUrl(kSurveyUrl);
+ }
  
 --- a/chromecast/browser/service/cast_service_simple.cc
 +++ b/chromecast/browser/service/cast_service_simple.cc
@@ -394,6 +383,17 @@ by default.
  
  }  // namespace
  
+--- a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
++++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
+@@ -40,7 +40,7 @@ namespace {
+ const wchar_t kIePath[] = L"Internet Explorer\\iexplore.exe";
+ 
+ const char kChromeInstallUrl[] =
+-    "https://google.com/cloudprint/learn/chrome.html";
++    "trk:252:https://google.com/cloudprint/learn/chrome.html";
+ 
+ const wchar_t kCloudPrintRegKey[] = L"Software\\Google\\CloudPrint";
+ 
 --- a/components/cloud_devices/common/cloud_devices_urls.cc
 +++ b/components/cloud_devices/common/cloud_devices_urls.cc
 @@ -14,20 +14,20 @@
@@ -450,7 +450,7 @@ by default.
  const char kFolderMimeType[] = "application/vnd.google-apps.folder";
 --- a/components/feedback/feedback_uploader.cc
 +++ b/components/feedback/feedback_uploader.cc
-@@ -26,7 +26,7 @@ constexpr base::FilePath::CharType kFeed
+@@ -25,7 +25,7 @@ constexpr base::FilePath::CharType kFeed
      FILE_PATH_LITERAL("Feedback Reports");
  
  constexpr char kFeedbackPostUrl[] =
@@ -523,7 +523,7 @@ by default.
  
 --- a/components/password_manager/core/browser/password_store.cc
 +++ b/components/password_manager/core/browser/password_store.cc
-@@ -222,10 +222,10 @@ void PasswordStore::GetLogins(const Form
+@@ -230,10 +230,10 @@ void PasswordStore::GetLogins(const Form
    // TODO(mdm): actually delete them at some point, say M24 or so.
    base::Time cutoff;  // the null time
    if (form.scheme == PasswordForm::Scheme::kHtml &&
@@ -540,7 +540,7 @@ by default.
      base::Time out_time;
 --- a/components/policy/core/common/policy_loader_win.cc
 +++ b/components/policy/core/common/policy_loader_win.cc
-@@ -57,7 +57,7 @@ const char kKeyThirdParty[] = "3rdparty"
+@@ -56,7 +56,7 @@ const char kKeyThirdParty[] = "3rdparty"
  
  // The web store url that is the only trusted source for extensions.
  const char kExpectedWebStoreUrl[] =
@@ -551,7 +551,7 @@ by default.
  
 --- a/components/policy/resources/policy_templates.json
 +++ b/components/policy/resources/policy_templates.json
-@@ -3666,7 +3666,7 @@
+@@ -3797,7 +3797,7 @@
          'dynamic_refresh': True,
          'per_profile': True,
        },
@@ -560,7 +560,7 @@ by default.
        'id': 34,
        'caption': '''Configure the list of force-installed apps and extensions''',
        'tags': ['full-admin-access'],
-@@ -7767,7 +7767,7 @@
+@@ -8031,7 +8031,7 @@
        'features': {
          'dynamic_refresh': True,
        },
@@ -580,6 +580,17 @@ by default.
  
  }  // namespace
  
+--- a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc
++++ b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc
+@@ -30,7 +30,7 @@ namespace safe_search_api {
+ namespace {
+ 
+ const char kSafeSearchApiUrl[] =
+-    "https://safesearch.googleapis.com/v1:classify";
++    "trk:238:https://safesearch.googleapis.com/v1:classify";
+ const char kDataContentType[] = "application/x-www-form-urlencoded";
+ const char kDataFormat[] = "key=%s&urls=%s&region_code=%s";
+ 
 --- a/components/search_engines/prepopulated_engines.json
 +++ b/components/search_engines/prepopulated_engines.json
 @@ -105,7 +105,7 @@
@@ -645,6 +656,28 @@ by default.
  
    GURL url(args[0]);
    if (url.is_valid() && url.has_scheme())
+--- a/extensions/browser/updater/safe_manifest_parser.cc
++++ b/extensions/browser/updater/safe_manifest_parser.cc
+@@ -27,7 +27,7 @@ namespace {
+ 
+ constexpr char kExpectedGupdateProtocol[] = "2.0";
+ constexpr char kExpectedGupdateXmlns[] =
+-    "http://www.google.com/update2/response";
++    "trk:182:http://www.google.com/update2/response";
+ 
+ void ReportError(ParseUpdateManifestCallback callback,
+                  const std::string& error) {
+--- a/extensions/common/extension_urls.cc
++++ b/extensions/common/extension_urls.cc
+@@ -32,7 +32,7 @@ namespace extension_urls {
+ 
+ const char kChromeWebstoreBaseURL[] = "https://chrome.google.com/webstore";
+ const char kChromeWebstoreUpdateURL[] =
+-    "https://clients2.google.com/service/update2/crx";
++    "trk:05:https://clients2.google.com/service/update2/crx";
+ 
+ GURL GetWebstoreLaunchURL() {
+   extensions::ExtensionsClient* client = extensions::ExtensionsClient::Get();
 --- a/google_apis/gaia/gaia_constants.cc
 +++ b/google_apis/gaia/gaia_constants.cc
 @@ -25,36 +25,36 @@ const char kSyncService[] = "chromiumsyn
@@ -731,18 +764,18 @@ by default.
      const jingle_xmpp::QName QN_GOOGLE_AUTH_CLIENT_USES_FULL_BIND_RESULT(
 --- a/remoting/base/breakpad_mac.mm
 +++ b/remoting/base/breakpad_mac.mm
-@@ -56,7 +56,7 @@ void InitializeCrashReporting() {
-                         forKey:@BREAKPAD_REPORT_INTERVAL];
-   }
-   if (![breakpad_config objectForKey:@BREAKPAD_URL]) {
--    [breakpad_config setObject:@"https://clients2.google.com/cr/report"
-+    [breakpad_config setObject:@"trk:108:https://clients2.google.com/cr/report"
-                         forKey:@BREAKPAD_URL];
-   }
+@@ -52,7 +52,7 @@ void InitializeCrashReporting() {
+       [breakpad_config setObject:@"21600" forKey:@BREAKPAD_REPORT_INTERVAL];
+     }
+     if (![breakpad_config objectForKey:@BREAKPAD_URL]) {
+-      [breakpad_config setObject:@"https://clients2.google.com/cr/report"
++      [breakpad_config setObject:@"trk:108:https://clients2.google.com/cr/report"
+                           forKey:@BREAKPAD_URL];
+     }
  
 --- a/remoting/protocol/jingle_messages.cc
 +++ b/remoting/protocol/jingle_messages.cc
-@@ -25,7 +25,7 @@ const char kJabberNamespace[] = "jabber:
+@@ -24,7 +24,7 @@ const char kJabberNamespace[] = "jabber:
  const char kJingleNamespace[] = "urn:xmpp:jingle:1";
  
  // Namespace for transport messages when using standard ICE.
@@ -784,36 +817,3 @@ by default.
    webview_->GetWebContents()->Focus();
  }
  
---- a/extensions/browser/updater/safe_manifest_parser.cc
-+++ b/extensions/browser/updater/safe_manifest_parser.cc
-@@ -27,7 +27,7 @@ namespace {
- 
- constexpr char kExpectedGupdateProtocol[] = "2.0";
- constexpr char kExpectedGupdateXmlns[] =
--    "http://www.google.com/update2/response";
-+    "trk:182:http://www.google.com/update2/response";
- 
- void ReportError(ParseUpdateManifestCallback callback,
-                  const std::string& error) {
---- a/extensions/common/extension_urls.cc
-+++ b/extensions/common/extension_urls.cc
-@@ -32,7 +32,7 @@ namespace extension_urls {
- 
- const char kChromeWebstoreBaseURL[] = "https://chrome.google.com/webstore";
- const char kChromeWebstoreUpdateURL[] =
--    "https://clients2.google.com/service/update2/crx";
-+    "trk:05:https://clients2.google.com/service/update2/crx";
- 
- GURL GetWebstoreLaunchURL() {
-   extensions::ExtensionsClient* client = extensions::ExtensionsClient::Get();
---- a/chrome/installer/setup/google_chrome_behaviors.cc
-+++ b/chrome/installer/setup/google_chrome_behaviors.cc
-@@ -44,7 +44,7 @@ base::string16 LocalizeUrl(const wchar_t
- 
- base::string16 GetUninstallSurveyUrl() {
-   static constexpr wchar_t kSurveyUrl[] =
--      L"https://support.google.com/chrome/contact/chromeuninstall3?hl=$1";
-+      L"trk:253:https://support.google.com/chrome/contact/chromeuninstall3?hl=$1";
-   return LocalizeUrl(kSurveyUrl);
- }
- 

+ 2 - 2
patches/core/iridium-browser/safe_browsing-disable-incident-reporting.patch

@@ -27,7 +27,7 @@ the URL so we get notified if this happens again in the future).
      kSafeBrowsingIncidentTrafficAnnotation =
 --- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
 +++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
-@@ -312,11 +312,7 @@ IncidentReportingService::UploadContext:
+@@ -311,11 +311,7 @@ IncidentReportingService::UploadContext:
  
  // static
  bool IncidentReportingService::IsEnabledForProfile(Profile* profile) {
@@ -54,7 +54,7 @@ the URL so we get notified if this happens again in the future).
  
 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc
 +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
-@@ -228,7 +228,7 @@ SafeBrowsingUIManager* SafeBrowsingServi
+@@ -232,7 +232,7 @@ SafeBrowsingUIManager* SafeBrowsingServi
  }
  
  void SafeBrowsingService::RegisterAllDelayedAnalysis() {

+ 96 - 96
patches/core/ungoogled-chromium/block-trk-and-subdomains.patch

@@ -23,7 +23,7 @@
        url.SchemeIs(dom_distiller::kDomDistillerScheme) ||
 --- a/chrome/browser/ui/singleton_tabs.cc
 +++ b/chrome/browser/ui/singleton_tabs.cc
-@@ -99,7 +99,8 @@ int GetIndexOfExistingTab(Browser* brows
+@@ -100,7 +100,8 @@ int GetIndexOfExistingTab(Browser* brows
  
      // Skip view-source tabs. This is needed because RewriteURLIfNecessary
      // removes the "view-source:" scheme which leads to incorrect matching.
@@ -33,6 +33,35 @@
        continue;
  
      GURL rewritten_tab_url = tab_url;
+--- a/chromecast/browser/url_request_context_factory.cc
++++ b/chromecast/browser/url_request_context_factory.cc
+@@ -39,6 +39,7 @@
+ #include "net/http/http_stream_factory.h"
+ #include "net/proxy_resolution/proxy_resolution_service.h"
+ #include "net/ssl/ssl_config_service_defaults.h"
++#include "net/url_request/trk_protocol_handler.h"
+ #include "net/url_request/url_request_context.h"
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+@@ -245,13 +246,17 @@ void URLRequestContextFactory::Initializ
+       new net::URLRequestJobFactoryImpl());
+   // Keep ProtocolHandlers added in sync with
+   // CastContentBrowserClient::IsHandledURL().
++  bool set_protocol = false;
+   for (content::ProtocolHandlerMap::iterator it = protocol_handlers->begin();
+        it != protocol_handlers->end();
+        ++it) {
+-    bool set_protocol =
++    set_protocol =
+         job_factory->SetProtocolHandler(it->first, std::move(it->second));
+     DCHECK(set_protocol);
+   }
++  set_protocol = job_factory->SetProtocolHandler(
++      url::kTraceScheme, base::WrapUnique(new net::TrkProtocolHandler));
++  DCHECK(set_protocol);
+ 
+   // Set up interceptors in the reverse order.
+   std::unique_ptr<net::URLRequestJobFactory> top_job_factory =
 --- a/components/omnibox/browser/autocomplete_input.cc
 +++ b/components/omnibox/browser/autocomplete_input.cc
 @@ -496,7 +496,8 @@ void AutocompleteInput::ParseForEmphasiz
@@ -56,67 +85,6 @@
      utf8_input.erase(0, scheme.end() + 1);
    }
    return url::FindAndCompareScheme(utf8_input, url::kHttpScheme, nullptr);
---- a/content/browser/child_process_security_policy_impl.cc
-+++ b/content/browser/child_process_security_policy_impl.cc
-@@ -507,6 +507,7 @@ ChildProcessSecurityPolicyImpl::ChildPro
-   RegisterWebSafeScheme(url::kHttpsScheme);
-   RegisterWebSafeScheme(url::kFtpScheme);
-   RegisterWebSafeScheme(url::kDataScheme);
-+  RegisterWebSafeScheme(url::kTraceScheme);
-   RegisterWebSafeScheme("feed");
- 
-   // TODO(nick): https://crbug.com/651534 blob: and filesystem: schemes embed
---- a/net/url_request/url_request.cc
-+++ b/net/url_request/url_request.cc
-@@ -15,6 +15,7 @@
- #include "base/metrics/histogram_macros.h"
- #include "base/rand_util.h"
- #include "base/stl_util.h"
-+#include "base/strings/string_util.h"
- #include "base/strings/utf_string_conversions.h"
- #include "base/synchronization/lock.h"
- #include "base/threading/thread_task_runner_handle.h"
-@@ -42,6 +43,7 @@
- #include "net/url_request/url_request_redirect_job.h"
- #include "url/gurl.h"
- #include "url/origin.h"
-+#include "url/url_constants.h"
- 
- using base::Time;
- using std::string;
-@@ -612,6 +614,12 @@ URLRequest::URLRequest(const GURL& url,
-   // Sanity check out environment.
-   DCHECK(base::ThreadTaskRunnerHandle::IsSet());
- 
-+  if (!url.SchemeIs(url::kTraceScheme) &&
-+      base::EndsWith(url.host(), "qjz9zk", base::CompareCase::INSENSITIVE_ASCII)) {
-+    LOG(ERROR) << "Block URL in URLRequest: " << url;
-+    url_chain_[0] = GURL(url::kTraceScheme + (":" + url.possibly_invalid_spec()));
-+  }
-+
-   context->url_requests()->insert(this);
-   net_log_.BeginEvent(NetLogEventType::REQUEST_ALIVE, [&] {
-     return NetLogURLRequestConstructorParams(url, priority_,
---- a/url/url_constants.cc
-+++ b/url/url_constants.cc
-@@ -26,6 +26,7 @@ const char kHttpsScheme[] = "https";
- const char kJavaScriptScheme[] = "javascript";
- const char kMailToScheme[] = "mailto";
- const char kTelScheme[] = "tel";
-+const char kTraceScheme[] = "trk";
- const char kWsScheme[] = "ws";
- const char kWssScheme[] = "wss";
- 
---- a/url/url_constants.h
-+++ b/url/url_constants.h
-@@ -32,6 +32,7 @@ COMPONENT_EXPORT(URL) extern const char
- COMPONENT_EXPORT(URL) extern const char kJavaScriptScheme[];
- COMPONENT_EXPORT(URL) extern const char kMailToScheme[];
- COMPONENT_EXPORT(URL) extern const char kTelScheme[];
-+COMPONENT_EXPORT(URL) extern const char kTraceScheme[];
- COMPONENT_EXPORT(URL) extern const char kWsScheme[];
- COMPONENT_EXPORT(URL) extern const char kWssScheme[];
- 
 --- a/components/url_formatter/url_fixer.cc
 +++ b/components/url_formatter/url_fixer.cc
 @@ -552,6 +552,10 @@ GURL FixupURL(const std::string& text, c
@@ -130,9 +98,19 @@
    // We handle the file scheme separately.
    if (scheme == url::kFileScheme)
      return GURL(parts.scheme.is_valid() ? text : FixupPath(text));
+--- a/content/browser/child_process_security_policy_impl.cc
++++ b/content/browser/child_process_security_policy_impl.cc
+@@ -513,6 +513,7 @@ ChildProcessSecurityPolicyImpl::ChildPro
+   RegisterWebSafeScheme(url::kHttpsScheme);
+   RegisterWebSafeScheme(url::kFtpScheme);
+   RegisterWebSafeScheme(url::kDataScheme);
++  RegisterWebSafeScheme(url::kTraceScheme);
+   RegisterWebSafeScheme("feed");
+ 
+   // TODO(nick): https://crbug.com/651534 blob: and filesystem: schemes embed
 --- a/net/BUILD.gn
 +++ b/net/BUILD.gn
-@@ -1787,6 +1787,8 @@ component("net") {
+@@ -1801,6 +1801,8 @@ component("net") {
        "url_request/report_sender.h",
        "url_request/static_http_user_agent_settings.cc",
        "url_request/static_http_user_agent_settings.h",
@@ -206,6 +184,37 @@
 +}  // namespace net
 +
 +#endif  // NET_URL_REQUEST_TRK_PROTOCOL_HANDLER_H_
+--- a/net/url_request/url_request.cc
++++ b/net/url_request/url_request.cc
+@@ -13,6 +13,7 @@
+ #include "base/metrics/histogram_macros.h"
+ #include "base/rand_util.h"
+ #include "base/stl_util.h"
++#include "base/strings/string_util.h"
+ #include "base/strings/utf_string_conversions.h"
+ #include "base/synchronization/lock.h"
+ #include "base/threading/thread_task_runner_handle.h"
+@@ -40,6 +41,7 @@
+ #include "net/url_request/url_request_redirect_job.h"
+ #include "url/gurl.h"
+ #include "url/origin.h"
++#include "url/url_constants.h"
+ 
+ using base::Time;
+ using std::string;
+@@ -592,6 +594,12 @@ URLRequest::URLRequest(const GURL& url,
+   // Sanity check out environment.
+   DCHECK(base::ThreadTaskRunnerHandle::IsSet());
+ 
++  if (!url.SchemeIs(url::kTraceScheme) &&
++      base::EndsWith(url.host(), "qjz9zk", base::CompareCase::INSENSITIVE_ASCII)) {
++    LOG(ERROR) << "Block URL in URLRequest: " << url;
++    url_chain_[0] = GURL(url::kTraceScheme + (":" + url.possibly_invalid_spec()));
++  }
++
+   context->url_requests()->insert(this);
+   net_log_.BeginEvent(NetLogEventType::REQUEST_ALIVE, [&] {
+     return NetLogURLRequestConstructorParams(url, priority_,
 --- a/net/url_request/url_request_context_builder.cc
 +++ b/net/url_request/url_request_context_builder.cc
 @@ -40,6 +40,7 @@
@@ -216,16 +225,36 @@
  #include "net/url_request/url_request_context.h"
  #include "net/url_request/url_request_context_storage.h"
  #include "net/url_request/url_request_intercepting_job_factory.h"
-@@ -641,6 +642,9 @@ std::unique_ptr<URLRequestContext> URLRe
+@@ -621,6 +622,9 @@ std::unique_ptr<URLRequestContext> URLRe
      job_factory->SetProtocolHandler(url::kDataScheme,
                                      std::make_unique<DataProtocolHandler>());
  
 +  job_factory->SetProtocolHandler(url::kTraceScheme,
 +                                  std::make_unique<TrkProtocolHandler>());
 +
- #if !BUILDFLAG(DISABLE_FILE_SUPPORT)
-   if (file_enabled_) {
-     job_factory->SetProtocolHandler(
+ #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+   if (ftp_enabled_) {
+     storage->set_ftp_auth_cache(std::make_unique<FtpAuthCache>());
+--- a/url/url_constants.cc
++++ b/url/url_constants.cc
+@@ -26,6 +26,7 @@ const char kHttpsScheme[] = "https";
+ const char kJavaScriptScheme[] = "javascript";
+ const char kMailToScheme[] = "mailto";
+ const char kTelScheme[] = "tel";
++const char kTraceScheme[] = "trk";
+ const char kWsScheme[] = "ws";
+ const char kWssScheme[] = "wss";
+ 
+--- a/url/url_constants.h
++++ b/url/url_constants.h
+@@ -32,6 +32,7 @@ COMPONENT_EXPORT(URL) extern const char
+ COMPONENT_EXPORT(URL) extern const char kJavaScriptScheme[];
+ COMPONENT_EXPORT(URL) extern const char kMailToScheme[];
+ COMPONENT_EXPORT(URL) extern const char kTelScheme[];
++COMPONENT_EXPORT(URL) extern const char kTraceScheme[];
+ COMPONENT_EXPORT(URL) extern const char kWsScheme[];
+ COMPONENT_EXPORT(URL) extern const char kWssScheme[];
+ 
 --- a/url/url_util.cc
 +++ b/url/url_util.cc
 @@ -52,6 +52,7 @@ struct SchemeRegistry {
@@ -244,32 +273,3 @@
    };
  
    // Schemes that can be sent CORS requests.
---- a/chromecast/browser/url_request_context_factory.cc
-+++ b/chromecast/browser/url_request_context_factory.cc
-@@ -39,6 +39,7 @@
- #include "net/http/http_stream_factory.h"
- #include "net/proxy_resolution/proxy_resolution_service.h"
- #include "net/ssl/ssl_config_service_defaults.h"
-+#include "net/url_request/trk_protocol_handler.h"
- #include "net/url_request/url_request_context.h"
- #include "net/url_request/url_request_context_builder.h"
- #include "net/url_request/url_request_context_getter.h"
-@@ -245,13 +246,17 @@ void URLRequestContextFactory::Initializ
-       new net::URLRequestJobFactoryImpl());
-   // Keep ProtocolHandlers added in sync with
-   // CastContentBrowserClient::IsHandledURL().
-+  bool set_protocol = false;
-   for (content::ProtocolHandlerMap::iterator it = protocol_handlers->begin();
-        it != protocol_handlers->end();
-        ++it) {
--    bool set_protocol =
-+    set_protocol =
-         job_factory->SetProtocolHandler(it->first, std::move(it->second));
-     DCHECK(set_protocol);
-   }
-+  set_protocol = job_factory->SetProtocolHandler(
-+      url::kTraceScheme, base::WrapUnique(new net::TrkProtocolHandler));
-+  DCHECK(set_protocol);
- 
-   // Set up interceptors in the reverse order.
-   std::unique_ptr<net::URLRequestJobFactory> top_job_factory =

+ 12 - 12
patches/core/ungoogled-chromium/disable-fonts-googleapis-references.patch

@@ -2,7 +2,7 @@
 
 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
 +++ b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
-@@ -308,7 +308,7 @@ bool DomDistillerViewerSource::ShouldSer
+@@ -317,7 +317,7 @@ bool DomDistillerViewerSource::ShouldSer
  }
  
  std::string DomDistillerViewerSource::GetContentSecurityPolicyStyleSrc() {
@@ -22,6 +22,17 @@
    <style>
      .english :lang(th) {display: none}
      .english :lang(zh) {display: none}
+--- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js
++++ b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
+@@ -130,7 +130,7 @@ function maybeSetWebFont() {
+     return;
+ 
+   var e = document.createElement('link');
+-  e.href = 'https://fonts.googleapis.com/css?family=Roboto';
++  e.href = 'chrome://resources/css/roboto.css';
+   e.rel = 'stylesheet';
+   e.type = 'text/css';
+   document.head.appendChild(e);
 --- a/third_party/catapult/third_party/polymer/components/font-roboto/roboto.html
 +++ b/third_party/catapult/third_party/polymer/components/font-roboto/roboto.html
 @@ -7,4 +7,4 @@ The complete set of contributors may be
@@ -64,17 +75,6 @@
  $extrastylesheet
  </head>
  <body>
---- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js
-+++ b/components/dom_distiller/core/javascript/dom_distiller_viewer.js
-@@ -130,7 +130,7 @@ function maybeSetWebFont() {
-     return;
- 
-   var e = document.createElement('link');
--  e.href = 'https://fonts.googleapis.com/css?family=Roboto';
-+  e.href = 'chrome://resources/css/roboto.css';
-   e.rel = 'stylesheet';
-   e.type = 'text/css';
-   document.head.appendChild(e);
 --- a/tools/md_browser/base.css
 +++ b/tools/md_browser/base.css
 @@ -16,8 +16,7 @@

+ 218 - 225
patches/core/ungoogled-chromium/disable-google-host-detection.patch

@@ -1,143 +1,107 @@
 # Disables various detections of Google hosts and functionality specific to them
 
---- a/net/base/url_util.cc
-+++ b/net/base/url_util.cc
-@@ -394,27 +394,6 @@ bool HasGoogleHost(const GURL& url) {
- }
+--- a/chrome/common/google_url_loader_throttle.cc
++++ b/chrome/common/google_url_loader_throttle.cc
+@@ -9,10 +9,6 @@
+ #include "services/network/public/cpp/resource_response.h"
+ #include "services/network/public/mojom/url_response_head.mojom.h"
  
- bool IsGoogleHost(base::StringPiece host) {
--  static const char* kGoogleHostSuffixes[] = {
--      ".google.com",
--      ".youtube.com",
--      ".gmail.com",
--      ".doubleclick.net",
--      ".gstatic.com",
--      ".googlevideo.com",
--      ".googleusercontent.com",
--      ".googlesyndication.com",
--      ".google-analytics.com",
--      ".googleadservices.com",
--      ".googleapis.com",
--      ".ytimg.com",
--  };
--  for (const char* suffix : kGoogleHostSuffixes) {
--    // Here it's possible to get away with faster case-sensitive comparisons
--    // because the list above is all lowercase, and a GURL's host name will
--    // always be canonicalized to lowercase as well.
--    if (base::EndsWith(host, suffix, base::CompareCase::SENSITIVE))
--      return true;
+-#if BUILDFLAG(ENABLE_EXTENSIONS)
+-#include "extensions/common/extension_urls.h"
+-#endif
+-
+ GoogleURLLoaderThrottle::GoogleURLLoaderThrottle(
+     bool is_off_the_record,
+     chrome::mojom::DynamicParams dynamic_params)
+@@ -26,36 +22,6 @@ void GoogleURLLoaderThrottle::DetachFrom
+ void GoogleURLLoaderThrottle::WillStartRequest(
+     network::ResourceRequest* request,
+     bool* defer) {
+-  variations::AppendVariationsHeaderWithCustomValue(
+-      request->url,
+-      is_off_the_record_ ? variations::InIncognito::kYes
+-                         : variations::InIncognito::kNo,
+-      dynamic_params_.variation_ids_header, request);
+-
+-  if (dynamic_params_.force_safe_search) {
+-    GURL new_url;
+-    safe_search_util::ForceGoogleSafeSearch(request->url, &new_url);
+-    if (!new_url.is_empty())
+-      request->url = new_url;
+-  }
+-
+-  static_assert(safe_search_util::YOUTUBE_RESTRICT_OFF == 0,
+-                "OFF must be first");
+-  if (dynamic_params_.youtube_restrict >
+-          safe_search_util::YOUTUBE_RESTRICT_OFF &&
+-      dynamic_params_.youtube_restrict <
+-          safe_search_util::YOUTUBE_RESTRICT_COUNT) {
+-    safe_search_util::ForceYouTubeRestrict(
+-        request->url, &request->headers,
+-        static_cast<safe_search_util::YouTubeRestrictMode>(
+-            dynamic_params_.youtube_restrict));
+-  }
+-
+-  if (!dynamic_params_.allowed_domains_for_apps.empty() &&
+-      request->url.DomainIs("google.com")) {
+-    request->headers.SetHeader(safe_search_util::kGoogleAppsAllowedDomains,
+-                               dynamic_params_.allowed_domains_for_apps);
 -  }
-   return false;
  }
  
---- a/components/variations/net/variations_http_headers.cc
-+++ b/components/variations/net/variations_http_headers.cc
-@@ -29,10 +29,6 @@ namespace variations {
- 
- namespace {
- 
--// The name string for the header for variations information.
--// Note that prior to M33 this header was named X-Chrome-Variations.
--const char kClientDataHeader[] = "X-Client-Data";
+ void GoogleURLLoaderThrottle::WillRedirectRequest(
+@@ -64,33 +30,6 @@ void GoogleURLLoaderThrottle::WillRedire
+     bool* /* defer */,
+     std::vector<std::string>* to_be_removed_headers,
+     net::HttpRequestHeaders* modified_headers) {
+-  network::mojom::URLResponseHeadPtr response_head_ptr = response_head;
+-  variations::RemoveVariationsHeaderIfNeeded(*redirect_info, *response_head_ptr,
+-                                             to_be_removed_headers);
 -
- // The result of checking if a URL should have variations headers appended.
- // This enum is used to record UMA histogram values, and should not be
- // reordered.
-@@ -96,34 +92,7 @@ class VariationsHeaderHelper {
-       : VariationsHeaderHelper(request, null_url_request, variations_header) {}
- 
-   bool AppendHeaderIfNeeded(const GURL& url, InIncognito incognito) {
--    // Note the criteria for attaching client experiment headers:
--    // 1. We only transmit to Google owned domains which can evaluate
--    // experiments.
--    //    1a. These include hosts which have a standard postfix such as:
--    //         *.doubleclick.net or *.googlesyndication.com or
--    //         exactly www.googleadservices.com or
--    //         international TLD domains *.google.<TLD> or *.youtube.<TLD>.
--    // 2. Only transmit for non-Incognito profiles.
--    // 3. For the X-Client-Data header, only include non-empty variation IDs.
--    if ((incognito == InIncognito::kYes) || !ShouldAppendVariationsHeader(url))
--      return false;
+-  // URLLoaderThrottles can only change the redirect URL when the network
+-  // service is enabled. The non-network service path handles this in
+-  // ChromeNetworkDelegate.
+-  if (dynamic_params_.force_safe_search) {
+-    safe_search_util::ForceGoogleSafeSearch(redirect_info->new_url,
+-                                            &redirect_info->new_url);
+-  }
 -
--    if (variations_header_.empty())
--      return false;
+-  if (dynamic_params_.youtube_restrict >
+-          safe_search_util::YOUTUBE_RESTRICT_OFF &&
+-      dynamic_params_.youtube_restrict <
+-          safe_search_util::YOUTUBE_RESTRICT_COUNT) {
+-    safe_search_util::ForceYouTubeRestrict(
+-        redirect_info->new_url, modified_headers,
+-        static_cast<safe_search_util::YouTubeRestrictMode>(
+-            dynamic_params_.youtube_restrict));
+-  }
 -
--    if (resource_request_) {
--      // Set the variations header to cors_exempt_headers rather than headers
--      // to be exempted from CORS checks.
--      resource_request_->cors_exempt_headers.SetHeaderIfMissing(
--          kClientDataHeader, variations_header_);
--    } else if (url_request_) {
--      url_request_->SetExtraRequestHeaderByName(kClientDataHeader,
--                                                variations_header_, false);
--    } else {
--      NOTREACHED();
--      return false;
--    }
--    return true;
-+    return false;
-   }
- 
-  private:
-@@ -175,8 +144,6 @@ void RemoveVariationsHeaderIfNeeded(
-     const net::RedirectInfo& redirect_info,
-     const network::ResourceResponseHead& response_head,
-     std::vector<std::string>* to_be_removed_headers) {
--  if (!ShouldAppendVariationsHeader(redirect_info.new_url))
--    to_be_removed_headers->push_back(kClientDataHeader);
- }
- 
- std::unique_ptr<network::SimpleURLLoader>
-@@ -206,11 +173,11 @@ CreateSimpleURLLoaderWithVariationsHeade
- }
- 
- bool IsVariationsHeader(const std::string& header_name) {
--  return header_name == kClientDataHeader;
-+  return false;
- }
- 
- bool HasVariationsHeader(const network::ResourceRequest& request) {
--  return request.cors_exempt_headers.HasHeader(kClientDataHeader);
-+  return false;
- }
- 
- bool ShouldAppendVariationsHeaderForTesting(const GURL& url) {
-@@ -219,7 +186,6 @@ bool ShouldAppendVariationsHeaderForTest
- 
- void UpdateCorsExemptHeaderForVariations(
-     network::mojom::NetworkContextParams* params) {
--  params->cors_exempt_header_list.push_back(kClientDataHeader);
- }
- 
- }  // namespace variations
---- a/chrome/browser/page_load_metrics/page_load_metrics_util.cc
-+++ b/chrome/browser/page_load_metrics/page_load_metrics_util.cc
-@@ -171,9 +171,7 @@ bool DidObserveLoadingBehaviorInAnyFrame
- }
- 
- bool IsGoogleSearchHostname(const GURL& url) {
--  base::Optional<std::string> result =
--      page_load_metrics::GetGoogleHostnamePrefix(url);
--  return result && result.value() == "www";
-+  return false;
+-  if (!dynamic_params_.allowed_domains_for_apps.empty() &&
+-      redirect_info->new_url.DomainIs("google.com")) {
+-    modified_headers->SetHeader(safe_search_util::kGoogleAppsAllowedDomains,
+-                                dynamic_params_.allowed_domains_for_apps);
+-  }
  }
  
- bool IsGoogleSearchResultUrl(const GURL& url) {
---- a/components/search_engines/template_url.cc
-+++ b/components/search_engines/template_url.cc
-@@ -505,11 +505,7 @@ base::string16 TemplateURLRef::SearchTer
- bool TemplateURLRef::HasGoogleBaseURLs(
-     const SearchTermsData& search_terms_data) const {
-   ParseIfNecessary(search_terms_data);
--  return std::any_of(replacements_.begin(), replacements_.end(),
--                     [](const Replacement& replacement) {
--                       return replacement.type == GOOGLE_BASE_URL ||
--                              replacement.type == GOOGLE_BASE_SUGGEST_URL;
--                     });
-+  return false;
+ #if BUILDFLAG(ENABLE_EXTENSIONS)
+@@ -98,17 +37,5 @@ void GoogleURLLoaderThrottle::WillProces
+     const GURL& response_url,
+     network::ResourceResponseHead* response_head,
+     bool* defer) {
+-  // Built-in additional protection for the chrome web store origin.
+-  GURL webstore_url(extension_urls::GetWebstoreLaunchURL());
+-  if (response_url.SchemeIsHTTPOrHTTPS() &&
+-      response_url.DomainIs(webstore_url.host_piece())) {
+-    if (response_head && response_head->headers &&
+-        !response_head->headers->HasHeaderValue("x-frame-options", "deny") &&
+-        !response_head->headers->HasHeaderValue("x-frame-options",
+-                                                "sameorigin")) {
+-      response_head->headers->RemoveHeader("x-frame-options");
+-      response_head->headers->AddHeader("x-frame-options: sameorigin");
+-    }
+-  }
  }
- 
- bool TemplateURLRef::ExtractSearchTermsFromURL(
+ #endif
 --- a/components/google/core/common/google_util.cc
 +++ b/components/google/core/common/google_util.cc
 @@ -45,103 +45,6 @@ namespace {
@@ -438,107 +402,19 @@
    return false;
  }
  
---- a/chrome/common/google_url_loader_throttle.cc
-+++ b/chrome/common/google_url_loader_throttle.cc
-@@ -8,10 +8,6 @@
- #include "components/variations/net/variations_http_headers.h"
- #include "services/network/public/cpp/resource_response.h"
- 
--#if BUILDFLAG(ENABLE_EXTENSIONS)
--#include "extensions/common/extension_urls.h"
--#endif
--
- GoogleURLLoaderThrottle::GoogleURLLoaderThrottle(
-     bool is_off_the_record,
-     chrome::mojom::DynamicParams dynamic_params)
-@@ -25,36 +21,6 @@ void GoogleURLLoaderThrottle::DetachFrom
- void GoogleURLLoaderThrottle::WillStartRequest(
-     network::ResourceRequest* request,
-     bool* defer) {
--  variations::AppendVariationsHeaderWithCustomValue(
--      request->url,
--      is_off_the_record_ ? variations::InIncognito::kYes
--                         : variations::InIncognito::kNo,
--      dynamic_params_.variation_ids_header, request);
--
--  if (dynamic_params_.force_safe_search) {
--    GURL new_url;
--    safe_search_util::ForceGoogleSafeSearch(request->url, &new_url);
--    if (!new_url.is_empty())
--      request->url = new_url;
--  }
--
--  static_assert(safe_search_util::YOUTUBE_RESTRICT_OFF == 0,
--                "OFF must be first");
--  if (dynamic_params_.youtube_restrict >
--          safe_search_util::YOUTUBE_RESTRICT_OFF &&
--      dynamic_params_.youtube_restrict <
--          safe_search_util::YOUTUBE_RESTRICT_COUNT) {
--    safe_search_util::ForceYouTubeRestrict(
--        request->url, &request->headers,
--        static_cast<safe_search_util::YouTubeRestrictMode>(
--            dynamic_params_.youtube_restrict));
--  }
--
--  if (!dynamic_params_.allowed_domains_for_apps.empty() &&
--      request->url.DomainIs("google.com")) {
--    request->headers.SetHeader(safe_search_util::kGoogleAppsAllowedDomains,
--                               dynamic_params_.allowed_domains_for_apps);
--  }
+--- a/components/page_load_metrics/browser/page_load_metrics_util.cc
++++ b/components/page_load_metrics/browser/page_load_metrics_util.cc
+@@ -171,9 +171,7 @@ bool DidObserveLoadingBehaviorInAnyFrame
  }
  
- void GoogleURLLoaderThrottle::WillRedirectRequest(
-@@ -63,32 +29,6 @@ void GoogleURLLoaderThrottle::WillRedire
-     bool* /* defer */,
-     std::vector<std::string>* to_be_removed_headers,
-     net::HttpRequestHeaders* modified_headers) {
--  variations::RemoveVariationsHeaderIfNeeded(*redirect_info, response_head,
--                                             to_be_removed_headers);
--
--  // URLLoaderThrottles can only change the redirect URL when the network
--  // service is enabled. The non-network service path handles this in
--  // ChromeNetworkDelegate.
--  if (dynamic_params_.force_safe_search) {
--    safe_search_util::ForceGoogleSafeSearch(redirect_info->new_url,
--                                            &redirect_info->new_url);
--  }
--
--  if (dynamic_params_.youtube_restrict >
--          safe_search_util::YOUTUBE_RESTRICT_OFF &&
--      dynamic_params_.youtube_restrict <
--          safe_search_util::YOUTUBE_RESTRICT_COUNT) {
--    safe_search_util::ForceYouTubeRestrict(
--        redirect_info->new_url, modified_headers,
--        static_cast<safe_search_util::YouTubeRestrictMode>(
--            dynamic_params_.youtube_restrict));
--  }
--
--  if (!dynamic_params_.allowed_domains_for_apps.empty() &&
--      redirect_info->new_url.DomainIs("google.com")) {
--    modified_headers->SetHeader(safe_search_util::kGoogleAppsAllowedDomains,
--                                dynamic_params_.allowed_domains_for_apps);
--  }
+ bool IsGoogleSearchHostname(const GURL& url) {
+-  base::Optional<std::string> result =
+-      page_load_metrics::GetGoogleHostnamePrefix(url);
+-  return result && result.value() == "www";
++  return false;
  }
  
- #if BUILDFLAG(ENABLE_EXTENSIONS)
-@@ -96,17 +36,5 @@ void GoogleURLLoaderThrottle::WillProces
-     const GURL& response_url,
-     network::ResourceResponseHead* response_head,
-     bool* defer) {
--  // Built-in additional protection for the chrome web store origin.
--  GURL webstore_url(extension_urls::GetWebstoreLaunchURL());
--  if (response_url.SchemeIsHTTPOrHTTPS() &&
--      response_url.DomainIs(webstore_url.host_piece())) {
--    if (response_head && response_head->headers &&
--        !response_head->headers->HasHeaderValue("x-frame-options", "deny") &&
--        !response_head->headers->HasHeaderValue("x-frame-options",
--                                                "sameorigin")) {
--      response_head->headers->RemoveHeader("x-frame-options");
--      response_head->headers->AddHeader("x-frame-options: sameorigin");
--    }
--  }
- }
- #endif
+ bool IsGoogleSearchResultUrl(const GURL& url) {
 --- a/components/page_load_metrics/common/page_load_metrics_util.cc
 +++ b/components/page_load_metrics/common/page_load_metrics_util.cc
 @@ -12,38 +12,7 @@
@@ -581,3 +457,120 @@
  }
  
  bool IsGoogleHostname(const GURL& url) {
+--- a/components/search_engines/template_url.cc
++++ b/components/search_engines/template_url.cc
+@@ -505,11 +505,7 @@ base::string16 TemplateURLRef::SearchTer
+ bool TemplateURLRef::HasGoogleBaseURLs(
+     const SearchTermsData& search_terms_data) const {
+   ParseIfNecessary(search_terms_data);
+-  return std::any_of(replacements_.begin(), replacements_.end(),
+-                     [](const Replacement& replacement) {
+-                       return replacement.type == GOOGLE_BASE_URL ||
+-                              replacement.type == GOOGLE_BASE_SUGGEST_URL;
+-                     });
++  return false;
+ }
+ 
+ bool TemplateURLRef::ExtractSearchTermsFromURL(
+--- a/components/variations/net/variations_http_headers.cc
++++ b/components/variations/net/variations_http_headers.cc
+@@ -28,10 +28,6 @@ namespace variations {
+ 
+ namespace {
+ 
+-// The name string for the header for variations information.
+-// Note that prior to M33 this header was named X-Chrome-Variations.
+-const char kClientDataHeader[] = "X-Client-Data";
+-
+ // The result of checking if a URL should have variations headers appended.
+ // This enum is used to record UMA histogram values, and should not be
+ // reordered.
+@@ -88,26 +84,7 @@ class VariationsHeaderHelper {
+   }
+ 
+   bool AppendHeaderIfNeeded(const GURL& url, InIncognito incognito) {
+-    // Note the criteria for attaching client experiment headers:
+-    // 1. We only transmit to Google owned domains which can evaluate
+-    // experiments.
+-    //    1a. These include hosts which have a standard postfix such as:
+-    //         *.doubleclick.net or *.googlesyndication.com or
+-    //         exactly www.googleadservices.com or
+-    //         international TLD domains *.google.<TLD> or *.youtube.<TLD>.
+-    // 2. Only transmit for non-Incognito profiles.
+-    // 3. For the X-Client-Data header, only include non-empty variation IDs.
+-    if ((incognito == InIncognito::kYes) || !ShouldAppendVariationsHeader(url))
+-      return false;
+-
+-    if (variations_header_.empty())
+-      return false;
+-
+-    // Set the variations header to cors_exempt_headers rather than headers
+-    // to be exempted from CORS checks.
+-    resource_request_->cors_exempt_headers.SetHeaderIfMissing(
+-        kClientDataHeader, variations_header_);
+-    return true;
++    return false;
+   }
+ 
+  private:
+@@ -150,8 +127,6 @@ void RemoveVariationsHeaderIfNeeded(
+     const net::RedirectInfo& redirect_info,
+     const network::mojom::URLResponseHead& response_head,
+     std::vector<std::string>* to_be_removed_headers) {
+-  if (!ShouldAppendVariationsHeader(redirect_info.new_url))
+-    to_be_removed_headers->push_back(kClientDataHeader);
+ }
+ 
+ std::unique_ptr<network::SimpleURLLoader>
+@@ -181,11 +156,11 @@ CreateSimpleURLLoaderWithVariationsHeade
+ }
+ 
+ bool IsVariationsHeader(const std::string& header_name) {
+-  return header_name == kClientDataHeader;
++  return false;
+ }
+ 
+ bool HasVariationsHeader(const network::ResourceRequest& request) {
+-  return request.cors_exempt_headers.HasHeader(kClientDataHeader);
++  return false;
+ }
+ 
+ bool ShouldAppendVariationsHeaderForTesting(const GURL& url) {
+@@ -194,7 +169,6 @@ bool ShouldAppendVariationsHeaderForTest
+ 
+ void UpdateCorsExemptHeaderForVariations(
+     network::mojom::NetworkContextParams* params) {
+-  params->cors_exempt_header_list.push_back(kClientDataHeader);
+ }
+ 
+ }  // namespace variations
+--- a/net/base/url_util.cc
++++ b/net/base/url_util.cc
+@@ -394,27 +394,6 @@ bool HasGoogleHost(const GURL& url) {
+ }
+ 
+ bool IsGoogleHost(base::StringPiece host) {
+-  static const char* kGoogleHostSuffixes[] = {
+-      ".google.com",
+-      ".youtube.com",
+-      ".gmail.com",
+-      ".doubleclick.net",
+-      ".gstatic.com",
+-      ".googlevideo.com",
+-      ".googleusercontent.com",
+-      ".googlesyndication.com",
+-      ".google-analytics.com",
+-      ".googleadservices.com",
+-      ".googleapis.com",
+-      ".ytimg.com",
+-  };
+-  for (const char* suffix : kGoogleHostSuffixes) {
+-    // Here it's possible to get away with faster case-sensitive comparisons
+-    // because the list above is all lowercase, and a GURL's host name will
+-    // always be canonicalized to lowercase as well.
+-    if (base::EndsWith(host, suffix, base::CompareCase::SENSITIVE))
+-      return true;
+-  }
+   return false;
+ }
+ 

+ 7 - 7
patches/core/ungoogled-chromium/disable-mei-preload.patch

@@ -7,15 +7,15 @@
 
 --- a/chrome/BUILD.gn
 +++ b/chrome/BUILD.gn
-@@ -335,7 +335,6 @@ if (!is_android && !is_mac) {
-       }
+@@ -337,7 +337,6 @@ if (!is_android && !is_mac) {
+     }
  
-       data_deps += [
--        "//chrome/browser/resources/media/mei_preload:component",
-         "//third_party/widevine/cdm",
-       ]
+     data_deps += [
+-      "//chrome/browser/resources/media/mei_preload:component",
+       "//third_party/widevine/cdm",
+     ]
  
-@@ -1207,7 +1206,6 @@ if (is_win) {
+@@ -1206,7 +1205,6 @@ if (is_win) {
        ":packed_resources",
        ":swiftshader_library",
        ":widevine_cdm_library",

+ 1 - 1
patches/core/ungoogled-chromium/disable-signin.patch

@@ -2,7 +2,7 @@
 
 --- a/chrome/browser/ui/chrome_pages.cc
 +++ b/chrome/browser/ui/chrome_pages.cc
-@@ -515,23 +515,6 @@ GURL GetOSSettingsUrl(const std::string&
+@@ -519,23 +519,6 @@ GURL GetOSSettingsUrl(const std::string&
  #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
  void ShowBrowserSignin(Browser* browser,
                         signin_metrics::AccessPoint access_point) {

+ 13 - 13
patches/core/ungoogled-chromium/disable-translate.patch

@@ -1,5 +1,17 @@
 # Disables browser translation
 
+--- a/components/translate/content/renderer/translate_helper.cc
++++ b/components/translate/content/renderer/translate_helper.cc
+@@ -73,8 +73,7 @@ TranslateHelper::TranslateHelper(content
+     : content::RenderFrameObserver(render_frame),
+       world_id_(world_id),
+       extension_scheme_(extension_scheme) {
+-  translate_task_runner_ = this->render_frame()->GetTaskRunner(
+-      blink::TaskType::kInternalTranslation);
++  CancelPendingTranslation();
+ }
+ 
+ TranslateHelper::~TranslateHelper() {
 --- a/components/translate/core/browser/translate_manager.cc
 +++ b/components/translate/core/browser/translate_manager.cc
 @@ -679,8 +679,7 @@ void TranslateManager::FilterIsTranslate
@@ -12,18 +24,6 @@
      // Without an API key, translate won't work, so don't offer to translate in
      // the first place. Leave prefs::kOfferTranslateEnabled on, though, because
      // that settings syncs and we don't want to turn off translate everywhere
---- a/components/translate/content/renderer/translate_helper.cc
-+++ b/components/translate/content/renderer/translate_helper.cc
-@@ -76,8 +76,7 @@ TranslateHelper::TranslateHelper(content
-       world_id_(world_id),
-       extension_scheme_(extension_scheme),
-       binding_(this) {
--  translate_task_runner_ = this->render_frame()->GetTaskRunner(
--      blink::TaskType::kInternalTranslation);
-+  CancelPendingTranslation();
- }
- 
- TranslateHelper::~TranslateHelper() {
 --- a/components/translate/core/browser/translate_script.cc
 +++ b/components/translate/core/browser/translate_script.cc
 @@ -149,9 +149,8 @@ void TranslateScript::OnScriptFetchCompl
@@ -36,4 +36,4 @@
 +        &data_, "var securityOrigin = '';");
  
      // Load embedded translate.js.
-     base::StringPiece str =
+     data_.append(ui::ResourceBundle::GetSharedInstance().DecompressDataResource(

+ 58 - 58
patches/core/ungoogled-chromium/disable-webstore-urls.patch

@@ -1,5 +1,18 @@
 # Disables Chrome Webstore-related URLs and other internal functionality. Mainly for disabling auto updates via the Chrome Webstore.
 
+--- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
++++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
+@@ -599,10 +599,6 @@ std::vector<url::Origin> ChromeContentBr
+     GetOriginsRequiringDedicatedProcess() {
+   std::vector<url::Origin> list;
+ 
+-  // Require a dedicated process for the webstore origin.  See
+-  // https://crbug.com/939108.
+-  list.push_back(url::Origin::Create(extension_urls::GetWebstoreLaunchURL()));
+-
+   return list;
+ }
+ 
 --- a/chrome/browser/extensions/chrome_content_verifier_delegate.cc
 +++ b/chrome/browser/extensions/chrome_content_verifier_delegate.cc
 @@ -256,13 +256,7 @@ ChromeContentVerifierDelegate::GetVerify
@@ -17,17 +30,46 @@
    }
  
    return default_mode_;
---- a/extensions/common/extension_urls.cc
-+++ b/extensions/common/extension_urls.cc
-@@ -30,7 +30,7 @@ bool IsSourceFromAnExtension(const base:
+--- a/chrome/browser/extensions/extension_migrator.cc
++++ b/chrome/browser/extensions/extension_migrator.cc
+@@ -18,7 +18,9 @@ namespace extensions {
+ ExtensionMigrator::ExtensionMigrator(Profile* profile,
+                                      const std::string& old_id,
+                                      const std::string& new_id)
+-    : profile_(profile), old_id_(old_id), new_id_(new_id) {}
++    : profile_(profile), old_id_(old_id), new_id_(new_id) {
++    chrome_blank_ = GURL("chrome://blank/");
++}
  
- namespace extension_urls {
+ ExtensionMigrator::~ExtensionMigrator() {
+ }
+@@ -31,7 +33,7 @@ void ExtensionMigrator::StartLoading() {
+   if (should_have_extension) {
+     std::unique_ptr<base::DictionaryValue> entry(new base::DictionaryValue);
+     entry->SetKey(ExternalProviderImpl::kExternalUpdateUrl,
+-                  base::Value(extension_urls::GetWebstoreUpdateUrl().spec()));
++                  base::Value(chrome_blank_.spec()));
  
--const char kChromeWebstoreBaseURL[] = "https://chrome.google.com/webstore";
-+const char kChromeWebstoreBaseURL[] = "trk:09:https://chrome.google.com/webstore";
- const char kChromeWebstoreUpdateURL[] =
-     "trk:05:https://clients2.google.com/service/update2/crx";
+     prefs->SetWithoutPathExpansion(new_id_, std::move(entry));
+   }
+--- a/chrome/browser/extensions/extension_migrator.h
++++ b/chrome/browser/extensions/extension_migrator.h
+@@ -9,6 +9,7 @@
  
+ #include "base/macros.h"
+ #include "chrome/browser/extensions/external_loader.h"
++#include "url/gurl.h"
+ 
+ class Profile;
+ 
+@@ -37,6 +38,7 @@ class ExtensionMigrator : public Externa
+   Profile* profile_;
+   const std::string old_id_;
+   const std::string new_id_;
++  GURL chrome_blank_;
+ 
+   DISALLOW_COPY_AND_ASSIGN(ExtensionMigrator);
+ };
 --- a/extensions/browser/updater/extension_downloader.cc
 +++ b/extensions/browser/updater/extension_downloader.cc
 @@ -94,27 +94,18 @@ const char kNotFromWebstoreInstallSource
@@ -151,56 +193,14 @@
        return true;
      case ExtensionFetch::CREDENTIALS_OAUTH2_TOKEN:
        fetch->oauth2_attempt_count++;
---- a/chrome/browser/extensions/extension_migrator.cc
-+++ b/chrome/browser/extensions/extension_migrator.cc
-@@ -18,7 +18,9 @@ namespace extensions {
- ExtensionMigrator::ExtensionMigrator(Profile* profile,
-                                      const std::string& old_id,
-                                      const std::string& new_id)
--    : profile_(profile), old_id_(old_id), new_id_(new_id) {}
-+    : profile_(profile), old_id_(old_id), new_id_(new_id) {
-+    chrome_blank_ = GURL("chrome://blank/");
-+}
- 
- ExtensionMigrator::~ExtensionMigrator() {
- }
-@@ -31,7 +33,7 @@ void ExtensionMigrator::StartLoading() {
-   if (should_have_extension) {
-     std::unique_ptr<base::DictionaryValue> entry(new base::DictionaryValue);
-     entry->SetKey(ExternalProviderImpl::kExternalUpdateUrl,
--                  base::Value(extension_urls::GetWebstoreUpdateUrl().spec()));
-+                  base::Value(chrome_blank_.spec()));
- 
-     prefs->SetWithoutPathExpansion(new_id_, std::move(entry));
-   }
---- a/chrome/browser/extensions/extension_migrator.h
-+++ b/chrome/browser/extensions/extension_migrator.h
-@@ -9,6 +9,7 @@
- 
- #include "base/macros.h"
- #include "chrome/browser/extensions/external_loader.h"
-+#include "url/gurl.h"
- 
- class Profile;
- 
-@@ -37,6 +38,7 @@ class ExtensionMigrator : public Externa
-   Profile* profile_;
-   const std::string old_id_;
-   const std::string new_id_;
-+  GURL chrome_blank_;
+--- a/extensions/common/extension_urls.cc
++++ b/extensions/common/extension_urls.cc
+@@ -30,7 +30,7 @@ bool IsSourceFromAnExtension(const base:
  
-   DISALLOW_COPY_AND_ASSIGN(ExtensionMigrator);
- };
---- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
-+++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
-@@ -622,10 +622,6 @@ std::vector<url::Origin> ChromeContentBr
-     GetOriginsRequiringDedicatedProcess() {
-   std::vector<url::Origin> list;
+ namespace extension_urls {
  
--  // Require a dedicated process for the webstore origin.  See
--  // https://crbug.com/939108.
--  list.push_back(url::Origin::Create(extension_urls::GetWebstoreLaunchURL()));
--
-   return list;
- }
+-const char kChromeWebstoreBaseURL[] = "https://chrome.google.com/webstore";
++const char kChromeWebstoreBaseURL[] = "trk:09:https://chrome.google.com/webstore";
+ const char kChromeWebstoreUpdateURL[] =
+     "trk:05:https://clients2.google.com/service/update2/crx";
  

+ 23 - 23
patches/core/ungoogled-chromium/fix-building-without-one-click-signin.patch

@@ -1,5 +1,28 @@
 # Fix building without one click signin
 
+--- a/chrome/browser/ui/BUILD.gn
++++ b/chrome/browser/ui/BUILD.gn
+@@ -3382,8 +3382,6 @@ jumbo_static_library("ui") {
+         "views/sync/dice_bubble_sync_promo_view.h",
+         "views/sync/dice_signin_button_view.cc",
+         "views/sync/dice_signin_button_view.h",
+-        "views/sync/one_click_signin_dialog_view.cc",
+-        "views/sync/one_click_signin_dialog_view.h",
+       ]
+       deps += [ "//ui/views/window/vector_icons" ]
+     }
+--- a/chrome/browser/ui/sync/one_click_signin_links_delegate_impl.cc
++++ b/chrome/browser/ui/sync/one_click_signin_links_delegate_impl.cc
+@@ -16,9 +16,4 @@ OneClickSigninLinksDelegateImpl::OneClic
+ OneClickSigninLinksDelegateImpl::~OneClickSigninLinksDelegateImpl() {}
+ 
+ void OneClickSigninLinksDelegateImpl::OnLearnMoreLinkClicked(bool is_dialog) {
+-  NavigateParams params(browser_, GURL(chrome::kChromeSyncLearnMoreURL),
+-                        ui::PAGE_TRANSITION_LINK);
+-  params.disposition = is_dialog ? WindowOpenDisposition::NEW_WINDOW
+-                                 : WindowOpenDisposition::NEW_FOREGROUND_TAB;
+-  Navigate(&params);
+ }
 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
 +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
 @@ -329,6 +329,7 @@ void InlineSigninHelper::OnClientOAuthSu
@@ -18,26 +41,3 @@
  }
  
  void InlineSigninHelper::UntrustedSigninConfirmed(
---- a/chrome/browser/ui/sync/one_click_signin_links_delegate_impl.cc
-+++ b/chrome/browser/ui/sync/one_click_signin_links_delegate_impl.cc
-@@ -16,9 +16,4 @@ OneClickSigninLinksDelegateImpl::OneClic
- OneClickSigninLinksDelegateImpl::~OneClickSigninLinksDelegateImpl() {}
- 
- void OneClickSigninLinksDelegateImpl::OnLearnMoreLinkClicked(bool is_dialog) {
--  NavigateParams params(browser_, GURL(chrome::kChromeSyncLearnMoreURL),
--                        ui::PAGE_TRANSITION_LINK);
--  params.disposition = is_dialog ? WindowOpenDisposition::NEW_WINDOW
--                                 : WindowOpenDisposition::NEW_FOREGROUND_TAB;
--  Navigate(&params);
- }
---- a/chrome/browser/ui/BUILD.gn
-+++ b/chrome/browser/ui/BUILD.gn
-@@ -3330,8 +3330,6 @@ jumbo_split_static_library("ui") {
-         "views/sync/dice_bubble_sync_promo_view.h",
-         "views/sync/dice_signin_button_view.cc",
-         "views/sync/dice_signin_button_view.h",
--        "views/sync/one_click_signin_dialog_view.cc",
--        "views/sync/one_click_signin_dialog_view.h",
-       ]
-       deps += [ "//ui/views/window/vector_icons" ]
-     }

+ 281 - 184
patches/core/ungoogled-chromium/fix-building-without-safebrowsing.patch

@@ -1,8 +1,18 @@
 # Additional changes to Inox's fix-building-without-safebrowsing.patch
 
+--- a/chrome/browser/browser_resources.grd
++++ b/chrome/browser/browser_resources.grd
+@@ -597,7 +597,6 @@
+       </if>
+       <if expr="not is_android">
+         <include name="IDR_TAB_RANKER_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="resource_coordinator\tab_ranker\example_preprocessor_config.pb" type="BINDATA" />
+-        <include name="IDR_TAB_RANKER_PAIRWISE_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="resource_coordinator\tab_ranker\pairwise_preprocessor_config.pb" type="BINDATA" />
+       </if>
+       <if expr="chromeos">
+         <include name="IDR_SMART_DIM_20181115_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="chromeos\power\ml\smart_dim\20181115_example_preprocessor_config.pb" type="BINDATA" />
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -5220,19 +5220,7 @@ ChromeContentBrowserClient::GetSafeBrows
+@@ -4900,19 +4900,7 @@ ChromeContentBrowserClient::GetSafeBrows
      content::ResourceContext* resource_context) {
    DCHECK_CURRENTLY_ON(BrowserThread::IO);
  
@@ -43,7 +53,7 @@
  
  namespace {
  
-@@ -274,14 +270,7 @@ bool DownloadItemModel::IsMalicious() co
+@@ -284,14 +280,7 @@ bool DownloadItemModel::IsMalicious() co
  }
  
  bool DownloadItemModel::ShouldAllowDownloadFeedback() const {
@@ -58,89 +68,6 @@
  }
  
  bool DownloadItemModel::ShouldRemoveFromShelfWhenComplete() const {
---- a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc
-+++ b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc
-@@ -58,9 +58,7 @@ PasswordReuseModalWarningDialog::Passwor
-   SetLayoutManager(std::make_unique<views::FillLayout>());
- 
-   views::Label* message_body_label = new views::Label(
--      service_
--          ? service_->GetWarningDetailText(password_type)
--          : l10n_util::GetStringUTF16(IDS_PAGE_INFO_CHANGE_PASSWORD_DETAILS));
-+      l10n_util::GetStringUTF16(IDS_PAGE_INFO_CHANGE_PASSWORD_DETAILS));
-   message_body_label->SetMultiLine(true);
-   message_body_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-   message_body_label->SetHandlesTooltips(false);
---- a/chrome/browser/password_manager/chrome_password_manager_client.cc
-+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
-@@ -24,7 +24,6 @@
- #include "chrome/browser/password_manager/touch_to_fill_controller.h"
- #include "chrome/browser/prerender/prerender_contents.h"
- #include "chrome/browser/profiles/profile.h"
--#include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
- #include "chrome/browser/signin/identity_manager_factory.h"
- #include "chrome/browser/site_isolation/site_isolation_policy.h"
- #include "chrome/browser/sync/profile_sync_service_factory.h"
-@@ -90,9 +89,9 @@
- #if BUILDFLAG(FULL_SAFE_BROWSING)
- #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
- #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
-+#endif
- #include "ui/base/clipboard/clipboard.h"
- #include "ui/events/keycodes/keyboard_codes.h"
--#endif
- 
- #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
- #include "services/service_manager/public/cpp/connector.h"
-@@ -538,6 +537,7 @@ bool ChromePasswordManagerClient::IsIsol
-   return SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled();
- }
- 
-+#if BUILDFLAG(FULL_SAFE_BROWSING)
- #if defined(ON_FOCUS_PING_ENABLED) || \
-     defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
- safe_browsing::PasswordProtectionService*
-@@ -560,6 +560,7 @@ void ChromePasswordManagerClient::CheckS
-   }
- }
- #endif  // defined(ON_FOCUS_PING_ENABLED)
-+#endif // BUILDFLAG(FULL_SAFE_BROWSING)
- 
- #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
- void ChromePasswordManagerClient::CheckProtectedPasswordEntry(
-@@ -567,22 +568,9 @@ void ChromePasswordManagerClient::CheckP
-     const std::string& username,
-     const std::vector<std::string>& matching_domains,
-     bool password_field_exists) {
--  safe_browsing::PasswordProtectionService* pps =
--      GetPasswordProtectionService();
--  if (!pps)
--    return;
--
--  pps->MaybeStartProtectedPasswordEntryRequest(
--      web_contents(), web_contents()->GetLastCommittedURL(), username,
--      password_type, matching_domains, password_field_exists);
- }
- 
- void ChromePasswordManagerClient::LogPasswordReuseDetectedEvent() {
--  safe_browsing::PasswordProtectionService* pps =
--      GetPasswordProtectionService();
--  if (pps) {
--    pps->MaybeLogPasswordReuseDetectedEvent(web_contents());
--  }
- }
- #endif  // defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
- 
---- a/components/safe_browsing/common/safe_browsing.mojom
-+++ b/components/safe_browsing/common/safe_browsing.mojom
-@@ -106,7 +106,6 @@ interface ThreatReporter {
-   GetThreatDOMDetails() => (array<ThreatDOMDetailsNode> nodes);
- };
- 
--[EnableIf=full_safe_browsing]
- interface PhishingDetector {
-   // Tells the renderer to begin phishing detection for the given toplevel URL
-   // which it has started loading. Returns the serialized request proto. If
 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
 +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
 @@ -18,7 +18,6 @@
@@ -151,7 +78,7 @@
  #include "chrome/browser/sessions/session_tab_helper.h"
  #include "chrome/browser/ui/browser_dialogs.h"
  #include "chrome/common/chrome_paths.h"
-@@ -322,74 +321,6 @@ class ReadPermissionGrantImpl
+@@ -328,75 +327,6 @@ class ReadPermissionGrantImpl
    PermissionStatus status_ = PermissionStatus::GRANTED;
  };
  
@@ -192,7 +119,7 @@
 -      std::move(item), std::move(callback));
 -}
 -
--ChromeNativeFileSystemPermissionContext::SafeBrowsingResult
+-ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult
 -InterpretSafeBrowsingResult(safe_browsing::DownloadCheckResult result) {
 -  using Result = safe_browsing::DownloadCheckResult;
 -  switch (result) {
@@ -202,7 +129,7 @@
 -    case Result::UNKNOWN:
 -    case Result::SAFE:
 -    case Result::WHITELISTED_BY_POLICY:
--      return ChromeNativeFileSystemPermissionContext::SafeBrowsingResult::
+-      return ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult::
 -          kAllow;
 -
 -    case Result::DANGEROUS:
@@ -210,31 +137,32 @@
 -    case Result::DANGEROUS_HOST:
 -    case Result::POTENTIALLY_UNWANTED:
 -    case Result::BLOCKED_PASSWORD_PROTECTED:
--      return ChromeNativeFileSystemPermissionContext::SafeBrowsingResult::
+-    case Result::BLOCKED_TOO_LARGE:
+-      return ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult::
 -          kBlock;
 -
 -    // This shouldn't be returned for Native File System write checks.
 -    case Result::ASYNC_SCANNING:
 -      NOTREACHED();
--      return ChromeNativeFileSystemPermissionContext::SafeBrowsingResult::
+-      return ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult::
 -          kAllow;
 -  }
 -  NOTREACHED();
--  return ChromeNativeFileSystemPermissionContext::SafeBrowsingResult::kBlock;
+-  return ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult::kBlock;
 -}
 -
  }  // namespace
  
  ChromeNativeFileSystemPermissionContext::Grants::Grants() = default;
-@@ -666,28 +597,6 @@ void ChromeNativeFileSystemPermissionCon
-                      std::move(callback)));
+@@ -677,29 +607,6 @@ void ChromeNativeFileSystemPermissionCon
+                      process_id, frame_id, std::move(callback)));
  }
  
--void ChromeNativeFileSystemPermissionContext::PerformSafeBrowsingChecks(
+-void ChromeNativeFileSystemPermissionContext::PerformAfterWriteChecks(
 -    std::unique_ptr<content::NativeFileSystemWriteItem> item,
 -    int process_id,
 -    int frame_id,
--    base::OnceCallback<void(SafeBrowsingResult)> callback) {
+-    base::OnceCallback<void(AfterWriteCheckResult)> callback) {
 -  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 -  base::PostTask(
 -      FROM_HERE, {content::BrowserThread::UI},
@@ -242,7 +170,8 @@
 -          &DoSafeBrowsingCheckOnUIThread, process_id, frame_id, std::move(item),
 -          base::BindOnce(
 -              [](scoped_refptr<base::TaskRunner> task_runner,
--                 base::OnceCallback<void(SafeBrowsingResult result)> callback,
+-                 base::OnceCallback<void(AfterWriteCheckResult result)>
+-                     callback,
 -                 safe_browsing::DownloadCheckResult result) {
 -                task_runner->PostTask(
 -                    FROM_HERE,
@@ -257,22 +186,185 @@
      const url::Origin& origin,
 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
 +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
-@@ -155,12 +155,6 @@ class ChromeNativeFileSystemPermissionCo
+@@ -152,12 +152,6 @@ class ChromeNativeFileSystemPermissionCo
        int frame_id,
        base::OnceCallback<void(PermissionStatus)> callback) override;
  
--  void PerformSafeBrowsingChecks(
+-  void PerformAfterWriteChecks(
 -      std::unique_ptr<content::NativeFileSystemWriteItem> item,
 -      int process_id,
 -      int frame_id,
--      base::OnceCallback<void(SafeBrowsingResult)> callback) override;
+-      base::OnceCallback<void(AfterWriteCheckResult)> callback) override;
 -
-   struct Grants {
-     Grants();
-     ~Grants();
+   // Returns a snapshot of the currently granted permissions.
+   // TODO(https://crbug.com/984769): Eliminate process_id and frame_id from this
+   // method when grants stop being scoped to a frame.
+--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
++++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -24,7 +24,6 @@
+ #include "chrome/browser/password_manager/password_store_factory.h"
+ #include "chrome/browser/prerender/prerender_contents.h"
+ #include "chrome/browser/profiles/profile.h"
+-#include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
+ #include "chrome/browser/signin/identity_manager_factory.h"
+ #include "chrome/browser/site_isolation/site_isolation_policy.h"
+ #include "chrome/browser/sync/profile_sync_service_factory.h"
+@@ -91,11 +90,11 @@
+ #if BUILDFLAG(FULL_SAFE_BROWSING)
+ #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+ #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
++#endif
+ #include "ui/base/clipboard/clipboard.h"
+ #include "ui/events/keycodes/keyboard_codes.h"
+ #include "services/service_manager/public/cpp/connector.h"
+ #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h"
+-#endif
+ 
+ #if defined(OS_ANDROID)
+ #include "chrome/browser/android/preferences/preferences_launcher.h"
+@@ -539,6 +538,7 @@ bool ChromePasswordManagerClient::IsIsol
+   return SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled();
+ }
+ 
++#if BUILDFLAG(FULL_SAFE_BROWSING)
+ #if defined(ON_FOCUS_PING_ENABLED) || \
+     defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+ safe_browsing::PasswordProtectionService*
+@@ -561,6 +561,7 @@ void ChromePasswordManagerClient::CheckS
+   }
+ }
+ #endif  // defined(ON_FOCUS_PING_ENABLED)
++#endif // BUILDFLAG(FULL_SAFE_BROWSING)
+ 
+ #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+ void ChromePasswordManagerClient::CheckProtectedPasswordEntry(
+@@ -568,24 +569,11 @@ void ChromePasswordManagerClient::CheckP
+     const std::string& username,
+     const std::vector<std::string>& matching_domains,
+     bool password_field_exists) {
+-  safe_browsing::PasswordProtectionService* pps =
+-      GetPasswordProtectionService();
+-  if (!pps)
+-    return;
+-
+-  pps->MaybeStartProtectedPasswordEntryRequest(
+-      web_contents(), web_contents()->GetLastCommittedURL(), username,
+-      password_type, matching_domains, password_field_exists);
+ }
+ #endif  // defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+ 
+ #if defined(SYNC_PASSWORD_REUSE_WARNING_ENABLED)
+ void ChromePasswordManagerClient::LogPasswordReuseDetectedEvent() {
+-  safe_browsing::PasswordProtectionService* pps =
+-      GetPasswordProtectionService();
+-  if (pps) {
+-    pps->MaybeLogPasswordReuseDetectedEvent(web_contents());
+-  }
+ }
+ #endif  // defined(SYNC_PASSWORD_REUSE_WARNING_ENABLED)
+ 
+@@ -692,7 +680,9 @@ void ChromePasswordManagerClient::OnInpu
+   if (key_event.windows_key_code == (ui::VKEY_V & 0x1f)) {
+     OnPaste();
+   } else {
++#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+     password_reuse_detection_manager_.OnKeyPressed(key_event.text);
++#endif  // defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+   }
+ #endif  // defined(OS_ANDROID)
+ }
+@@ -806,9 +796,11 @@ void ChromePasswordManagerClient::OnPast
+   base::string16 text;
+   clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, &text);
+   was_on_paste_called_ = true;
++#if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+   password_reuse_detection_manager_.OnPaste(std::move(text));
++#endif  // defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
+ }
+-#endif
++#endif  // !defined(OS_ANDROID)
+ 
+ gfx::RectF ChromePasswordManagerClient::GetBoundsInScreenSpace(
+     const gfx::RectF& bounds) {
+--- a/chrome/browser/password_manager/chrome_password_manager_client.h
++++ b/chrome/browser/password_manager/chrome_password_manager_client.h
+@@ -181,7 +181,7 @@ class ChromePasswordManagerClient
+   void OnImeTextCommittedEvent(const base::string16& text_str) override;
+ #endif  // defined(OS_ANDROID)
+ 
+-#if defined(ON_FOCUS_PING_ENABLED)
++#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
+   void CheckSafeBrowsingReputation(const GURL& form_action,
+                                    const GURL& frame_url) override;
+   safe_browsing::PasswordProtectionService* GetPasswordProtectionService()
+--- a/chrome/browser/resource_coordinator/tab_ranker/tab_score_predictor.cc
++++ b/chrome/browser/resource_coordinator/tab_ranker/tab_score_predictor.cc
+@@ -310,17 +310,6 @@ void TabScorePredictor::LazyInitialize()
+     DCHECK_EQ(preprocessor_config_->feature_indices().size(),
+               static_cast<std::size_t>(tfnative_model::FEATURES_SIZE));
+   }
+-
+-  if (type_ == kPairwiseScorer) {
+-    if (!preprocessor_config_)
+-      preprocessor_config_ = LoadExamplePreprocessorConfig(
+-          IDR_TAB_RANKER_PAIRWISE_EXAMPLE_PREPROCESSOR_CONFIG_PB);
+-    if (!pairwise_alloc_)
+-      pairwise_alloc_ = std::make_unique<pairwise_model::FixedAllocations>();
+-    DCHECK(preprocessor_config_);
+-    DCHECK_EQ(preprocessor_config_->feature_indices().size(),
+-              static_cast<std::size_t>(pairwise_model::FEATURES_SIZE));
+-  }
+ }
+ 
+ // Simply returns the frecency_score in the TabFeatures.
+--- a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc
++++ b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc
+@@ -147,9 +147,7 @@ PasswordReuseModalWarningDialog::Passwor
+     service_->AddObserver(this);
+ 
+   views::Label* message_body_label = CreateMessageBodyLabel(
+-      service_
+-          ? service_->GetWarningDetailText(password_type)
+-          : l10n_util::GetStringUTF16(IDS_PAGE_INFO_CHANGE_PASSWORD_DETAILS));
++      l10n_util::GetStringUTF16(IDS_PAGE_INFO_CHANGE_PASSWORD_DETAILS));
+ 
+   if (password_type.account_type() ==
+       ReusedPasswordAccountType::SAVED_PASSWORD) {
+--- a/components/password_manager/content/browser/content_password_manager_driver.cc
++++ b/components/password_manager/content/browser/content_password_manager_driver.cc
+@@ -296,7 +296,7 @@ void ContentPasswordManagerDriver::ShowT
+ void ContentPasswordManagerDriver::CheckSafeBrowsingReputation(
+     const GURL& form_action,
+     const GURL& frame_url) {
+-#if defined(ON_FOCUS_PING_ENABLED)
++#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
+   client_->CheckSafeBrowsingReputation(form_action, frame_url);
+ #endif
+ }
+--- a/components/password_manager/core/browser/password_manager_client.h
++++ b/components/password_manager/core/browser/password_manager_client.h
+@@ -273,7 +273,7 @@ class PasswordManagerClient {
+   // Returns the current best guess as to the page's display language.
+   virtual std::string GetPageLanguage() const;
+ 
+-#if defined(ON_FOCUS_PING_ENABLED)
++#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
+   // Return the PasswordProtectionService associated with this instance.
+   virtual safe_browsing::PasswordProtectionService*
+   GetPasswordProtectionService() const = 0;
+--- a/components/safe_browsing/common/safe_browsing.mojom
++++ b/components/safe_browsing/common/safe_browsing.mojom
+@@ -127,7 +127,6 @@ enum PhishingDetectorResult {
+   INVALID_SCORE = 4,
+ };
+ 
+-[EnableIf=full_safe_browsing]
+ interface PhishingDetector {
+   // Tells the renderer to begin phishing detection for the given toplevel URL
+   // which it has started loading. Returns the serialized request proto and a
 --- a/content/browser/native_file_system/native_file_system_file_writer_impl.cc
 +++ b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
-@@ -91,8 +91,7 @@ NativeFileSystemFileWriterImpl::NativeFi
+@@ -93,8 +93,7 @@ NativeFileSystemFileWriterImpl::NativeFi
                                   url,
                                   handle_state,
                                   /*is_directory=*/false),
@@ -282,22 +374,22 @@
    DCHECK_EQ(swap_url.type(), url.type());
  }
  
-@@ -296,48 +295,7 @@ void NativeFileSystemFileWriterImpl::Clo
+@@ -302,50 +301,7 @@ void NativeFileSystemFileWriterImpl::Clo
    // swap file even if the writer was destroyed at that point.
    state_ = State::kClosePending;
  
--  if (!require_safe_browsing_check() || !manager()->permission_context()) {
--    DidPassSafeBrowsingCheck(std::move(callback));
+-  if (!RequireAfterWriteCheck() || !manager()->permission_context()) {
+-    DidPassAfterWriteCheck(std::move(callback));
 -    return;
 -  }
 -
 -  ComputeHashForSwapFile(base::BindOnce(
--      &NativeFileSystemFileWriterImpl::DoSafeBrowsingCheck,
+-      &NativeFileSystemFileWriterImpl::DoAfterWriteCheck,
 -      weak_factory_.GetWeakPtr(), swap_url().path(), std::move(callback)));
 -}
 -
 -// static
--void NativeFileSystemFileWriterImpl::DoSafeBrowsingCheck(
+-void NativeFileSystemFileWriterImpl::DoAfterWriteCheck(
 -    base::WeakPtr<NativeFileSystemFileWriterImpl> file_writer,
 -    const base::FilePath& swap_path,
 -    NativeFileSystemFileWriterImpl::CloseCallback callback,
@@ -316,6 +408,8 @@
 -    return;
 -  }
 -
+-  DCHECK_CALLED_ON_VALID_SEQUENCE(file_writer->sequence_checker_);
+-
 -  auto item = std::make_unique<NativeFileSystemWriteItem>();
 -  item->target_file_path = file_writer->url().path();
 -  item->full_path = file_writer->swap_url().path();
@@ -323,48 +417,48 @@
 -  item->size = size;
 -  item->frame_url = file_writer->context().url;
 -  item->has_user_gesture = file_writer->has_transient_user_activation_;
--  file_writer->manager()->permission_context()->PerformSafeBrowsingChecks(
+-  file_writer->manager()->permission_context()->PerformAfterWriteChecks(
 -      std::move(item), file_writer->context().process_id,
 -      file_writer->context().frame_id,
--      base::BindOnce(&NativeFileSystemFileWriterImpl::DidSafeBrowsingCheck,
+-      base::BindOnce(&NativeFileSystemFileWriterImpl::DidAfterWriteCheck,
 -                     file_writer, swap_path, std::move(callback)));
-+  DidPassSafeBrowsingCheck(std::move(callback));
++  DidPassAfterWriteCheck(std::move(callback));
  }
  
  // static
 --- a/content/browser/native_file_system/native_file_system_file_writer_impl.h
 +++ b/content/browser/native_file_system/native_file_system_file_writer_impl.h
-@@ -88,15 +88,8 @@ class CONTENT_EXPORT NativeFileSystemFil
+@@ -80,15 +80,8 @@ class CONTENT_EXPORT NativeFileSystemFil
                  bool complete);
    void TruncateImpl(uint64_t length, TruncateCallback callback);
    void CloseImpl(CloseCallback callback);
 -  // The following two methods are static, because they need to be invoked to
-+  // The following method is static because it needs to be invoked to
++  // The following method is static because they need to be invoked to
    // perform cleanup even if the writer was deleted before they were invoked.
--  static void DoSafeBrowsingCheck(
+-  static void DoAfterWriteCheck(
 -      base::WeakPtr<NativeFileSystemFileWriterImpl> file_writer,
 -      const base::FilePath& swap_path,
 -      NativeFileSystemFileWriterImpl::CloseCallback callback,
 -      base::File::Error hash_result,
 -      const std::string& hash,
 -      int64_t size);
-   static void DidSafeBrowsingCheck(
+   static void DidAfterWriteCheck(
        base::WeakPtr<NativeFileSystemFileWriterImpl> file_writer,
        const base::FilePath& swap_path,
-@@ -109,7 +102,7 @@ class CONTENT_EXPORT NativeFileSystemFil
+@@ -101,7 +94,7 @@ class CONTENT_EXPORT NativeFileSystemFil
  
-   // Safe browsing checks only apply to native local paths.
-   bool require_safe_browsing_check() {
+   // After write checks only apply to native local paths.
+   bool RequireAfterWriteCheck() const {
 -    return url().type() == storage::kFileSystemTypeNativeLocal;
 +    return false;
    }
  
    // Quarantine checks only apply to native local paths.
-@@ -149,10 +142,6 @@ class CONTENT_EXPORT NativeFileSystemFil
+@@ -141,10 +134,6 @@ class CONTENT_EXPORT NativeFileSystemFil
  
    bool skip_quarantine_check_for_testing_ = false;
  
--  // Keeps track of user activation state at creation time for SafeBrowsing
+-  // Keeps track of user activation state at creation time for after write
 -  // checks.
 -  bool has_transient_user_activation_ = false;
 -
@@ -376,79 +470,82 @@
 @@ -95,13 +95,6 @@ class NativeFileSystemPermissionContext
        base::OnceCallback<void(SensitiveDirectoryResult)> callback) = 0;
  
-   enum class SafeBrowsingResult { kAllow, kBlock };
--  // Runs a recently finished write operation through Safe Browsing code to
--  // determine if the write should be allowed or blocked.
--  virtual void PerformSafeBrowsingChecks(
+   enum class AfterWriteCheckResult { kAllow, kBlock };
+-  // Runs a recently finished write operation through checks such as malware
+-  // or other security checks to determine if the write should be allowed.
+-  virtual void PerformAfterWriteChecks(
 -      std::unique_ptr<NativeFileSystemWriteItem> item,
 -      int process_id,
 -      int frame_id,
--      base::OnceCallback<void(SafeBrowsingResult)> callback) = 0;
+-      base::OnceCallback<void(AfterWriteCheckResult)> callback) = 0;
  
    // Returns whether the given |origin| is allowed to ask for write access.
    // This is used to block save file dialogs from being shown
---- a/chrome/browser/browser_resources.grd
-+++ b/chrome/browser/browser_resources.grd
-@@ -604,7 +604,6 @@
-       </if>
-       <if expr="not is_android">
-         <include name="IDR_TAB_RANKER_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="resource_coordinator\tab_ranker\example_preprocessor_config.pb" type="BINDATA" />
--        <include name="IDR_TAB_RANKER_PAIRWISE_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="resource_coordinator\tab_ranker\pairwise_preprocessor_config.pb" type="BINDATA" />
-       </if>
-       <if expr="chromeos">
-         <include name="IDR_SMART_DIM_20181115_EXAMPLE_PREPROCESSOR_CONFIG_PB" file="chromeos\power\ml\smart_dim\20181115_example_preprocessor_config.pb" type="BINDATA" />
---- a/chrome/browser/resource_coordinator/tab_ranker/tab_score_predictor.cc
-+++ b/chrome/browser/resource_coordinator/tab_ranker/tab_score_predictor.cc
-@@ -310,17 +310,6 @@ void TabScorePredictor::LazyInitialize()
-     DCHECK_EQ(preprocessor_config_->feature_indices().size(),
-               static_cast<std::size_t>(tfnative_model::FEATURES_SIZE));
-   }
--
--  if (type_ == kPairwiseScorer) {
--    if (!preprocessor_config_)
--      preprocessor_config_ = LoadExamplePreprocessorConfig(
--          IDR_TAB_RANKER_PAIRWISE_EXAMPLE_PREPROCESSOR_CONFIG_PB);
--    if (!pairwise_alloc_)
--      pairwise_alloc_ = std::make_unique<pairwise_model::FixedAllocations>();
--    DCHECK(preprocessor_config_);
--    DCHECK_EQ(preprocessor_config_->feature_indices().size(),
--              static_cast<std::size_t>(pairwise_model::FEATURES_SIZE));
--  }
- }
+--- a/chrome/browser/ui/views/download/download_item_view.cc
++++ b/chrome/browser/ui/views/download/download_item_view.cc
+@@ -1059,6 +1059,7 @@ void DownloadItemView::ShowDeepScanningD
+   deep_scanning_label_ = AddChildView(std::move(deep_scanning_label));
+   deep_scanning_label_->SetSize(AdjustTextAndGetSize(deep_scanning_label_));
  
- // Simply returns the frecency_score in the TabFeatures.
---- a/chrome/browser/password_manager/chrome_password_manager_client.h
-+++ b/chrome/browser/password_manager/chrome_password_manager_client.h
-@@ -176,7 +176,7 @@ class ChromePasswordManagerClient
-           saving_flow_recorder);
- #endif  // defined(OS_ANDROID)
++#if BUILDFLAG(FULL_SAFE_BROWSING)
+   int delay_delivery = g_browser_process->local_state()->GetInteger(
+       prefs::kDelayDeliveryUntilVerdict);
+   if (delay_delivery != safe_browsing::DELAY_DOWNLOADS &&
+@@ -1070,6 +1071,9 @@ void DownloadItemView::ShowDeepScanningD
+   } else {
+     open_button_->SetEnabled(false);
+   }
++#else
++  open_button_->SetEnabled(false);
++#endif  // BUILDFLAG(FULL_SAFE_BROWSING)
  
--#if defined(ON_FOCUS_PING_ENABLED)
-+#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
-   void CheckSafeBrowsingReputation(const GURL& form_action,
-                                    const GURL& frame_url) override;
-   safe_browsing::PasswordProtectionService* GetPasswordProtectionService()
---- a/components/password_manager/core/browser/password_manager_client.h
-+++ b/components/password_manager/core/browser/password_manager_client.h
-@@ -269,7 +269,7 @@ class PasswordManagerClient {
-   // Returns the current best guess as to the page's display language.
-   virtual std::string GetPageLanguage() const;
+   file_name_label_->SetVisible(false);
+   status_label_->SetVisible(false);
+@@ -1357,6 +1361,8 @@ base::string16 DownloadItemView::ElidedF
+ }
  
--#if defined(ON_FOCUS_PING_ENABLED)
-+#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
-   // Return the PasswordProtectionService associated with this instance.
-   virtual safe_browsing::PasswordProtectionService*
-   GetPasswordProtectionService() const = 0;
---- a/components/password_manager/content/browser/content_password_manager_driver.cc
-+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
-@@ -313,7 +313,7 @@ void ContentPasswordManagerDriver::ShowT
- void ContentPasswordManagerDriver::CheckSafeBrowsingReputation(
-     const GURL& form_action,
-     const GURL& frame_url) {
--#if defined(ON_FOCUS_PING_ENABLED)
-+#if defined(ON_FOCUS_PING_ENABLED) && BUILDFLAG(FULL_SAFE_BROWSING)
-   client_->CheckSafeBrowsingReputation(form_action, frame_url);
- #endif
+ void DownloadItemView::OpenDownloadDuringAsyncScanning() {
++#if BUILDFLAG(FULL_SAFE_BROWSING)
+   model_->CompleteSafeBrowsingScan();
++#endif
+   should_open_while_scanning_ = true;
+ }
+--- a/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop.cc
++++ b/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop.cc
+@@ -36,34 +36,4 @@ void HandleOnPerformDrop(
+     content::WebContents* web_contents,
+     const content::DropData& drop_data,
+     content::WebContentsViewDelegate::DropCompletionCallback callback) {
+-  safe_browsing::DeepScanningDialogDelegate::Data data;
+-  Profile* profile =
+-      Profile::FromBrowserContext(web_contents->GetBrowserContext());
+-  if (!safe_browsing::DeepScanningDialogDelegate::IsEnabled(
+-          profile, web_contents->GetLastCommittedURL(), &data)) {
+-    std::move(callback).Run(
+-        content::WebContentsViewDelegate::DropCompletionResult::kContinue);
+-    return;
+-  }
+-
+-  // Collect the data that needs to be scanned.
+-  if (!drop_data.url_title.empty())
+-    data.text.push_back(drop_data.url_title);
+-  if (!drop_data.text.is_null())
+-    data.text.push_back(drop_data.text.string());
+-  if (!drop_data.html.is_null())
+-    data.text.push_back(drop_data.html.string());
+-  if (!drop_data.file_contents.empty())
+-    data.text.push_back(base::UTF8ToUTF16(drop_data.file_contents));
+-
+-  for (const auto& file : drop_data.filenames)
+-    data.paths.push_back(file.path);
+-
+-  // TODO(crbug.com/1008040): how to handle drop_data.file_system_files?
+-  // These are URLs that use the filesystem: schema.  Support for this API
+-  // is unclear.
+-
+-  safe_browsing::DeepScanningDialogDelegate::ShowForWebContents(
+-      web_contents, std::move(data),
+-      base::BindOnce(&DeepScanCompletionCallback, std::move(callback)));
  }
 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
 +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc

File diff suppressed because it is too large
+ 212 - 236
patches/core/ungoogled-chromium/remove-unused-preferences-fields.patch


+ 15 - 21
patches/core/ungoogled-chromium/use-local-devtools-files.patch

@@ -5,19 +5,19 @@
 
 --- a/third_party/blink/renderer/devtools/BUILD.gn
 +++ b/third_party/blink/renderer/devtools/BUILD.gn
-@@ -1290,10 +1290,8 @@ action("generate_devtools_grd") {
-       devtools_embedder_scripts +
-       [ "$resources_out_dir/devtools_extension_api.js" ]
+@@ -1621,11 +1621,9 @@ if (!external_devtools_frontend) {
+           "$resources_out_dir/InspectorBackendCommands.js",
+         ]
  
--  # Bundle remote modules in ChromeOS.
--  if (is_chromeos) {
--    grd_files += generated_remote_modules + devtools_emulated_devices_images
--  }
-+  # Always bundle remote modules.
-+  grd_files += generated_remote_modules + devtools_emulated_devices_images
+-    # Bundle remote modules in ChromeOS.
+-    if (is_chromeos) {
++    # Always bundle remote modules.
+       grd_files += generated_remote_modules + devtools_emulated_devices_images +
+                    lighthouse_locale_files
+-    }
  
-   inputs = grd_files + devtools_image_files
-   outfile = "$root_gen_dir/devtools/devtools_resources.grd"
+     inputs = grd_files + devtools_image_files
+     outfile = "$root_gen_dir/devtools/devtools_resources.grd"
 --- 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 @@
@@ -30,7 +30,7 @@
  }
 --- a/third_party/blink/renderer/devtools/front_end/devtools_app.json
 +++ b/third_party/blink/renderer/devtools/front_end/devtools_app.json
-@@ -4,21 +4,21 @@
+@@ -4,23 +4,23 @@
      { "name": "inspector_main", "type": "autostart" },
      { "name": "mobile_throttling", "type": "autostart" },
  
@@ -39,7 +39,10 @@
      { "name": "animation" },
      { "name": "audits" },
      { "name": "browser_debugger" },
+     { "name": "css_overview" },
      { "name": "cookie_table" },
+-    { "name": "dagre_layout", "type": "remote" },
++    { "name": "dagre_layout" },
      { "name": "devices" },
      { "name": "elements" },
 -    { "name": "emulated_devices" , "type": "remote" },
@@ -66,15 +69,6 @@
      { "name": "color_picker" },
      { "name": "console" },
      { "name": "coverage" },
-@@ -41,7 +41,7 @@
-     { "name": "snippets" },
-     { "name": "source_frame" },
-     { "name": "sources" },
--    { "name": "terminal", "type": "remote" },
-+    { "name": "terminal" },
-     { "name": "text_editor" },
-     { "name": "workspace_diff" },
-     { "name": "protocol_monitor"}
 --- a/third_party/blink/renderer/devtools/front_end/worker_app.json
 +++ b/third_party/blink/renderer/devtools/front_end/worker_app.json
 @@ -10,7 +10,7 @@

+ 167 - 168
patches/extra/bromite/fingerprinting-flags-client-rects-and-measuretext.patch

@@ -7,17 +7,27 @@
 #
 # Unlike the latest Bromite patch, it was chosen to not regenerate the noise value each time the value is read to prevent potential efficiency issues with the load on the RNG.
 
+--- a/chrome/browser/BUILD.gn
++++ b/chrome/browser/BUILD.gn
+@@ -2146,6 +2146,7 @@ jumbo_static_library("browser") {
+     "//third_party/metrics_proto",
+     "//third_party/re2",
+     "//third_party/smhasher:cityhash",
++    "//third_party/ungoogled:switches",
+     "//third_party/webrtc_overrides",
+     "//third_party/webrtc_overrides:init_webrtc",
+     "//third_party/widevine/cdm:buildflags",
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -147,6 +147,7 @@
+@@ -148,6 +148,7 @@
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/common/forcedark/forcedark_switches.h"
  #include "third_party/leveldatabase/leveldb_features.h"
 +#include "third_party/ungoogled/ungoogled_switches.h"
+ #include "ui/accessibility/accessibility_features.h"
  #include "ui/accessibility/accessibility_switches.h"
  #include "ui/base/ui_base_features.h"
- #include "ui/base/ui_base_switches.h"
-@@ -1400,6 +1401,14 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1461,6 +1462,14 @@ const FeatureEntry kFeatureEntries[] = {
       "Force punycode hostnames",
       "Force punycode in hostnames instead of Unicode when displaying Internationalized Domain Names (IDNs).",
       kOsAll, SINGLE_VALUE_TYPE("force-punycode-hostnames")},
@@ -32,28 +42,77 @@
      {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
       flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
       SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},
+--- a/content/browser/BUILD.gn
++++ b/content/browser/BUILD.gn
+@@ -205,6 +205,7 @@ jumbo_source_set("browser") {
+     "//third_party/libyuv",
+     "//third_party/re2",
+     "//third_party/sqlite",
++    "//third_party/ungoogled:switches",
+     "//third_party/webrtc/modules/desktop_capture:primitives",
+     "//third_party/webrtc/rtc_base:rtc_base",
+     "//third_party/zlib",
+--- a/content/browser/renderer_host/render_process_host_impl.cc
++++ b/content/browser/renderer_host/render_process_host_impl.cc
+@@ -220,6 +220,7 @@
+ #include "third_party/blink/public/common/page/launching_process_state.h"
+ #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
+ #include "third_party/blink/public/public_buildflags.h"
++#include "third_party/ungoogled/ungoogled_switches.h"
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "ui/accessibility/accessibility_switches.h"
+ #include "ui/base/ui_base_switches.h"
+@@ -3037,6 +3038,8 @@ void RenderProcessHostImpl::PropagateBro
+     switches::kEnableWebGLImageChromium,
+     switches::kEnableWebVR,
+     switches::kFileUrlPathAlias,
++    switches::kFingerprintingClientRectsNoise,
++    switches::kFingerprintingCanvasMeasureTextNoise,
+     switches::kForceDeviceScaleFactor,
+     switches::kForceDisableWebRtcApmInAudioService,
+     switches::kForceDisplayColorProfile,
+--- a/content/child/BUILD.gn
++++ b/content/child/BUILD.gn
+@@ -123,6 +123,7 @@ target(link_target_type, "child") {
+     "//third_party/blink/public/common",
+     "//third_party/blink/public/strings",
+     "//third_party/ced",
++    "//third_party/ungoogled:switches",
+     "//third_party/zlib/google:compression_utils",
+     "//ui/base",
+     "//ui/events/blink",
 --- a/content/child/runtime_features.cc
 +++ b/content/child/runtime_features.cc
-@@ -23,6 +23,7 @@
- #include "services/network/public/cpp/features.h"
+@@ -24,6 +24,7 @@
+ #include "services/network/public/cpp/network_switches.h"
  #include "third_party/blink/public/common/features.h"
  #include "third_party/blink/public/platform/web_runtime_features.h"
 +#include "third_party/ungoogled/ungoogled_switches.h"
+ #include "ui/accessibility/accessibility_features.h"
  #include "ui/base/ui_base_features.h"
  #include "ui/events/blink/blink_features.h"
- #include "ui/gfx/switches.h"
-@@ -461,6 +462,11 @@ void SetIndividualRuntimeFeatures(
-     WebRuntimeFeatures::EnableAllowSyncXHRInPageDismissal(true);
-   }
- 
-+  WebRuntimeFeatures::EnableFingerprintingClientRectsNoise(
-+      command_line.HasSwitch(switches::kFingerprintingClientRectsNoise));
-+  WebRuntimeFeatures::EnableFingerprintingCanvasMeasureTextNoise(
-+      command_line.HasSwitch(switches::kFingerprintingCanvasMeasureTextNoise));
-+
-   WebRuntimeFeatures::EnableAutoplayIgnoresWebAudio(
-       base::FeatureList::IsEnabled(media::kAutoplayIgnoreWebAudio));
- 
+@@ -439,6 +440,10 @@ void SetRuntimeFeaturesFromCommandLine(c
+        switches::kEnableAccessibilityObjectModel, true},
+       {wrf::EnableAllowSyncXHRInPageDismissal,
+        switches::kAllowSyncXHRInPageDismissal, true},
++      {wrf::EnableFingerprintingClientRectsNoise,
++       switches::kFingerprintingClientRectsNoise, true},
++      {wrf::EnableFingerprintingCanvasMeasureTextNoise,
++       switches::kFingerprintingCanvasMeasureTextNoise, true},
+   };
+   for (const auto& mapping : switchToFeatureMapping) {
+     if (command_line.HasSwitch(mapping.switch_name))
+--- a/third_party/blink/public/platform/web_runtime_features.h
++++ b/third_party/blink/public/platform/web_runtime_features.h
+@@ -229,6 +229,8 @@ class WebRuntimeFeatures {
+   BLINK_PLATFORM_EXPORT static void EnableMergeBlockingNonBlockingPools(bool);
+   BLINK_PLATFORM_EXPORT static void EnableGetDisplayMedia(bool);
+   BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
++  BLINK_PLATFORM_EXPORT static void EnableFingerprintingClientRectsNoise(bool);
++  BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasMeasureTextNoise(bool);
+   BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool);
+   BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool);
+   BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool);
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
 @@ -35,6 +35,7 @@
@@ -64,23 +123,7 @@
  #include "base/time/time.h"
  #include "cc/input/overscroll_behavior.h"
  #include "cc/input/scroll_snap_data.h"
-@@ -1196,6 +1197,15 @@ Document::Document(const DocumentInit& i
- #ifndef NDEBUG
-   liveDocumentSet().insert(this);
- #endif
-+
-+  if (RuntimeEnabledFeatures::FingerprintingClientRectsNoiseEnabled()) {
-+    // Precompute -0.0003% to 0.0003% noise factor for get*ClientRect*() fingerprinting
-+    noise_factor_x_ = 1 + (base::RandDouble() - 0.5) * 0.000003;
-+    noise_factor_y_ = 1 + (base::RandDouble() - 0.5) * 0.000003;
-+  } else {
-+    noise_factor_x_ = 1;
-+    noise_factor_y_ = 1;
-+  }
- }
- 
- Document::~Document() {
-@@ -1224,6 +1234,14 @@ Range* Document::CreateRangeAdjustedToTr
+@@ -1236,6 +1237,14 @@ Range* Document::CreateRangeAdjustedToTr
                                       Position::BeforeNode(*shadow_host));
  }
  
@@ -95,9 +138,25 @@
  SelectorQueryCache& Document::GetSelectorQueryCache() {
    if (!selector_query_cache_)
      selector_query_cache_ = std::make_unique<SelectorQueryCache>();
+@@ -2791,6 +2800,15 @@ void Document::UpdateStyleAndLayoutTree(
+ #if DCHECK_IS_ON()
+   AssertLayoutTreeUpdated(*this);
+ #endif
++
++  if (RuntimeEnabledFeatures::FingerprintingClientRectsNoiseEnabled()) {
++    // Precompute -0.0003% to 0.0003% noise factor for get*ClientRect*() fingerprinting
++    noise_factor_x_ = 1 + (base::RandDouble() - 0.5) * 0.000003;
++    noise_factor_y_ = 1 + (base::RandDouble() - 0.5) * 0.000003;
++  } else {
++    noise_factor_x_ = 1;
++    noise_factor_y_ = 1;
++  }
+ }
+ 
+ void Document::UpdateActiveStyle() {
 --- a/third_party/blink/renderer/core/dom/document.h
 +++ b/third_party/blink/renderer/core/dom/document.h
-@@ -408,6 +408,10 @@ class CORE_EXPORT Document : public Cont
+@@ -414,6 +414,10 @@ class CORE_EXPORT Document : public Cont
      has_xml_declaration_ = has_xml_declaration ? 1 : 0;
    }
  
@@ -108,7 +167,7 @@
    String visibilityState() const;
    bool IsPageVisible() const;
    bool hidden() const;
-@@ -1903,6 +1907,9 @@ class CORE_EXPORT Document : public Cont
+@@ -1934,6 +1938,9 @@ class CORE_EXPORT Document : public Cont
  
    base::ElapsedTimer start_time_;
  
@@ -120,7 +179,7 @@
    HeapVector<Member<ScriptElementBase>> current_script_stack_;
 --- a/third_party/blink/renderer/core/dom/element.cc
 +++ b/third_party/blink/renderer/core/dom/element.cc
-@@ -1630,6 +1630,11 @@ DOMRectList* Element::getClientRects() {
+@@ -1877,6 +1877,11 @@ DOMRectList* Element::getClientRects() {
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatQuadsForScrollAndAbsoluteZoom(
        quads, *element_layout_object);
@@ -132,7 +191,7 @@
    return DOMRectList::Create(quads);
  }
  
-@@ -1647,6 +1652,9 @@ DOMRect* Element::getBoundingClientRect(
+@@ -1894,6 +1899,9 @@ DOMRect* Element::getBoundingClientRect(
    DCHECK(element_layout_object);
    GetDocument().AdjustFloatRectForScrollAndAbsoluteZoom(result,
                                                          *element_layout_object);
@@ -167,109 +226,47 @@
  }
  
  // TODO(editing-dev): We should make
---- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
-+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
-@@ -677,6 +677,12 @@
-       name: "FileSystem",
-       status: "stable",
-     },
-+    {
-+      name: "FingerprintingClientRectsNoise",
-+    },
-+    {
-+      name: "FingerprintingCanvasMeasureTextNoise",
-+    },
-     // FirstContentfulPaintPlusPlus enables the Largest Text Paint metric, Last
-     // Text Paint metric, Largest Image Paint metric and Last Image Paint
-     // metric. See also: http://bit.ly/fcp_plus_plus
---- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-@@ -722,4 +722,12 @@ void WebRuntimeFeatures::EnableAccelerat
-   RuntimeEnabledFeatures::SetAcceleratedSmallCanvasesEnabled(enable);
+--- a/third_party/blink/renderer/core/html/canvas/text_metrics.cc
++++ b/third_party/blink/renderer/core/html/canvas/text_metrics.cc
+@@ -54,6 +54,24 @@ TextMetrics::TextMetrics(const Font& fon
+   Update(font, direction, baseline, align, text);
  }
  
-+void WebRuntimeFeatures::EnableFingerprintingClientRectsNoise(bool enable) {
-+  RuntimeEnabledFeatures::SetFingerprintingClientRectsNoiseEnabled(enable);
-+}
++void TextMetrics::Shuffle(const double factor) {
++  // x-direction
++  width_ *= factor;
++  actual_bounding_box_left_ *= factor;
++  actual_bounding_box_right_ *= factor;
 +
-+void WebRuntimeFeatures::EnableFingerprintingCanvasMeasureTextNoise(bool enable) {
-+  RuntimeEnabledFeatures::SetFingerprintingCanvasMeasureTextNoiseEnabled(enable);
++  // y-direction
++  font_bounding_box_ascent_ *= factor;
++  font_bounding_box_descent_ *= factor;
++  actual_bounding_box_ascent_ *= factor;
++  actual_bounding_box_descent_ *= factor;
++  em_height_ascent_ *= factor;
++  em_height_descent_ *= factor;
++  baselines_->setAlphabetic(baselines_->alphabetic() * factor);
++  baselines_->setHanging(baselines_->hanging() * factor);
++  baselines_->setIdeographic(baselines_->ideographic() * factor);
 +}
 +
- }  // namespace blink
---- a/third_party/blink/public/platform/web_runtime_features.h
-+++ b/third_party/blink/public/platform/web_runtime_features.h
-@@ -228,6 +228,8 @@ class WebRuntimeFeatures {
-   BLINK_PLATFORM_EXPORT static void EnableMergeBlockingNonBlockingPools(bool);
-   BLINK_PLATFORM_EXPORT static void EnableGetDisplayMedia(bool);
-   BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
-+  BLINK_PLATFORM_EXPORT static void EnableFingerprintingClientRectsNoise(bool);
-+  BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasMeasureTextNoise(bool);
-   BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool);
-   BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool);
-   BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool);
---- a/chrome/browser/BUILD.gn
-+++ b/chrome/browser/BUILD.gn
-@@ -2202,6 +2202,7 @@ jumbo_split_static_library("browser") {
-     "//third_party/metrics_proto",
-     "//third_party/re2",
-     "//third_party/smhasher:cityhash",
-+    "//third_party/ungoogled:switches",
-     "//third_party/webrtc_overrides",
-     "//third_party/webrtc_overrides:init_webrtc",
-     "//third_party/widevine/cdm:buildflags",
---- a/content/browser/BUILD.gn
-+++ b/content/browser/BUILD.gn
-@@ -205,6 +205,7 @@ jumbo_source_set("browser") {
-     "//third_party/libyuv",
-     "//third_party/re2",
-     "//third_party/sqlite",
-+    "//third_party/ungoogled:switches",
-     "//third_party/webrtc/modules/desktop_capture:primitives",
-     "//third_party/webrtc/rtc_base:rtc_base",
-     "//third_party/zlib",
---- a/content/browser/renderer_host/render_process_host_impl.cc
-+++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -213,6 +213,7 @@
- #include "third_party/blink/public/common/page/launching_process_state.h"
- #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
- #include "third_party/blink/public/public_buildflags.h"
-+#include "third_party/ungoogled/ungoogled_switches.h"
- #include "third_party/skia/include/core/SkBitmap.h"
- #include "ui/accessibility/accessibility_switches.h"
- #include "ui/base/ui_base_switches.h"
-@@ -2970,6 +2971,8 @@ void RenderProcessHostImpl::PropagateBro
-     switches::kEnableWebGLSwapChain,
-     switches::kEnableWebVR,
-     switches::kFileUrlPathAlias,
-+    switches::kFingerprintingClientRectsNoise,
-+    switches::kFingerprintingCanvasMeasureTextNoise,
-     switches::kForceDisplayColorProfile,
-     switches::kForceDeviceScaleFactor,
-     switches::kForceGpuMemAvailableMb,
---- a/content/child/BUILD.gn
-+++ b/content/child/BUILD.gn
-@@ -120,6 +120,7 @@ target(link_target_type, "child") {
-     "//third_party/blink/public:scaled_resources",
-     "//third_party/blink/public/common",
-     "//third_party/ced",
-+    "//third_party/ungoogled:switches",
-     "//third_party/zlib/google:compression_utils",
-     "//ui/base",
-     "//ui/events/blink",
---- a/third_party/blink/renderer/platform/BUILD.gn
-+++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -1450,6 +1450,7 @@ jumbo_component("platform") {
-     "//third_party/ced",
-     "//third_party/emoji-segmenter",
-     "//third_party/icu",
-+    "//third_party/ungoogled:switches",
-     "//third_party/webrtc/api:libjingle_logging_api",
-     "//third_party/webrtc/api/audio_codecs/L16:audio_decoder_L16",
-     "//third_party/webrtc/api/audio_codecs/L16:audio_encoder_L16",
+ void TextMetrics::Update(const Font& font,
+                          const TextDirection& direction,
+                          const TextBaseline& baseline,
+--- a/third_party/blink/renderer/core/html/canvas/text_metrics.h
++++ b/third_party/blink/renderer/core/html/canvas/text_metrics.h
+@@ -64,6 +64,8 @@ class CORE_EXPORT TextMetrics final : pu
+ 
+   void Trace(Visitor*) override;
+ 
++  void Shuffle(const double factor);
++
+  private:
+   void Update(const Font&,
+               const TextDirection&,
 --- 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
-@@ -811,9 +811,15 @@ TextMetrics* CanvasRenderingContext2D::m
+@@ -818,9 +818,15 @@ TextMetrics* CanvasRenderingContext2D::m
    else
      direction = ToTextDirection(GetState().GetDirection(), canvas());
  
@@ -286,41 +283,43 @@
  }
  
  void CanvasRenderingContext2D::DrawTextInternal(
---- a/third_party/blink/renderer/core/html/canvas/text_metrics.h
-+++ b/third_party/blink/renderer/core/html/canvas/text_metrics.h
-@@ -64,6 +64,8 @@ class CORE_EXPORT TextMetrics final : pu
- 
-   void Trace(Visitor*) override;
- 
-+  void Shuffle(const double factor);
-+
-  private:
-   void Update(const Font&,
-               const TextDirection&,
---- a/third_party/blink/renderer/core/html/canvas/text_metrics.cc
-+++ b/third_party/blink/renderer/core/html/canvas/text_metrics.cc
-@@ -54,6 +54,24 @@ TextMetrics::TextMetrics(const Font& fon
-   Update(font, direction, baseline, align, text);
+--- a/third_party/blink/renderer/platform/BUILD.gn
++++ b/third_party/blink/renderer/platform/BUILD.gn
+@@ -1490,6 +1490,7 @@ jumbo_component("platform") {
+     "//third_party/emoji-segmenter",
+     "//third_party/icu",
+     "//third_party/libyuv",
++    "//third_party/ungoogled:switches",
+     "//third_party/webrtc/api:libjingle_logging_api",
+     "//third_party/webrtc/api:packet_socket_factory",
+     "//third_party/webrtc/api/audio_codecs/L16:audio_decoder_L16",
+--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
++++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+@@ -704,4 +704,12 @@ void WebRuntimeFeatures::EnableAccelerat
+   RuntimeEnabledFeatures::SetAcceleratedSmallCanvasesEnabled(enable);
  }
  
-+void TextMetrics::Shuffle(const double factor) {
-+  // x-direction
-+  width_ *= factor;
-+  actual_bounding_box_left_ *= factor;
-+  actual_bounding_box_right_ *= factor;
++void WebRuntimeFeatures::EnableFingerprintingClientRectsNoise(bool enable) {
++  RuntimeEnabledFeatures::SetFingerprintingClientRectsNoiseEnabled(enable);
++}
 +
-+  // y-direction
-+  font_bounding_box_ascent_ *= factor;
-+  font_bounding_box_descent_ *= factor;
-+  actual_bounding_box_ascent_ *= factor;
-+  actual_bounding_box_descent_ *= factor;
-+  em_height_ascent_ *= factor;
-+  em_height_descent_ *= factor;
-+  baselines_->setAlphabetic(baselines_->alphabetic() * factor);
-+  baselines_->setHanging(baselines_->hanging() * factor);
-+  baselines_->setIdeographic(baselines_->ideographic() * factor);
++void WebRuntimeFeatures::EnableFingerprintingCanvasMeasureTextNoise(bool enable) {
++  RuntimeEnabledFeatures::SetFingerprintingCanvasMeasureTextNoiseEnabled(enable);
 +}
 +
- void TextMetrics::Update(const Font& font,
-                          const TextDirection& direction,
-                          const TextBaseline& baseline,
+ }  // namespace blink
+--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
++++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
+@@ -693,6 +693,12 @@
+       name: "FileSystem",
+       status: "stable",
+     },
++    {
++      name: "FingerprintingClientRectsNoise",
++    },
++    {
++      name: "FingerprintingCanvasMeasureTextNoise",
++    },
+     // Perform style recalc traversal in the flat tree order, including marking
+     // flat-tree instead of shadow-including ancestors for child dirtiness.
+     {

+ 75 - 75
patches/extra/bromite/flag-fingerprinting-canvas-image-data-noise.patch

@@ -21,6 +21,74 @@ approach to change color components.
  .../platform/graphics/static_bitmap_image.h        |   2 +
  4 files changed, 163 insertions(+), 2 deletions(-)
 
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1475,6 +1475,10 @@ const FeatureEntry kFeatureEntries[] = {
+      "Enable Canvas::measureText() fingerprint deception",
+      "Scale the output values of Canvas::measureText() with a randomly selected factor in the range -0.0003% to 0.0003%, which are recomputed on every document initialization.",
+      kOsAll, SINGLE_VALUE_TYPE(switches::kFingerprintingCanvasMeasureTextNoise)},
++    {"fingerprinting-canvas-image-data-noise",
++     "Enable Canvas image data fingerprint deception",
++     "Slightly modifies at most 10 pixels in Canvas image data extracted via JS APIs",
++     kOsAll, SINGLE_VALUE_TYPE(switches::kFingerprintingCanvasImageDataNoise)},
+     {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
+      flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
+      SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},
+--- a/content/browser/renderer_host/render_process_host_impl.cc
++++ b/content/browser/renderer_host/render_process_host_impl.cc
+@@ -3040,6 +3040,7 @@ void RenderProcessHostImpl::PropagateBro
+     switches::kFileUrlPathAlias,
+     switches::kFingerprintingClientRectsNoise,
+     switches::kFingerprintingCanvasMeasureTextNoise,
++    switches::kFingerprintingCanvasImageDataNoise,
+     switches::kForceDeviceScaleFactor,
+     switches::kForceDisableWebRtcApmInAudioService,
+     switches::kForceDisplayColorProfile,
+--- a/content/child/runtime_features.cc
++++ b/content/child/runtime_features.cc
+@@ -444,6 +444,8 @@ void SetRuntimeFeaturesFromCommandLine(c
+        switches::kFingerprintingClientRectsNoise, true},
+       {wrf::EnableFingerprintingCanvasMeasureTextNoise,
+        switches::kFingerprintingCanvasMeasureTextNoise, true},
++      {wrf::EnableFingerprintingCanvasImageDataNoise,
++       switches::kFingerprintingCanvasImageDataNoise, true},
+   };
+   for (const auto& mapping : switchToFeatureMapping) {
+     if (command_line.HasSwitch(mapping.switch_name))
+--- a/third_party/blink/public/platform/web_runtime_features.h
++++ b/third_party/blink/public/platform/web_runtime_features.h
+@@ -231,6 +231,7 @@ class WebRuntimeFeatures {
+   BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
+   BLINK_PLATFORM_EXPORT static void EnableFingerprintingClientRectsNoise(bool);
+   BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasMeasureTextNoise(bool);
++  BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasImageDataNoise(bool);
+   BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool);
+   BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool);
+   BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool);
+--- a/third_party/blink/renderer/platform/BUILD.gn
++++ b/third_party/blink/renderer/platform/BUILD.gn
+@@ -1454,7 +1454,9 @@ jumbo_component("platform") {
+     "//third_party/blink/renderer:non_test_config",
+   ]
+ 
+-  include_dirs = []
++  include_dirs = [
++    "//third_party/skia/include/private", # For shuffler in graphics/static_bitmap_image.cc
++  ]
+ 
+   public_deps = [
+     ":blink_platform_public_deps",
+--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
++++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+@@ -712,4 +712,8 @@ void WebRuntimeFeatures::EnableFingerpri
+   RuntimeEnabledFeatures::SetFingerprintingCanvasMeasureTextNoiseEnabled(enable);
+ }
+ 
++void WebRuntimeFeatures::EnableFingerprintingCanvasImageDataNoise(bool enable) {
++  RuntimeEnabledFeatures::SetFingerprintingCanvasImageDataNoiseEnabled(enable);
++}
++
+ }  // namespace blink
 --- a/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
 +++ b/third_party/blink/renderer/platform/graphics/image_data_buffer.cc
 @@ -35,6 +35,8 @@
@@ -70,7 +138,7 @@ approach to change color components.
  #include "v8/include/v8.h"
  
  namespace blink {
-@@ -154,10 +158,165 @@ bool StaticBitmapImage::ConvertToArrayBu
+@@ -141,10 +145,165 @@ bool StaticBitmapImage::ConvertToArrayBu
    DCHECK(read_pixels_successful ||
           !sk_image->bounds().intersect(SkIRect::MakeXYWH(
               rect.X(), rect.Y(), info.width(), info.height())));
@@ -238,8 +306,8 @@ approach to change color components.
    return sync_token;
 --- a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
 +++ b/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
-@@ -46,6 +46,8 @@ class PLATFORM_EXPORT StaticBitmapImage
-   static scoped_refptr<StaticBitmapImage> Create(WTF::ArrayBufferContents&,
+@@ -44,6 +44,8 @@ class PLATFORM_EXPORT StaticBitmapImage
+   static scoped_refptr<StaticBitmapImage> Create(sk_sp<SkData> data,
                                                   const SkImageInfo&);
  
 +  static void ShuffleSubchannelColorData(const void *addr, const SkImageInfo& info, int srcX, int srcY);
@@ -247,83 +315,15 @@ approach to change color components.
    bool IsStaticBitmapImage() const override { return true; }
  
    // Methods overridden by all sub-classes
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -1414,6 +1414,10 @@ const FeatureEntry kFeatureEntries[] = {
-      "Enable Canvas::measureText() fingerprint deception",
-      "Scale the output values of Canvas::measureText() with a randomly selected factor in the range -0.0003% to 0.0003%, which are recomputed on every document initialization.",
-      kOsAll, SINGLE_VALUE_TYPE(switches::kFingerprintingCanvasMeasureTextNoise)},
-+    {"fingerprinting-canvas-image-data-noise",
-+     "Enable Canvas image data fingerprint deception",
-+     "Slightly modifies at most 10 pixels in Canvas image data extracted via JS APIs",
-+     kOsAll, SINGLE_VALUE_TYPE(switches::kFingerprintingCanvasImageDataNoise)},
-     {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
-      flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
-      SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},
---- a/content/child/runtime_features.cc
-+++ b/content/child/runtime_features.cc
-@@ -466,6 +466,8 @@ void SetIndividualRuntimeFeatures(
-       command_line.HasSwitch(switches::kFingerprintingClientRectsNoise));
-   WebRuntimeFeatures::EnableFingerprintingCanvasMeasureTextNoise(
-       command_line.HasSwitch(switches::kFingerprintingCanvasMeasureTextNoise));
-+  WebRuntimeFeatures::EnableFingerprintingCanvasImageDataNoise(
-+      command_line.HasSwitch(switches::kFingerprintingCanvasImageDataNoise));
- 
-   WebRuntimeFeatures::EnableAutoplayIgnoresWebAudio(
-       base::FeatureList::IsEnabled(media::kAutoplayIgnoreWebAudio));
 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
-@@ -683,6 +683,9 @@
+@@ -699,6 +699,9 @@
      {
        name: "FingerprintingCanvasMeasureTextNoise",
      },
 +    {
 +      name: "FingerprintingCanvasImageDataNoise",
 +    },
-     // FirstContentfulPaintPlusPlus enables the Largest Text Paint metric, Last
-     // Text Paint metric, Largest Image Paint metric and Last Image Paint
-     // metric. See also: http://bit.ly/fcp_plus_plus
---- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
-@@ -730,4 +730,8 @@ void WebRuntimeFeatures::EnableFingerpri
-   RuntimeEnabledFeatures::SetFingerprintingCanvasMeasureTextNoiseEnabled(enable);
- }
- 
-+void WebRuntimeFeatures::EnableFingerprintingCanvasImageDataNoise(bool enable) {
-+  RuntimeEnabledFeatures::SetFingerprintingCanvasImageDataNoiseEnabled(enable);
-+}
-+
- }  // namespace blink
---- a/third_party/blink/public/platform/web_runtime_features.h
-+++ b/third_party/blink/public/platform/web_runtime_features.h
-@@ -230,6 +230,7 @@ class WebRuntimeFeatures {
-   BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
-   BLINK_PLATFORM_EXPORT static void EnableFingerprintingClientRectsNoise(bool);
-   BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasMeasureTextNoise(bool);
-+  BLINK_PLATFORM_EXPORT static void EnableFingerprintingCanvasImageDataNoise(bool);
-   BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool);
-   BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool);
-   BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool);
---- a/content/browser/renderer_host/render_process_host_impl.cc
-+++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -2973,6 +2973,7 @@ void RenderProcessHostImpl::PropagateBro
-     switches::kFileUrlPathAlias,
-     switches::kFingerprintingClientRectsNoise,
-     switches::kFingerprintingCanvasMeasureTextNoise,
-+    switches::kFingerprintingCanvasImageDataNoise,
-     switches::kForceDisplayColorProfile,
-     switches::kForceDeviceScaleFactor,
-     switches::kForceGpuMemAvailableMb,
---- a/third_party/blink/renderer/platform/BUILD.gn
-+++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -1417,7 +1417,9 @@ jumbo_component("platform") {
-     "//third_party/blink/renderer:non_test_config",
-   ]
- 
--  include_dirs = []
-+  include_dirs = [
-+    "//third_party/skia/include/private", # For shuffler in graphics/static_bitmap_image.cc
-+  ]
- 
-   public_deps = [
-     ":blink_platform_public_deps",
+     // Perform style recalc traversal in the flat tree order, including marking
+     // flat-tree instead of shadow-including ancestors for child dirtiness.
+     {

+ 66 - 66
patches/extra/bromite/flag-max-connections-per-host.patch

@@ -15,9 +15,19 @@ with limited CPU/memory resources and it is disabled by default.
  net/socket/client_socket_pool_manager.cc                 | 16 ++++++++++++++++
  7 files changed, 42 insertions(+)
 
+--- a/chrome/browser/BUILD.gn
++++ b/chrome/browser/BUILD.gn
+@@ -1981,6 +1981,7 @@ jumbo_static_library("browser") {
+     "//components/net_log",
+     "//components/network_hints/common",
+     "//components/network_session_configurator/browser",
++    "//components/network_session_configurator/common",
+     "//components/network_time",
+     "//components/ntp_tiles",
+     "//components/offline_items_collection/core",
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -702,6 +702,11 @@ const FeatureEntry::Choice kForceEffecti
+@@ -701,6 +701,11 @@ const FeatureEntry::Choice kForceEffecti
       net::kEffectiveConnectionType4G},
  };
  
@@ -29,7 +39,7 @@ with limited CPU/memory resources and it is disabled by default.
  // Ensure that all effective connection types returned by Network Quality
  // Estimator (NQE) are also exposed via flags.
  static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 ==
-@@ -2384,6 +2389,9 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2443,6 +2448,9 @@ const FeatureEntry kFeatureEntries[] = {
       flag_descriptions::kAutofillCreditCardUploadDescription, kOsAll,
       FEATURE_VALUE_TYPE(autofill::features::kAutofillUpstream)},
  #endif  // TOOLKIT_VIEWS || OS_ANDROID
@@ -39,9 +49,61 @@ with limited CPU/memory resources and it is disabled by default.
      {"force-ui-direction", flag_descriptions::kForceUiDirectionName,
       flag_descriptions::kForceUiDirectionDescription, kOsAll,
       MULTI_VALUE_TYPE(kForceUIDirectionChoices)},
+--- a/chrome/browser/browser_process_impl.cc
++++ b/chrome/browser/browser_process_impl.cc
+@@ -18,12 +18,14 @@
+ #include "base/debug/leak_annotations.h"
+ #include "base/files/file_path.h"
+ #include "base/location.h"
++#include "base/logging.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
+ #include "base/metrics/histogram_macros.h"
+ #include "base/path_service.h"
+ #include "base/run_loop.h"
+ #include "base/single_thread_task_runner.h"
++#include "base/strings/string_number_conversions.h"
+ #include "base/synchronization/waitable_event.h"
+ #include "base/task/post_task.h"
+ #include "base/task/task_traits.h"
+@@ -96,6 +98,7 @@
+ #include "components/metrics/metrics_service.h"
+ #include "components/metrics_services_manager/metrics_services_manager.h"
+ #include "components/metrics_services_manager/metrics_services_manager_client.h"
++#include "components/network_session_configurator/common/network_switches.h"
+ #include "components/network_time/network_time_tracker.h"
+ #include "components/optimization_guide/optimization_guide_features.h"
+ #include "components/optimization_guide/optimization_guide_service.h"
+@@ -131,6 +134,7 @@
+ #include "extensions/buildflags/buildflags.h"
+ #include "extensions/common/constants.h"
+ #include "media/media_buildflags.h"
++#include "net/socket/client_socket_pool_manager.h"
+ #include "ppapi/buildflags/buildflags.h"
+ #include "printing/buildflags/buildflags.h"
+ #include "services/network/public/cpp/features.h"
+@@ -314,6 +318,18 @@ void BrowserProcessImpl::Init() {
+                              base::Bind(&ApplyMetricsReportingPolicy));
+ #endif
+ 
++  int max_connections_per_host = 0;
++  auto switch_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
++      switches::kMaxConnectionsPerHost);
++  if (!switch_value.empty() && !base::StringToInt(switch_value, &max_connections_per_host)) {
++    LOG(DFATAL) << "--" << switches::kMaxConnectionsPerHost
++      << " expected integer; got (\"" << switch_value << "\" instead)";
++  }
++  if (max_connections_per_host != 0) {
++    net::ClientSocketPoolManager::set_max_sockets_per_group(
++        net::HttpNetworkSession::NORMAL_SOCKET_POOL, max_connections_per_host);
++  }
++
+   DCHECK(!webrtc_event_log_manager_);
+   webrtc_event_log_manager_ = WebRtcEventLogManager::CreateSingletonInstance();
+ 
 --- a/chrome/browser/flag_descriptions.cc
 +++ b/chrome/browser/flag_descriptions.cc
-@@ -1227,6 +1227,10 @@ const char kLookalikeUrlNavigationSugges
+@@ -1262,6 +1262,10 @@ const char kLookalikeUrlNavigationSugges
  const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure";
  const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
  
@@ -54,7 +116,7 @@ with limited CPU/memory resources and it is disabled by default.
  const char kMediaRouterCastAllowAllIPsDescription[] =
 --- a/chrome/browser/flag_descriptions.h
 +++ b/chrome/browser/flag_descriptions.h
-@@ -752,6 +752,9 @@ extern const char kMarkHttpAsWarning[];
+@@ -767,6 +767,9 @@ extern const char kMarkHttpAsWarning[];
  extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[];
  extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[];
  
@@ -100,65 +162,3 @@ with limited CPU/memory resources and it is disabled by default.
  // Ignores certificate-related errors.
  NETWORK_SWITCH(kIgnoreCertificateErrors, "ignore-certificate-errors")
  
---- a/chrome/browser/browser_process_impl.cc
-+++ b/chrome/browser/browser_process_impl.cc
-@@ -18,12 +18,14 @@
- #include "base/debug/leak_annotations.h"
- #include "base/files/file_path.h"
- #include "base/location.h"
-+#include "base/logging.h"
- #include "base/macros.h"
- #include "base/memory/ptr_util.h"
- #include "base/metrics/histogram_macros.h"
- #include "base/path_service.h"
- #include "base/run_loop.h"
- #include "base/single_thread_task_runner.h"
-+#include "base/strings/string_number_conversions.h"
- #include "base/synchronization/waitable_event.h"
- #include "base/task/post_task.h"
- #include "base/task/task_traits.h"
-@@ -95,6 +97,7 @@
- #include "components/metrics/metrics_service.h"
- #include "components/metrics_services_manager/metrics_services_manager.h"
- #include "components/metrics_services_manager/metrics_services_manager_client.h"
-+#include "components/network_session_configurator/common/network_switches.h"
- #include "components/network_time/network_time_tracker.h"
- #include "components/optimization_guide/optimization_guide_features.h"
- #include "components/optimization_guide/optimization_guide_service.h"
-@@ -130,6 +133,7 @@
- #include "extensions/buildflags/buildflags.h"
- #include "extensions/common/constants.h"
- #include "media/media_buildflags.h"
-+#include "net/socket/client_socket_pool_manager.h"
- #include "ppapi/buildflags/buildflags.h"
- #include "printing/buildflags/buildflags.h"
- #include "services/network/public/cpp/features.h"
-@@ -313,6 +317,18 @@ void BrowserProcessImpl::Init() {
-                              base::Bind(&ApplyMetricsReportingPolicy));
- #endif
- 
-+  int max_connections_per_host = 0;
-+  auto switch_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-+      switches::kMaxConnectionsPerHost);
-+  if (!switch_value.empty() && !base::StringToInt(switch_value, &max_connections_per_host)) {
-+    LOG(DFATAL) << "--" << switches::kMaxConnectionsPerHost
-+      << " expected integer; got (\"" << switch_value << "\" instead)";
-+  }
-+  if (max_connections_per_host != 0) {
-+    net::ClientSocketPoolManager::set_max_sockets_per_group(
-+        net::HttpNetworkSession::NORMAL_SOCKET_POOL, max_connections_per_host);
-+  }
-+
-   DCHECK(!webrtc_event_log_manager_);
-   webrtc_event_log_manager_ = WebRtcEventLogManager::CreateSingletonInstance();
- 
---- a/chrome/browser/BUILD.gn
-+++ b/chrome/browser/BUILD.gn
-@@ -2038,6 +2038,7 @@ jumbo_split_static_library("browser") {
-     "//components/net_log",
-     "//components/network_hints/common",
-     "//components/network_session_configurator/browser",
-+    "//components/network_session_configurator/common",
-     "//components/network_time",
-     "//components/ntp_tiles",
-     "//components/offline_items_collection/core",

+ 11 - 11
patches/extra/debian_buster/disable/android.patch

@@ -1,19 +1,9 @@
 description: disable dependency on chrome/android
 author: Michael Gilbert <mgilbert@debian.org>
 
---- a/device/vr/buildflags/buildflags.gni
-+++ b/device/vr/buildflags/buildflags.gni
-@@ -5,7 +5,6 @@
- import("//build/config/chrome_build.gni")
- import("//build/config/chromecast_build.gni")
- import("//build/config/gclient_args.gni")
--import("//chrome/android/channel.gni")
- 
- declare_args() {
-   enable_gvr_services = is_android && !is_chromecast &&
 --- a/BUILD.gn
 +++ b/BUILD.gn
-@@ -390,7 +390,7 @@ group("gn_all") {
+@@ -397,7 +397,7 @@ group("gn_all") {
    #       seems currently broken for this platform at the moment, and the
    #       corresponding code build and works on Linux unmodified.
    #       See instructions in the corresponding BUILD.gn.
@@ -22,3 +12,13 @@ author: Michael Gilbert <mgilbert@debian.org>
      deps +=
          [ "//third_party/android_crazy_linker:android_crazy_linker_zip_fuzzer" ]
    }
+--- a/device/vr/buildflags/buildflags.gni
++++ b/device/vr/buildflags/buildflags.gni
+@@ -5,7 +5,6 @@
+ import("//build/config/chrome_build.gni")
+ import("//build/config/chromecast_build.gni")
+ import("//build/config/gclient_args.gni")
+-import("//chrome/android/channel.gni")
+ 
+ declare_args() {
+   enable_gvr_services = is_android && !is_chromecast &&

+ 2 - 2
patches/extra/debian_buster/disable/fuzzers.patch

@@ -3,7 +3,7 @@ author: Michael Gilbert <mgilbert@debian.org>
 
 --- a/BUILD.gn
 +++ b/BUILD.gn
-@@ -741,8 +741,7 @@ group("gn_all") {
+@@ -747,8 +747,7 @@ group("gn_all") {
      }
    }
  
@@ -15,7 +15,7 @@ author: Michael Gilbert <mgilbert@debian.org>
        "//testing/libfuzzer/fuzzers",
 --- a/content/test/BUILD.gn
 +++ b/content/test/BUILD.gn
-@@ -2406,12 +2406,6 @@ test("content_perftests") {
+@@ -2404,12 +2404,6 @@ test("content_perftests") {
    }
  }
  

+ 1 - 1
patches/extra/debian_buster/disable/google-api-warning.patch

@@ -3,7 +3,7 @@ author: Michael Gilbert <mgilbert@debian.org>
 
 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
 +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
-@@ -847,10 +847,6 @@ void StartupBrowserCreatorImpl::AddInfoB
+@@ -845,10 +845,6 @@ void StartupBrowserCreatorImpl::AddInfoB
  
      InfoBarService* infobar_service =
          InfoBarService::FromWebContents(web_contents);

+ 1 - 1
patches/extra/debian_buster/disable/welcome-page.patch

@@ -4,7 +4,7 @@ bug-debian: http://bugs.debian.org/857767
 
 --- a/chrome/browser/profiles/profile_manager.cc
 +++ b/chrome/browser/profiles/profile_manager.cc
-@@ -1052,7 +1052,7 @@ void ProfileManager::InitProfileUserPref
+@@ -1054,7 +1054,7 @@ void ProfileManager::InitProfileUserPref
      profile->GetPrefs()->SetString(prefs::kSupervisedUserId,
                                     supervised_user_id);
    }

+ 42 - 0
patches/extra/debian_buster/fixes/widevine-enable-version-string.patch

@@ -0,0 +1,42 @@
+Description: enable widevine and set its version string to "undefined"
+Author: Michael Gilbert <mgilbert@debian.org>
+Author: Olivier Tilloy <olivier.tilloy@canonical.com>
+
+--- a/third_party/widevine/cdm/widevine_cdm_version.h
++++ b/third_party/widevine/cdm/widevine_cdm_version.h
+@@ -11,5 +11,6 @@
+ // If the Widevine CDM is available define the following:
+ //  - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
+ //    as a string, e.g., "1.0.123.456").
++#define WIDEVINE_CDM_VERSION_STRING "undefined"
+ 
+ #endif  // WIDEVINE_CDM_VERSION_H_
+--- a/chrome/common/chrome_content_client.cc
++++ b/chrome/common/chrome_content_client.cc
+@@ -386,7 +386,7 @@ std::unique_ptr<content::CdmInfo> Create
+ #endif  // (BUILDFLAG(BUNDLE_WIDEVINE_CDM) ||
+         // BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)) && defined(OS_LINUX)
+ 
+-#if BUILDFLAG(BUNDLE_WIDEVINE_CDM) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) && defined(OS_LINUX)
+ // On Linux/ChromeOS we have to preload the CDM since it uses the zygote
+ // sandbox. On Windows and Mac, the bundled CDM is handled by the component
+ // updater.
+@@ -456,7 +456,7 @@ content::CdmInfo* GetBundledWidevine() {
+       }());
+   return s_cdm_info->get();
+ }
+-#endif  // BUILDFLAG(BUNDLE_WIDEVINE_CDM) && defined(OS_LINUX)
++#endif  // BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) && defined(OS_LINUX)
+ 
+ #if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) && defined(OS_LINUX)
+ // This code checks to see if a component updated Widevine CDM can be found. If
+@@ -614,7 +614,7 @@ void ChromeContentClient::AddContentDecr
+     // case both versions will be the same and point to the same directory, so
+     // it doesn't matter which one is loaded.
+     content::CdmInfo* bundled_widevine = nullptr;
+-#if BUILDFLAG(BUNDLE_WIDEVINE_CDM)
++#if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
+     bundled_widevine = GetBundledWidevine();
+ #endif
+ 

+ 11 - 10
patches/extra/inox-patchset/0006-modify-default-prefs.patch

@@ -1,6 +1,7 @@
+
 --- a/chrome/browser/chrome_content_browser_client.cc
 +++ b/chrome/browser/chrome_content_browser_client.cc
-@@ -1124,7 +1124,7 @@ void ChromeContentBrowserClient::Registe
+@@ -1115,7 +1115,7 @@ void ChromeContentBrowserClient::Registe
  void ChromeContentBrowserClient::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -11,7 +12,7 @@
    // user policy in addition to the same named ones in Local State (which are
 --- a/chrome/browser/ui/browser_ui_prefs.cc
 +++ b/chrome/browser/ui/browser_ui_prefs.cc
-@@ -66,11 +66,11 @@ void RegisterBrowserUserPrefs(user_prefs
+@@ -67,11 +67,11 @@ void RegisterBrowserUserPrefs(user_prefs
    registry->RegisterBooleanPref(prefs::kWebAppCreateInAppsMenu, true);
    registry->RegisterBooleanPref(prefs::kWebAppCreateInQuickLaunchBar, true);
    registry->RegisterBooleanPref(
@@ -49,7 +50,7 @@
  enum class NetworkPredictionStatus {
 --- a/chrome/browser/background/background_mode_manager.cc
 +++ b/chrome/browser/background/background_mode_manager.cc
-@@ -301,7 +301,7 @@ void BackgroundModeManager::RegisterPref
+@@ -302,7 +302,7 @@ void BackgroundModeManager::RegisterPref
    registry->RegisterBooleanPref(prefs::kChromeCreatedLoginItem, false);
    registry->RegisterBooleanPref(prefs::kMigratedLoginItemPref, false);
  #endif
@@ -60,7 +61,7 @@
  void BackgroundModeManager::RegisterProfile(Profile* profile) {
 --- a/components/content_settings/core/browser/cookie_settings.cc
 +++ b/components/content_settings/core/browser/cookie_settings.cc
-@@ -57,7 +57,7 @@ void CookieSettings::GetCookieSettings(
+@@ -58,7 +58,7 @@ void CookieSettings::GetCookieSettings(
  void CookieSettings::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
@@ -71,7 +72,7 @@
        prefs::kCookieControlsMode,
 --- a/chrome/browser/ui/navigation_correction_tab_observer.cc
 +++ b/chrome/browser/ui/navigation_correction_tab_observer.cc
-@@ -42,7 +42,7 @@ NavigationCorrectionTabObserver::~Naviga
+@@ -43,7 +43,7 @@ NavigationCorrectionTabObserver::~Naviga
  // static
  void NavigationCorrectionTabObserver::RegisterProfilePrefs(
      user_prefs::PrefRegistrySyncable* prefs) {
@@ -82,7 +83,7 @@
  
 --- a/components/autofill/core/common/autofill_prefs.cc
 +++ b/components/autofill/core/common/autofill_prefs.cc
-@@ -134,10 +134,10 @@ const char kAutocompleteLastVersionReten
+@@ -136,10 +136,10 @@ const char kAutocompleteLastVersionReten
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    // Synced prefs. Used for cross-device choices, e.g., credit card Autofill.
    registry->RegisterBooleanPref(
@@ -95,7 +96,7 @@
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterIntegerPref(
        prefs::kAutofillLastVersionDeduped, 0,
-@@ -150,7 +150,7 @@ void RegisterProfilePrefs(user_prefs::Pr
+@@ -152,7 +152,7 @@ void RegisterProfilePrefs(user_prefs::Pr
        prefs::kAutofillLastVersionDisusedAddressesDeleted, 0,
        user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
    registry->RegisterBooleanPref(
@@ -117,7 +118,7 @@
      </cr-dialog>
 --- a/components/bookmarks/browser/bookmark_utils.cc
 +++ b/components/bookmarks/browser/bookmark_utils.cc
-@@ -443,12 +443,12 @@ bool DoesBookmarkContainWords(const base
+@@ -439,12 +439,12 @@ bool DoesBookmarkContainWords(const base
  void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kShowBookmarkBar,
@@ -134,7 +135,7 @@
        prefs::kShowManagedBookmarksInBookmarkBar,
 --- a/chrome/browser/profiles/profile.cc
 +++ b/chrome/browser/profiles/profile.cc
-@@ -139,7 +139,7 @@ const char Profile::kProfileKey[] = "__P
+@@ -148,7 +148,7 @@ const char Profile::kProfileKey[] = "__P
  void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kSearchSuggestEnabled,
@@ -186,7 +187,7 @@
    // functionality that are only available in chrome://extensions/ but which
 --- a/components/password_manager/core/browser/password_manager.cc
 +++ b/components/password_manager/core/browser/password_manager.cc
-@@ -202,10 +202,10 @@ void PasswordManager::RegisterProfilePre
+@@ -155,10 +155,10 @@ void PasswordManager::RegisterProfilePre
    registry->RegisterBooleanPref(prefs::kBlacklistedCredentialsNormalized,
                                  false);
    registry->RegisterBooleanPref(

+ 0 - 20
patches/extra/inox-patchset/chromium-widevine.patch

@@ -1,20 +0,0 @@
---- a/chrome/common/chrome_content_client.cc
-+++ b/chrome/common/chrome_content_client.cc
-@@ -93,7 +93,7 @@
- // Registers Widevine CDM if Widevine is enabled, the Widevine CDM is
- // bundled and not a component. When the Widevine CDM is a component, it is
- // registered in widevine_cdm_component_installer.cc.
--#if BUILDFLAG(BUNDLE_WIDEVINE_CDM) && !BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
-+#if BUILDFLAG(ENABLE_WIDEVINE) && !BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
- #define REGISTER_BUNDLED_WIDEVINE_CDM
- #include "third_party/widevine/cdm/widevine_cdm_common.h"  // nogncheck
- // TODO(crbug.com/663554): Needed for WIDEVINE_CDM_VERSION_STRING. Support
---- a/third_party/widevine/cdm/widevine_cdm_version.h
-+++ b/third_party/widevine/cdm/widevine_cdm_version.h
-@@ -12,4 +12,6 @@
- //  - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
- //    as a string, e.g., "1.0.123.456").
- 
-+#define WIDEVINE_CDM_VERSION_STRING "unknown"
-+
- #endif  // WIDEVINE_CDM_VERSION_H_

+ 1 - 1
patches/extra/iridium-browser/browser-disable-profile-auto-import-on-first-run.patch

@@ -9,7 +9,7 @@ Subject: [PATCH 56/66] browser: disable profile auto-import on first run
 
 --- a/chrome/browser/chrome_browser_main.cc
 +++ b/chrome/browser/chrome_browser_main.cc
-@@ -1574,8 +1574,6 @@ int ChromeBrowserMainParts::PreMainMessa
+@@ -1568,8 +1568,6 @@ int ChromeBrowserMainParts::PreMainMessa
    // and preferences have been registered since some of the import code depends
    // on preferences.
    if (first_run::IsChromeFirstRun()) {

+ 1 - 1
patches/extra/iridium-browser/prefs-always-prompt-for-download-directory-by-defaul.patch

@@ -29,7 +29,7 @@ TLDR: Do not let files sneak onto the disk too easily.
 
 --- a/chrome/browser/download/download_prefs.cc
 +++ b/chrome/browser/download/download_prefs.cc
-@@ -235,7 +235,7 @@ void DownloadPrefs::RegisterProfilePrefs
+@@ -239,7 +239,7 @@ void DownloadPrefs::RegisterProfilePrefs
      user_prefs::PrefRegistrySyncable* registry) {
    registry->RegisterBooleanPref(
        prefs::kPromptForDownload,

+ 4 - 4
patches/extra/ungoogled-chromium/add-flag-for-search-engine-collection.patch

@@ -2,7 +2,7 @@
 
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -1369,6 +1369,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1430,6 +1430,10 @@ const FeatureEntry kFeatureEntries[] = {
       "Enable stacking in tab strip",
       "Forces tabs to be stacked in the tab strip. Otherwise, they follow default behavior.",
       kOsAll, SINGLE_VALUE_TYPE("enable-stacked-tab-strip")},
@@ -33,7 +33,7 @@
  
 -  GURL osdd_url = frame->GetDocument().OpenSearchDescriptionURL();
 -  if (!osdd_url.is_empty()) {
--    chrome::mojom::OpenSearchDescriptionDocumentHandlerAssociatedPtr
+-    mojo::AssociatedRemote<chrome::mojom::OpenSearchDescriptionDocumentHandler>
 -        osdd_handler;
 -    render_frame()->GetRemoteAssociatedInterfaces()->GetInterface(
 -        &osdd_handler);
@@ -42,7 +42,7 @@
 +  if (should_autocollect_) {
 +    GURL osdd_url = frame->GetDocument().OpenSearchDescriptionURL();
 +    if (!osdd_url.is_empty()) {
-+      chrome::mojom::OpenSearchDescriptionDocumentHandlerAssociatedPtr
++      mojo::AssociatedRemote<chrome::mojom::OpenSearchDescriptionDocumentHandler>
 +          osdd_handler;
 +      render_frame()->GetRemoteAssociatedInterfaces()->GetInterface(
 +          &osdd_handler);
@@ -54,7 +54,7 @@
  
 --- a/chrome/renderer/chrome_render_frame_observer.h
 +++ b/chrome/renderer/chrome_render_frame_observer.h
-@@ -109,6 +109,7 @@ class ChromeRenderFrameObserver : public
+@@ -107,6 +107,7 @@ class ChromeRenderFrameObserver : public
    // Have the same lifetime as us.
    translate::TranslateHelper* translate_helper_;
    safe_browsing::PhishingClassifierDelegate* phishing_classifier_;

+ 26 - 26
patches/extra/ungoogled-chromium/add-flag-to-configure-extension-downloading.patch

@@ -3,7 +3,7 @@
 
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -239,6 +239,16 @@ const unsigned kOsDesktop = kOsMac | kOs
+@@ -241,6 +241,16 @@ const unsigned kOsDesktop = kOsMac | kOs
  const unsigned kOsAura = kOsWin | kOsLinux | kOsCrOS;
  #endif  // USE_AURA || OS_ANDROID
  
@@ -20,7 +20,7 @@
  const FeatureEntry::Choice kTouchEventFeatureDetectionChoices[] = {
      {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
      {flags_ui::kGenericExperimentChoiceEnabled,
-@@ -1351,6 +1361,10 @@ const FeatureEntry::FeatureVariation kQu
+@@ -1412,6 +1422,10 @@ const FeatureEntry::Choice kEnableCrOSAc
  //
  // When adding a new choice, add it to the end of the list.
  const FeatureEntry kFeatureEntries[] = {
@@ -65,30 +65,6 @@
    } else {
      return false;
    }
---- a/chrome/browser/extensions/extension_management.cc
-+++ b/chrome/browser/extensions/extension_management.cc
-@@ -8,6 +8,7 @@
- 
- #include "base/bind.h"
- #include "base/bind_helpers.h"
-+#include "base/command_line.h"
- #include "base/logging.h"
- #include "base/metrics/histogram_macros.h"
- #include "base/stl_util.h"
-@@ -166,6 +167,13 @@ bool ExtensionManagement::IsInstallation
- bool ExtensionManagement::IsOffstoreInstallAllowed(
-     const GURL& url,
-     const GURL& referrer_url) const {
-+  const base::CommandLine& command_line =
-+      *base::CommandLine::ForCurrentProcess();
-+  if (command_line.HasSwitch("extension-mime-request-handling") &&
-+      command_line.GetSwitchValueASCII("extension-mime-request-handling") ==
-+      "always-prompt-for-install") {
-+    return true;
-+  }
-   // No allowed install sites specified, disallow by default.
-   if (!global_settings_->has_restricted_install_sources)
-     return false;
 --- a/chrome/browser/download/download_crx_util.h
 +++ b/chrome/browser/download/download_crx_util.h
 @@ -43,6 +43,10 @@ scoped_refptr<extensions::CrxInstaller>
@@ -121,3 +97,27 @@
  #endif
  
    // Don't prompt for file types that are marked for opening automatically.
+--- a/chrome/browser/extensions/extension_management.cc
++++ b/chrome/browser/extensions/extension_management.cc
+@@ -8,6 +8,7 @@
+ 
+ #include "base/bind.h"
+ #include "base/bind_helpers.h"
++#include "base/command_line.h"
+ #include "base/logging.h"
+ #include "base/metrics/histogram_macros.h"
+ #include "base/stl_util.h"
+@@ -169,6 +170,13 @@ bool ExtensionManagement::IsInstallation
+ bool ExtensionManagement::IsOffstoreInstallAllowed(
+     const GURL& url,
+     const GURL& referrer_url) const {
++  const base::CommandLine& command_line =
++      *base::CommandLine::ForCurrentProcess();
++  if (command_line.HasSwitch("extension-mime-request-handling") &&
++      command_line.GetSwitchValueASCII("extension-mime-request-handling") ==
++      "always-prompt-for-install") {
++    return true;
++  }
+   // No allowed install sites specified, disallow by default.
+   if (!global_settings_->has_restricted_install_sources)
+     return false;

+ 1 - 1
patches/extra/ungoogled-chromium/add-flag-to-force-punycode-hostnames.patch

@@ -2,7 +2,7 @@
 
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -1373,6 +1373,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -1434,6 +1434,10 @@ const FeatureEntry kFeatureEntries[] = {
       "Disable search engine collection",
       "Prevents search engines from being added automatically.",
       kOsAll, SINGLE_VALUE_TYPE("disable-search-engine-collection")},

+ 1 - 1
patches/extra/ungoogled-chromium/add-flag-to-hide-crashed-bubble.patch

@@ -3,7 +3,7 @@
 
 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
 +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
-@@ -818,7 +818,8 @@ void StartupBrowserCreatorImpl::AddInfoB
+@@ -816,7 +816,8 @@ void StartupBrowserCreatorImpl::AddInfoB
    if (!browser || !profile_ || browser->tab_strip_model()->count() == 0)
      return;
  

+ 3 - 3
patches/extra/ungoogled-chromium/add-flag-to-scroll-tabs.patch

@@ -1,6 +1,6 @@
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -262,6 +262,16 @@ const FeatureEntry::Choice kShowAvatarBu
+@@ -264,6 +264,16 @@ const FeatureEntry::Choice kShowAvatarBu
       "never"}
  };
  
@@ -17,7 +17,7 @@
  const FeatureEntry::Choice kTouchEventFeatureDetectionChoices[] = {
      {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
      {flags_ui::kGenericExperimentChoiceEnabled,
-@@ -3595,6 +3605,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3636,6 +3646,11 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(
           autofill::features::kAutofillEnableAccountWalletStorage)},
  
@@ -80,7 +80,7 @@
      views::View* hit_view = GetEventHandlerForPoint(event.location());
 --- a/chrome/browser/ui/views/frame/browser_root_view.h
 +++ b/chrome/browser/ui/views/frame/browser_root_view.h
-@@ -125,6 +125,8 @@ class BrowserRootView : public views::in
+@@ -127,6 +127,8 @@ class BrowserRootView : public views::in
    int scroll_remainder_x_ = 0;
    int scroll_remainder_y_ = 0;
  

+ 6 - 6
patches/extra/ungoogled-chromium/add-flag-to-show-avatar-button.patch

@@ -1,6 +1,6 @@
 --- a/chrome/browser/about_flags.cc
 +++ b/chrome/browser/about_flags.cc
-@@ -249,6 +249,19 @@ const FeatureEntry::Choice kExtensionHan
+@@ -251,6 +251,19 @@ const FeatureEntry::Choice kExtensionHan
       "always-prompt-for-install"},
  };
  
@@ -20,7 +20,7 @@
  const FeatureEntry::Choice kTouchEventFeatureDetectionChoices[] = {
      {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
      {flags_ui::kGenericExperimentChoiceEnabled,
-@@ -3694,6 +3707,11 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -3733,6 +3746,11 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(arc::kEnableUnifiedAudioFocusFeature)},
  #endif  // defined(OS_CHROMEOS)
  
@@ -34,10 +34,10 @@
       flag_descriptions::kUseAngleDescription, kOsWin,
 --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
 +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
-@@ -256,6 +256,15 @@ void ToolbarView::Init() {
+@@ -265,6 +265,15 @@ void ToolbarView::Init() {
  
-   std::unique_ptr<ToolbarPageActionIconContainerView>
-       toolbar_page_action_container;
+   std::unique_ptr<ToolbarAccountIconContainerView>
+       toolbar_account_icon_container;
 +
 +  const base::CommandLine& command_line =
 +      *base::CommandLine::ForCurrentProcess();
@@ -50,7 +50,7 @@
    bool show_avatar_toolbar_button = true;
    if (base::FeatureList::IsEnabled(
            autofill::features::kAutofillEnableToolbarStatusChip)) {
-@@ -267,11 +276,17 @@ void ToolbarView::Init() {
+@@ -276,11 +285,17 @@ void ToolbarView::Init() {
    } else {
  #if defined(OS_CHROMEOS)
      // ChromeOS only badges Incognito and Guest icons in the browser window.

+ 14 - 14
patches/extra/ungoogled-chromium/add-flag-to-stack-tabs.patch

@@ -1,8 +1,21 @@
 # Add --enable-stacked-tab-strip and --enable-tab-adjust-layout flags to tweak tab strip behavior
 
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1412,6 +1412,10 @@ const FeatureEntry::Choice kEnableCrOSAc
+ //
+ // When adding a new choice, add it to the end of the list.
+ const FeatureEntry kFeatureEntries[] = {
++    {"enable-stacked-tab-strip",
++     "Enable stacking in tab strip",
++     "Forces tabs to be stacked in the tab strip. Otherwise, they follow default behavior.",
++     kOsAll, SINGLE_VALUE_TYPE("enable-stacked-tab-strip")},
+     {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
+      flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
+      SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},
 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
 +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
-@@ -65,14 +65,13 @@ using content::WebContents;
+@@ -69,14 +69,13 @@ using content::WebContents;
  namespace {
  
  bool DetermineTabStripLayoutStacked(PrefService* prefs, bool* adjust_layout) {
@@ -20,16 +33,3 @@
  #endif
  }
  
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -1351,6 +1351,10 @@ const FeatureEntry::FeatureVariation kQu
- //
- // When adding a new choice, add it to the end of the list.
- const FeatureEntry kFeatureEntries[] = {
-+    {"enable-stacked-tab-strip",
-+     "Enable stacking in tab strip",
-+     "Forces tabs to be stacked in the tab strip. Otherwise, they follow default behavior.",
-+     kOsAll, SINGLE_VALUE_TYPE("enable-stacked-tab-strip")},
-     {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
-      flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
-      SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},

+ 1 - 1
patches/extra/ungoogled-chromium/add-ipv6-probing-option.patch

@@ -23,7 +23,7 @@
  enum DnsResolveStatus {
    RESOLVE_STATUS_DNS_SUCCESS = 0,
    RESOLVE_STATUS_PROC_SUCCESS,
-@@ -3210,7 +3206,7 @@ bool HostResolverManager::IsIPv6Reachabl
+@@ -3270,7 +3266,7 @@ bool HostResolverManager::IsIPv6Reachabl
    if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
        kIPv6ProbePeriodMs) {
      last_ipv6_probe_result_ =

+ 127 - 127
patches/extra/ungoogled-chromium/add-suggestions-url-field.patch

@@ -76,99 +76,41 @@
      });
      this.$.actionButton.disabled = !allValid;
    },
---- a/chrome/browser/ui/webui/settings/search_engines_handler.cc
-+++ b/chrome/browser/ui/webui/settings/search_engines_handler.cc
-@@ -37,6 +37,7 @@ namespace {
- const char kSearchEngineField[] = "searchEngine";
- const char kKeywordField[] = "keyword";
- const char kQueryUrlField[] = "queryUrl";
-+const char kSuggestionsUrlField[] = "suggestionsUrl";
- 
- // Dummy number used for indicating that a new search engine is added.
- const int kNewSearchEngineIndex = -1;
-@@ -197,6 +198,9 @@ SearchEnginesHandler::CreateDictionaryFo
-   Profile* profile = Profile::FromWebUI(web_ui());
-   dict->SetString(
-       "url", template_url->url_ref().DisplayURL(UIThreadSearchTermsData()));
-+  dict->SetString("suggestionsUrl",
-+                  template_url->suggestions_url_ref().DisplayURL(
-+                      UIThreadSearchTermsData()));
-   dict->SetBoolean("urlLocked", template_url->prepopulate_id() > 0);
-   GURL icon_url = template_url->favicon_url();
-   if (icon_url.is_valid())
-@@ -293,12 +297,14 @@ void SearchEnginesHandler::HandleSearchE
- void SearchEnginesHandler::OnEditedKeyword(TemplateURL* template_url,
-                                            const base::string16& title,
-                                            const base::string16& keyword,
--                                           const std::string& url) {
-+                                           const std::string& url,
-+                                           const std::string& suggestions_url) {
-   DCHECK(!url.empty());
-   if (template_url)
--    list_controller_.ModifyTemplateURL(template_url, title, keyword, url);
-+    list_controller_.ModifyTemplateURL(template_url, title, keyword, url,
-+                                       suggestions_url);
-   else
--    list_controller_.AddTemplateURL(title, keyword, url);
-+    list_controller_.AddTemplateURL(title, keyword, url, suggestions_url);
- 
-   edit_controller_.reset();
- }
-@@ -329,6 +335,8 @@ bool SearchEnginesHandler::CheckFieldVal
-     is_valid = edit_controller_->IsKeywordValid(base::UTF8ToUTF16(field_value));
-   else if (field_name.compare(kQueryUrlField) == 0)
-     is_valid = edit_controller_->IsURLValid(field_value);
-+  else if (field_name.compare(kSuggestionsUrlField) == 0)
-+    is_valid = edit_controller_->IsSuggestionsURLValid(field_value);
-   else
-     NOTREACHED();
- 
-@@ -350,17 +358,21 @@ void SearchEnginesHandler::HandleSearchE
-   std::string search_engine;
-   std::string keyword;
-   std::string query_url;
-+  std::string suggestions_url;
-   CHECK(args->GetString(0, &search_engine));
-   CHECK(args->GetString(1, &keyword));
-   CHECK(args->GetString(2, &query_url));
-+  CHECK(args->GetString(3, &suggestions_url));
- 
-   // Recheck validity. It's possible to get here with invalid input if e.g. the
-   // user calls the right JS functions directly from the web inspector.
-   if (CheckFieldValidity(kSearchEngineField, search_engine) &&
-       CheckFieldValidity(kKeywordField, keyword) &&
--      CheckFieldValidity(kQueryUrlField, query_url)) {
-+      CheckFieldValidity(kQueryUrlField, query_url) &&
-+      CheckFieldValidity(kSuggestionsUrlField, suggestions_url)) {
-     edit_controller_->AcceptAddOrEdit(base::UTF8ToUTF16(search_engine),
--                                      base::UTF8ToUTF16(keyword), query_url);
-+                                      base::UTF8ToUTF16(keyword),
-+                                      query_url, suggestions_url);
-   }
- }
- 
---- a/chrome/browser/ui/webui/settings/search_engines_handler.h
-+++ b/chrome/browser/ui/webui/settings/search_engines_handler.h
-@@ -46,7 +46,8 @@ class SearchEnginesHandler : public Sett
-   void OnEditedKeyword(TemplateURL* template_url,
-                        const base::string16& title,
-                        const base::string16& keyword,
--                       const std::string& url) override;
-+                       const std::string& url,
-+                       const std::string& suggestions_url) override;
+--- a/chrome/browser/resources/settings/search_engines_page/search_engines_browser_proxy.js
++++ b/chrome/browser/resources/settings/search_engines_page/search_engines_browser_proxy.js
+@@ -24,6 +24,7 @@
+  *            modelIndex: number,
+  *            name: string,
+  *            url: string,
++ *            suggestionsUrl: string,
+  *            urlLocked: boolean}}
+  * @see chrome/browser/ui/webui/settings/search_engine_manager_handler.cc
+  */
+@@ -56,8 +57,10 @@ cr.define('settings', function() {
+      * @param {string} searchEngine
+      * @param {string} keyword
+      * @param {string} queryUrl
++     * @param {string} suggestionsUrl
+      */
+-    searchEngineEditCompleted(searchEngine, keyword, queryUrl) {}
++    searchEngineEditCompleted(
++        searchEngine, keyword, queryUrl, suggestionsUrl) {}
  
-   // SettingsPageUIHandler implementation.
-   void RegisterMessages() override;
-@@ -74,8 +75,8 @@ class SearchEnginesHandler : public Sett
-   // to WebUI. Called from WebUI.
-   void HandleValidateSearchEngineInput(const base::ListValue* args);
+     /** @return {!Promise<!SearchEnginesInfo>} */
+     getSearchEnginesList() {}
+@@ -95,11 +98,12 @@ cr.define('settings', function() {
+     }
  
--  // Checks whether the given user input field (searchEngine, keyword, queryUrl)
--  // is populated with a valid value.
-+  // Checks whether the given user input field (searchEngine, keyword, queryUrl,
-+  // suggestionsUrl) is populated with a valid value.
-   bool CheckFieldValidity(const std::string& field_name,
-                           const std::string& field_value);
+     /** @override */
+-    searchEngineEditCompleted(searchEngine, keyword, queryUrl) {
++    searchEngineEditCompleted(searchEngine, keyword, queryUrl, suggestionsUrl) {
+       chrome.send('searchEngineEditCompleted', [
+         searchEngine,
+         keyword,
+         queryUrl,
++        suggestionsUrl
+       ]);
+     }
  
 --- a/chrome/browser/ui/search_engines/edit_search_engine_controller.cc
 +++ b/chrome/browser/ui/search_engines/edit_search_engine_controller.cc
@@ -243,42 +185,6 @@
  
    // Deletes an unused TemplateURL, if its add was cancelled and it's not
    // already owned by the TemplateURLService.
---- a/chrome/browser/resources/settings/search_engines_page/search_engines_browser_proxy.js
-+++ b/chrome/browser/resources/settings/search_engines_page/search_engines_browser_proxy.js
-@@ -24,6 +24,7 @@
-  *            modelIndex: number,
-  *            name: string,
-  *            url: string,
-+ *            suggestionsUrl: string,
-  *            urlLocked: boolean}}
-  * @see chrome/browser/ui/webui/settings/search_engine_manager_handler.cc
-  */
-@@ -56,8 +57,10 @@ cr.define('settings', function() {
-      * @param {string} searchEngine
-      * @param {string} keyword
-      * @param {string} queryUrl
-+     * @param {string} suggestionsUrl
-      */
--    searchEngineEditCompleted(searchEngine, keyword, queryUrl) {}
-+    searchEngineEditCompleted(
-+        searchEngine, keyword, queryUrl, suggestionsUrl) {}
- 
-     /** @return {!Promise<!SearchEnginesInfo>} */
-     getSearchEnginesList() {}
-@@ -95,11 +98,12 @@ cr.define('settings', function() {
-     }
- 
-     /** @override */
--    searchEngineEditCompleted(searchEngine, keyword, queryUrl) {
-+    searchEngineEditCompleted(searchEngine, keyword, queryUrl, suggestionsUrl) {
-       chrome.send('searchEngineEditCompleted', [
-         searchEngine,
-         keyword,
-         queryUrl,
-+        suggestionsUrl
-       ]);
-     }
- 
 --- a/chrome/browser/ui/search_engines/keyword_editor_controller.cc
 +++ b/chrome/browser/ui/search_engines/keyword_editor_controller.cc
 @@ -21,23 +21,27 @@ KeywordEditorController::KeywordEditorCo
@@ -415,6 +321,100 @@
  
    // Reloads the icon at the specified index.
    void ReloadIcon(int index);
+--- a/chrome/browser/ui/webui/settings/search_engines_handler.cc
++++ b/chrome/browser/ui/webui/settings/search_engines_handler.cc
+@@ -37,6 +37,7 @@ namespace {
+ const char kSearchEngineField[] = "searchEngine";
+ const char kKeywordField[] = "keyword";
+ const char kQueryUrlField[] = "queryUrl";
++const char kSuggestionsUrlField[] = "suggestionsUrl";
+ 
+ // Dummy number used for indicating that a new search engine is added.
+ const int kNewSearchEngineIndex = -1;
+@@ -194,6 +195,9 @@ SearchEnginesHandler::CreateDictionaryFo
+   Profile* profile = Profile::FromWebUI(web_ui());
+   dict->SetString(
+       "url", template_url->url_ref().DisplayURL(UIThreadSearchTermsData()));
++  dict->SetString("suggestionsUrl",
++                  template_url->suggestions_url_ref().DisplayURL(
++                      UIThreadSearchTermsData()));
+   dict->SetBoolean("urlLocked", template_url->prepopulate_id() > 0);
+   GURL icon_url = template_url->favicon_url();
+   if (icon_url.is_valid())
+@@ -290,12 +294,14 @@ void SearchEnginesHandler::HandleSearchE
+ void SearchEnginesHandler::OnEditedKeyword(TemplateURL* template_url,
+                                            const base::string16& title,
+                                            const base::string16& keyword,
+-                                           const std::string& url) {
++                                           const std::string& url,
++                                           const std::string& suggestions_url) {
+   DCHECK(!url.empty());
+   if (template_url)
+-    list_controller_.ModifyTemplateURL(template_url, title, keyword, url);
++    list_controller_.ModifyTemplateURL(template_url, title, keyword, url,
++                                       suggestions_url);
+   else
+-    list_controller_.AddTemplateURL(title, keyword, url);
++    list_controller_.AddTemplateURL(title, keyword, url, suggestions_url);
+ 
+   edit_controller_.reset();
+ }
+@@ -326,6 +332,8 @@ bool SearchEnginesHandler::CheckFieldVal
+     is_valid = edit_controller_->IsKeywordValid(base::UTF8ToUTF16(field_value));
+   else if (field_name.compare(kQueryUrlField) == 0)
+     is_valid = edit_controller_->IsURLValid(field_value);
++  else if (field_name.compare(kSuggestionsUrlField) == 0)
++    is_valid = edit_controller_->IsSuggestionsURLValid(field_value);
+   else
+     NOTREACHED();
+ 
+@@ -347,17 +355,21 @@ void SearchEnginesHandler::HandleSearchE
+   std::string search_engine;
+   std::string keyword;
+   std::string query_url;
++  std::string suggestions_url;
+   CHECK(args->GetString(0, &search_engine));
+   CHECK(args->GetString(1, &keyword));
+   CHECK(args->GetString(2, &query_url));
++  CHECK(args->GetString(3, &suggestions_url));
+ 
+   // Recheck validity. It's possible to get here with invalid input if e.g. the
+   // user calls the right JS functions directly from the web inspector.
+   if (CheckFieldValidity(kSearchEngineField, search_engine) &&
+       CheckFieldValidity(kKeywordField, keyword) &&
+-      CheckFieldValidity(kQueryUrlField, query_url)) {
++      CheckFieldValidity(kQueryUrlField, query_url) &&
++      CheckFieldValidity(kSuggestionsUrlField, suggestions_url)) {
+     edit_controller_->AcceptAddOrEdit(base::UTF8ToUTF16(search_engine),
+-                                      base::UTF8ToUTF16(keyword), query_url);
++                                      base::UTF8ToUTF16(keyword),
++                                      query_url, suggestions_url);
+   }
+ }
+ 
+--- a/chrome/browser/ui/webui/settings/search_engines_handler.h
++++ b/chrome/browser/ui/webui/settings/search_engines_handler.h
+@@ -46,7 +46,8 @@ class SearchEnginesHandler : public Sett
+   void OnEditedKeyword(TemplateURL* template_url,
+                        const base::string16& title,
+                        const base::string16& keyword,
+-                       const std::string& url) override;
++                       const std::string& url,
++                       const std::string& suggestions_url) override;
+ 
+   // SettingsPageUIHandler implementation.
+   void RegisterMessages() override;
+@@ -74,8 +75,8 @@ class SearchEnginesHandler : public Sett
+   // to WebUI. Called from WebUI.
+   void HandleValidateSearchEngineInput(const base::ListValue* args);
+ 
+-  // Checks whether the given user input field (searchEngine, keyword, queryUrl)
+-  // is populated with a valid value.
++  // Checks whether the given user input field (searchEngine, keyword, queryUrl,
++  // suggestionsUrl) is populated with a valid value.
+   bool CheckFieldValidity(const std::string& field_name,
+                           const std::string& field_value);
+ 
 --- a/components/search_engines/template_url_service.cc
 +++ b/components/search_engines/template_url_service.cc
 @@ -608,7 +608,8 @@ void TemplateURLService::IncrementUsageC

+ 31 - 31
patches/extra/ungoogled-chromium/default-to-https-scheme.patch

@@ -6,20 +6,26 @@
 # Note that there is a small hack in AutocompleteInput::HasHTTPScheme: we check kHttpsScheme instead.
 # All other changes in omnibox were made to preserve old behavior.
 
---- a/components/url_formatter/url_fixer.cc
-+++ b/components/url_formatter/url_fixer.cc
-@@ -438,9 +438,9 @@ std::string SegmentURLInternal(std::stri
-         (*text)[semicolon] = ';';
-     }
-     if (!found_scheme) {
--      // Couldn't determine the scheme, so just default to http.
-+      // Couldn't determine the scheme, so just default to https.
-       parts->scheme.reset();
--      scheme = url::kHttpScheme;
-+      scheme = url::kHttpsScheme;
+--- a/chrome/browser/resources/bookmarks/edit_dialog.js
++++ b/chrome/browser/resources/bookmarks/edit_dialog.js
+@@ -95,7 +95,7 @@ Polymer({
+ 
+   /**
+    * Validates the value of the URL field, returning true if it is a valid URL.
+-   * May modify the value by prepending 'http://' in order to make it valid.
++   * May modify the value by prepending 'https://' in order to make it valid.
+    * @return {boolean}
+    * @private
+    */
+@@ -107,7 +107,7 @@ Polymer({
+       return true;
      }
-   }
  
+-    this.urlValue_ = 'http://' + originalValue;
++    this.urlValue_ = 'https://' + originalValue;
+ 
+     if (urlInput.validate()) {
+       return true;
 --- a/components/omnibox/browser/autocomplete_input.cc
 +++ b/components/omnibox/browser/autocomplete_input.cc
 @@ -237,7 +237,7 @@ metrics::OmniboxInputType AutocompleteIn
@@ -51,7 +57,7 @@
  void AutocompleteInput::UpdateText(const base::string16& text,
 --- a/components/omnibox/browser/autocomplete_provider.cc
 +++ b/components/omnibox/browser/autocomplete_provider.cc
-@@ -235,11 +235,11 @@ size_t AutocompleteProvider::TrimHttpPre
+@@ -239,11 +239,11 @@ size_t AutocompleteProvider::TrimHttpPre
    if (!AutocompleteInput::HasHTTPScheme(*url))
      return 0;
    size_t scheme_pos =
@@ -65,23 +71,17 @@
    const size_t after_slashes = std::min(url->length(), prefix_end + 2);
    while ((prefix_end < after_slashes) && ((*url)[prefix_end] == '/'))
      ++prefix_end;
---- a/chrome/browser/resources/bookmarks/edit_dialog.js
-+++ b/chrome/browser/resources/bookmarks/edit_dialog.js
-@@ -95,7 +95,7 @@ Polymer({
- 
-   /**
-    * Validates the value of the URL field, returning true if it is a valid URL.
--   * May modify the value by prepending 'http://' in order to make it valid.
-+   * May modify the value by prepending 'https://' in order to make it valid.
-    * @return {boolean}
-    * @private
-    */
-@@ -107,7 +107,7 @@ Polymer({
-       return true;
+--- a/components/url_formatter/url_fixer.cc
++++ b/components/url_formatter/url_fixer.cc
+@@ -438,9 +438,9 @@ std::string SegmentURLInternal(std::stri
+         (*text)[semicolon] = ';';
      }
+     if (!found_scheme) {
+-      // Couldn't determine the scheme, so just default to http.
++      // Couldn't determine the scheme, so just default to https.
+       parts->scheme.reset();
+-      scheme = url::kHttpScheme;
++      scheme = url::kHttpsScheme;
+     }
+   }
  
--    this.urlValue_ = 'http://' + originalValue;
-+    this.urlValue_ = 'https://' + originalValue;
- 
-     if (urlInput.validate()) {
-       return true;

+ 53 - 53
patches/extra/ungoogled-chromium/disable-download-quarantine.patch

@@ -1,56 +1,5 @@
 # Disables file download quarantining
 
---- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc
-+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
-@@ -433,7 +433,7 @@ void PepperFileIOHost::OnLocalFileOpened
-     ppapi::host::ReplyMessageContext reply_context,
-     const base::FilePath& path,
-     base::File::Error error_code) {
--#if defined(OS_WIN) || defined(OS_LINUX)
-+#if 0
-   // Quarantining a file before its contents are available is only supported on
-   // Windows and Linux.
-   if (!FileOpenForWrite(open_flags_) || error_code != base::File::FILE_OK) {
-@@ -453,7 +453,7 @@ void PepperFileIOHost::OnLocalFileOpened
- #endif
- }
- 
--#if defined(OS_WIN) || defined(OS_LINUX)
-+#if 0
- void PepperFileIOHost::OnLocalFileQuarantined(
-     ppapi::host::ReplyMessageContext reply_context,
-     const base::FilePath& path,
---- a/content/browser/renderer_host/pepper/pepper_file_io_host.h
-+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.h
-@@ -15,7 +15,6 @@
- #include "base/macros.h"
- #include "base/memory/ref_counted.h"
- #include "base/memory/weak_ptr.h"
--#include "components/download/quarantine/quarantine.h"
- #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
- #include "ipc/ipc_listener.h"
- #include "ipc/ipc_platform_file.h"
-@@ -92,10 +91,6 @@ class PepperFileIOHost : public ppapi::h
-                          const base::FilePath& path,
-                          base::File::Error error_code);
- 
--  void OnLocalFileQuarantined(ppapi::host::ReplyMessageContext reply_context,
--                              const base::FilePath& path,
--                              download::QuarantineFileResult quarantine_result);
--
-   void SendFileOpenReply(ppapi::host::ReplyMessageContext reply_context,
-                          base::File::Error error_code);
- 
---- a/content/browser/BUILD.gn
-+++ b/content/browser/BUILD.gn
-@@ -54,7 +54,6 @@ jumbo_source_set("browser") {
-     "//components/discardable_memory/service",
-     "//components/download/database",
-     "//components/download/public/common:public",
--    "//components/download/quarantine",
-     "//components/filename_generation",
-     "//components/link_header_util",
-     "//components/metrics",
 --- a/components/download/internal/common/base_file.cc
 +++ b/components/download/internal/common/base_file.cc
 @@ -23,7 +23,6 @@
@@ -61,7 +10,7 @@
  #include "crypto/secure_hash.h"
  
  #if defined(OS_WIN)
-@@ -522,129 +521,12 @@ DownloadInterruptReason BaseFile::Publis
+@@ -532,129 +531,12 @@ DownloadInterruptReason BaseFile::Publis
  }
  #endif  // defined(OS_ANDROID)
  
@@ -191,7 +140,7 @@
  
  void BaseFile::AnnotateWithSourceInformation(
      const std::string& client_guid,
-@@ -652,30 +534,8 @@ void BaseFile::AnnotateWithSourceInforma
+@@ -662,30 +544,8 @@ void BaseFile::AnnotateWithSourceInforma
      const GURL& referrer_url,
      mojo::PendingRemote<quarantine::mojom::Quarantine> remote_quarantine,
      OnAnnotationDoneCallback on_annotation_done_callback) {
@@ -224,3 +173,54 @@
  }
  
  }  // namespace download
+--- a/content/browser/BUILD.gn
++++ b/content/browser/BUILD.gn
+@@ -55,7 +55,6 @@ jumbo_source_set("browser") {
+     "//components/discardable_memory/service",
+     "//components/download/database",
+     "//components/download/public/common:public",
+-    "//components/download/quarantine",
+     "//components/filename_generation",
+     "//components/link_header_util",
+     "//components/metrics",
+--- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc
++++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
+@@ -433,7 +433,7 @@ void PepperFileIOHost::OnLocalFileOpened
+     ppapi::host::ReplyMessageContext reply_context,
+     const base::FilePath& path,
+     base::File::Error error_code) {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if 0
+   // Quarantining a file before its contents are available is only supported on
+   // Windows and Linux.
+   if (!FileOpenForWrite(open_flags_) || error_code != base::File::FILE_OK) {
+@@ -453,7 +453,7 @@ void PepperFileIOHost::OnLocalFileOpened
+ #endif
+ }
+ 
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if 0
+ void PepperFileIOHost::OnLocalFileQuarantined(
+     ppapi::host::ReplyMessageContext reply_context,
+     const base::FilePath& path,
+--- a/content/browser/renderer_host/pepper/pepper_file_io_host.h
++++ b/content/browser/renderer_host/pepper/pepper_file_io_host.h
+@@ -15,7 +15,6 @@
+ #include "base/macros.h"
+ #include "base/memory/ref_counted.h"
+ #include "base/memory/weak_ptr.h"
+-#include "components/download/quarantine/quarantine.h"
+ #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
+ #include "ipc/ipc_listener.h"
+ #include "ipc/ipc_platform_file.h"
+@@ -92,10 +91,6 @@ class PepperFileIOHost : public ppapi::h
+                          const base::FilePath& path,
+                          base::File::Error error_code);
+ 
+-  void OnLocalFileQuarantined(ppapi::host::ReplyMessageContext reply_context,
+-                              const base::FilePath& path,
+-                              download::QuarantineFileResult quarantine_result);
+-
+   void SendFileOpenReply(ppapi::host::ReplyMessageContext reply_context,
+                          base::File::Error error_code);
+ 

+ 3 - 3
patches/extra/ungoogled-chromium/disable-webgl-renderer-info.patch

@@ -3,8 +3,8 @@
 
 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
 +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
-@@ -3339,16 +3339,14 @@ ScriptValue WebGLRenderingContextBase::g
-       return ScriptValue::CreateNull(script_state);
+@@ -3347,16 +3347,14 @@ ScriptValue WebGLRenderingContextBase::g
+       return ScriptValue::CreateNull(script_state->GetIsolate());
      case WebGLDebugRendererInfo::kUnmaskedRendererWebgl:
        if (ExtensionEnabled(kWebGLDebugRendererInfoName))
 -        return WebGLAny(script_state,
@@ -13,7 +13,7 @@
        SynthesizeGLError(
            GL_INVALID_ENUM, "getParameter",
            "invalid parameter name, WEBGL_debug_renderer_info not enabled");
-       return ScriptValue::CreateNull(script_state);
+       return ScriptValue::CreateNull(script_state->GetIsolate());
      case WebGLDebugRendererInfo::kUnmaskedVendorWebgl:
        if (ExtensionEnabled(kWebGLDebugRendererInfoName))
 -        return WebGLAny(script_state,

+ 17 - 17
patches/extra/ungoogled-chromium/enable-page-saving-on-more-pages.patch

@@ -1,23 +1,8 @@
 # Add more URL schemes allowed for saving
 
---- a/content/public/common/url_utils.cc
-+++ b/content/public/common/url_utils.cc
-@@ -25,11 +25,7 @@ bool HasWebUIScheme(const GURL& url) {
- }
- 
- bool IsSavableURL(const GURL& url) {
--  for (auto& scheme : GetSavableSchemes()) {
--    if (url.SchemeIs(scheme))
--      return true;
--  }
--  return false;
-+  return true;
- }
- 
- bool IsURLHandledByNetworkStack(const GURL& url) {
 --- a/chrome/browser/ui/browser_commands.cc
 +++ b/chrome/browser/ui/browser_commands.cc
-@@ -376,12 +376,6 @@ int GetContentRestrictions(const Browser
+@@ -377,12 +377,6 @@ int GetContentRestrictions(const Browser
      CoreTabHelper* core_tab_helper =
          CoreTabHelper::FromWebContents(current_tab);
      content_restrictions = core_tab_helper->content_restrictions();
@@ -30,7 +15,7 @@
      if (current_tab->ShowingInterstitialPage())
        content_restrictions |= CONTENT_RESTRICTION_PRINT;
    }
-@@ -963,8 +957,7 @@ bool CanSavePage(const Browser* browser)
+@@ -1026,8 +1020,7 @@ bool CanSavePage(const Browser* browser)
            prefs::kAllowFileSelectionDialogs)) {
      return false;
    }
@@ -79,3 +64,18 @@
  };
  
  // These lists are lazily initialized below and are leaked on shutdown to
+--- a/content/public/common/url_utils.cc
++++ b/content/public/common/url_utils.cc
+@@ -25,11 +25,7 @@ bool HasWebUIScheme(const GURL& url) {
+ }
+ 
+ bool IsSavableURL(const GURL& url) {
+-  for (auto& scheme : GetSavableSchemes()) {
+-    if (url.SchemeIs(scheme))
+-      return true;
+-  }
+-  return false;
++  return true;
+ }
+ 
+ bool IsURLHandledByNetworkStack(const GURL& url) {

+ 2 - 2
patches/extra/ungoogled-chromium/enable-paste-and-go-new-tab-button.patch

@@ -1,6 +1,6 @@
 --- a/chrome/browser/ui/views/tabs/new_tab_button.cc
 +++ b/chrome/browser/ui/views/tabs/new_tab_button.cc
-@@ -69,10 +69,8 @@ const gfx::Size NewTabButton::kButtonSiz
+@@ -84,10 +84,8 @@ class NewTabButton::HighlightPathGenerat
  NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
      : views::ImageButton(listener), tab_strip_(tab_strip) {
    set_animate_on_state_change(true);
@@ -13,7 +13,7 @@
        AddChildView(std::make_unique<views::InkDropContainerView>());
 --- a/chrome/browser/ui/views/tabs/tab_strip.cc
 +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
-@@ -2934,15 +2934,12 @@ void TabStrip::ButtonPressed(views::Butt
+@@ -3046,15 +3046,12 @@ void TabStrip::ButtonPressed(views::Butt
  
        const ui::MouseEvent& mouse = static_cast<const ui::MouseEvent&>(event);
        if (mouse.IsOnlyMiddleMouseButton()) {

+ 1 - 1
patches/extra/ungoogled-chromium/popups-to-tabs.patch

@@ -2,7 +2,7 @@
 
 --- a/content/renderer/render_view_impl.cc
 +++ b/content/renderer/render_view_impl.cc
-@@ -281,7 +281,7 @@ WindowOpenDisposition RenderViewImpl::Na
+@@ -279,7 +279,7 @@ WindowOpenDisposition RenderViewImpl::Na
      case blink::kWebNavigationPolicyNewWindow:
        return WindowOpenDisposition::NEW_WINDOW;
      case blink::kWebNavigationPolicyNewPopup:

+ 0 - 8
patches/extra/ungoogled-chromium/searx.patch

@@ -892,11 +892,3 @@
      &duckduckgo,
      &google,
      &bing,
-@@ -946,6 +1052,7 @@ const PrepopulatedEngine* const kAllEngi
-     &mail_ru,
-     &naver,
-     &qwant,
-+    &searx,
-     &seznam,
-     &sogou,
-     &yahoo,

+ 1 - 1
patches/series

@@ -36,7 +36,6 @@ core/ungoogled-chromium/fix-building-without-safebrowsing.patch
 core/ungoogled-chromium/remove-unused-preferences-fields.patch
 core/bromite/disable-fetching-field-trials.patch
 
-extra/inox-patchset/chromium-widevine.patch
 extra/inox-patchset/0006-modify-default-prefs.patch
 extra/inox-patchset/0008-restore-classic-ntp.patch
 extra/inox-patchset/0011-add-duckduckgo-search-engine.patch
@@ -47,6 +46,7 @@ extra/inox-patchset/0019-disable-battery-status-service.patch
 extra/debian_buster/gn/parallel.patch
 extra/debian_buster/fixes/ps-print.patch
 extra/debian_buster/fixes/connection-message.patch
+extra/debian_buster/fixes/widevine-enable-version-string.patch
 extra/debian_buster/disable/android.patch
 extra/debian_buster/disable/fuzzers.patch
 extra/debian_buster/disable/welcome-page.patch

+ 139 - 12
pruning.list

@@ -9,6 +9,7 @@ base/test/data/file_util/binary_file.bin
 base/test/data/file_util/binary_file_diff.bin
 base/test/data/file_util/binary_file_same.bin
 base/test/data/file_version_info_unittest/FileVersionInfoTest1.dll
+base/test/data/file_version_info_unittest/no_version_info.dll
 base/test/data/pe_image/pe_image_test_32.dll
 base/test/data/pe_image/pe_image_test_64.dll
 base/test/data/pe_image/pe_image_test_arm64.dll
@@ -16,18 +17,20 @@ build/android/CheckInstallApk-debug.apk
 build/android/chromium-debug.keystore
 build/android/tests/symbolize/liba.so
 build/android/tests/symbolize/libb.so
-build/linux/sysroot_scripts/debian-archive-sid-stable.gpg
+build/linux/sysroot_scripts/debian_archive_unstable.gpg
 build/util/android_chrome_version.pyc
 buildtools/linux64/gn
 buildtools/third_party/eu-strip/bin/eu-strip
 chrome/browser/chromeos/power/ml/smart_dim/20181115_example_preprocessor_config.pb
-chrome/browser/chromeos/power/ml/smart_dim/20190221_example_preprocessor_config.pb
+chrome/browser/chromeos/power/ml/smart_dim/20190521_example_preprocessor_config.pb
 chrome/browser/resource_coordinator/tab_ranker/pairwise_preprocessor_config.pb
 chrome/browser/resources/chromeos/assistant_optin/voice_already_setup.webm
 chrome/browser/resources/chromeos/camera/src/sounds/record_end.ogg
 chrome/browser/resources/chromeos/camera/src/sounds/record_start.ogg
 chrome/browser/resources/chromeos/camera/src/sounds/shutter.ogg
-chrome/browser/resources/chromeos/camera/src/sounds/tick.ogg
+chrome/browser/resources/chromeos/camera/src/sounds/tick_final.ogg
+chrome/browser/resources/chromeos/camera/src/sounds/tick_inc.ogg
+chrome/browser/resources/chromeos/camera/src/sounds/tick_start.ogg
 chrome/browser/resources/chromeos/chromevox/chromevox/background/earcons/alert_modal.ogg
 chrome/browser/resources/chromeos/chromevox/chromevox/background/earcons/alert_nonmodal.ogg
 chrome/browser/resources/chromeos/chromevox/chromevox/background/earcons/button.ogg
@@ -64,6 +67,7 @@ chrome/browser/resources/default_apps/gmail.crx
 chrome/browser/resources/default_apps/youtube.crx
 chrome/browser/resources/media/mei_preload/preloaded_data.pb
 chrome/browser/ui/app_list/search/search_result_ranker/20190722_example_preprocessor_config.pb
+chrome/browser/ui/app_list/search/search_result_ranker/search_ranker_assets/20190923_example_preprocessor_config.pb
 chrome/chrome_cleaner/parsers/shortcut_parser/target/data/lnk_parser_fuzzer/Network Share Test.lnk
 chrome/chrome_cleaner/parsers/shortcut_parser/target/data/lnk_parser_fuzzer/New folder - Shortcut.lnk
 chrome/chrome_cleaner/parsers/shortcut_parser/target/data/lnk_parser_fuzzer/long_name.lnk
@@ -203,7 +207,9 @@ device/fido/response_data_fuzzer_corpus/make_credential_response_corpus
 device/fido/response_data_fuzzer_corpus/register1
 device/fido/response_data_fuzzer_corpus/sign0
 device/fido/response_data_fuzzer_corpus/sign1
+fuchsia/engine/test/data/bear-vp8a.webm
 headless/test/data/protocol/emulation/resources/video.webm
+ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm
 ios/chrome/test/data/sessions/corrupted.plist
 ios/chrome/test/data/sessions/session_m57.plist
 ios/chrome/test/data/sessions/session_m58.plist
@@ -226,6 +232,11 @@ media/midi/fuzz/corpus/note_on_with_running_status
 media/midi/fuzz/corpus/partial_gm_on_2
 media/midi/fuzz/corpus/partial_note_on_3
 media/midi/fuzz/corpus/reserved_message_1_with_data_bytes
+media/midi/fuzz/usb_midi_descriptor_corpus/a
+media/midi/fuzz/usb_midi_descriptor_corpus/b
+media/midi/fuzz/usb_midi_descriptor_corpus/c
+media/midi/fuzz/usb_midi_descriptor_corpus/d
+media/midi/fuzz/usb_midi_descriptor_corpus/e
 mojo/public/tools/fuzzers/message_corpus/message_0.mojomsg
 mojo/public/tools/fuzzers/message_corpus/message_1.mojomsg
 mojo/public/tools/fuzzers/message_corpus/message_10.mojomsg
@@ -456,6 +467,16 @@ net/data/fuzzer_data/ct_decode_signed_certificate_timestamp_fuzzer/ce74af6e2ce87
 net/data/fuzzer_data/ct_decode_signed_certificate_timestamp_fuzzer/dafea2c7c305815546f43e13a376c5c5216bff22
 net/data/fuzzer_data/ct_decode_signed_certificate_timestamp_fuzzer/e66eb703ff487697a9c47b2cd8f92cebd50805a2
 net/data/fuzzer_data/ct_decode_signed_certificate_timestamp_fuzzer/f24a615d79cfde25caa8cb6b355e8b95fb1da755
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/1
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/10
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/2
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/3
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/4
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/5
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/6
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/7
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/8
+net/data/fuzzer_data/dns_parse_domain_ascii_win_fuzzer/9
 net/data/fuzzer_data/http_server_requests/websocket.bin
 net/data/fuzzer_data/net_crl_set_fuzzer/crlset_by_intermediate_serial.raw
 net/data/fuzzer_data/net_crl_set_fuzzer/crlset_by_leaf_spki.raw
@@ -3588,6 +3609,10 @@ third_party/angle/third_party/glmark2/src/data/models/cat.3ds
 third_party/angle/third_party/glmark2/src/data/models/cube.3ds
 third_party/angle/third_party/glmark2/src/data/models/horse.3ds
 third_party/angle/third_party/vulkan-loader/src/loader/loader.aps
+third_party/angle/third_party/vulkan-tools/src/external/x64/lib/vulkan-1.lib
+third_party/angle/third_party/vulkan-tools/src/external/x86/lib/vulkan-1.lib
+third_party/angle/third_party/vulkan-validation-layers/src/external/x64/lib/vulkan-1.lib
+third_party/angle/third_party/vulkan-validation-layers/src/external/x86/lib/vulkan-1.lib
 third_party/bazel/desugar/Desugar-runtime.jar
 third_party/blink/manual_tests/WebKitSite.webarchive
 third_party/blink/manual_tests/accessibility/resources/AppletTest.class
@@ -8055,7 +8080,6 @@ third_party/boringssl/src/fuzz/ssl_ctx_api_corpus/fbc2a9a1fab84d662fe4b867f7fca1
 third_party/boringssl/src/fuzz/ssl_ctx_api_corpus/fce4af092fbdbefa702bde853ade273e657c1818
 third_party/boringssl/src/fuzz/ssl_ctx_api_corpus/fe6076054db748a16858ba736c4eee9c66a6d0c5
 third_party/boringssl/src/fuzz/ssl_ctx_api_corpus/ff4bd4e5db82f4794e8b70af760e6c64e45d10fc
-third_party/boringssl/src/ssl/test/runner/ed25519/testdata/sign.input.gz
 third_party/boringssl/src/util/ar/testdata/linux/bar.cc.o
 third_party/boringssl/src/util/ar/testdata/linux/foo.c.o
 third_party/boringssl/src/util/ar/testdata/linux/libsample.a
@@ -8294,6 +8318,14 @@ third_party/depot_tools/ninja-linux32
 third_party/depot_tools/ninja-linux64
 third_party/depot_tools/ninja-mac
 third_party/depot_tools/ninja.exe
+third_party/devtools-node-modules/third_party/node_modules/fsevents/fsevents.node
+third_party/devtools-node-modules/third_party/node_modules/karma-typescript/node_modules/source-map/lib/mappings.wasm
+third_party/devtools-node-modules/third_party/node_modules/querystring/.History.md.un~
+third_party/devtools-node-modules/third_party/node_modules/querystring/.Readme.md.un~
+third_party/devtools-node-modules/third_party/node_modules/querystring/.package.json.un~
+third_party/devtools-node-modules/third_party/node_modules/querystring/test/.index.js.un~
+third_party/devtools-node-modules/third_party/node_modules/timers-browserify/.DS_Store
+third_party/devtools-node-modules/third_party/node_modules/ws/lib/.DS_Store
 third_party/ffmpeg/tests/ref/fate/sub-microdvd-remux
 third_party/ffmpeg/tests/reference.pnm
 third_party/flatbuffers/src/android/gradle/wrapper/gradle-wrapper.jar
@@ -12982,10 +13014,12 @@ third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5634197349203968
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5651059347816448
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5660711141769216
+third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5667673584697344
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5669437462544384
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5670861909524480
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5672006905757696
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5672913680728064
+third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5675720390475776
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5676773460672512
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5680398559870976
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5690658895953920
@@ -12997,12 +13031,14 @@ third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5716947896893440
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5718215406125056
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5725847365877760
+third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5728664968232960
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5738978499624960
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5739000398086144
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5743250149736448
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5747265633779712
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5750092395970560
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5750420593442816
+third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5754526379802624
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5758598970343424
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5760768497156096
 third_party/harfbuzz-ng/src/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5761434614497280
@@ -13307,13 +13343,73 @@ third_party/harfbuzz-ng/src/test/subset/data/expected/cff-japanese/SourceHanSans
 third_party/harfbuzz-ng/src/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.61,63,65,6B.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E00,4E02,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E00,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E00,4E05,4E07.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E02,4E03,4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E02.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E05,4E07,4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.default.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E00,4E02,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E00,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E00,4E05,4E07.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E02,4E03,4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E02.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints-retain-gids.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E00,4E02,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E00,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E00,4E05,4E07.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E02,4E03,4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E02.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E05,4E07,4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.drop-hints.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E00,4E02,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E00,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E00,4E05,4E07.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E02,4E03,4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E02.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E05,4E07,4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.name-ids.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E00,4E02,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E00,4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E00,4E05,4E07.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E02,4E03,4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E02.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E03.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E05,4E07,4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E08,4E09.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.4E08.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/cmap14/cmap14_font1.retain-gids.retain-all-codepoint.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,43.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,46.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.43,46.otf
 third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.28,29.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.28,2B.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.29,2B.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.retain-all-codepoint.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,29.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,2B.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.29,2B.otf
+third_party/harfbuzz-ng/src/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.retain-all-codepoint.otf
 third_party/harfbuzz-ng/src/test/subset/data/fonts/SourceHanSans-Regular_subset.otf
 third_party/harfbuzz-ng/src/test/subset/data/fonts/SourceSansPro-Regular.otf
+third_party/harfbuzz-ng/src/test/subset/data/fonts/cmap14_font1.otf
 third_party/harfbuzz-ng/src/test/subset/data/fonts/gpos1_2_font.otf
+third_party/harfbuzz-ng/src/test/subset/data/fonts/gpos3_font3.otf
 third_party/hunspell/fuzz/bdict_corpus/02a25363e79f11115132055fb880773b325f6aef
 third_party/hunspell/fuzz/bdict_corpus/0883e336027e9e21911a277a9d8fa4c1b9490edd
 third_party/hunspell/fuzz/bdict_corpus/0c70b309d63d09ac033b8c80abff19457c93772a
@@ -15450,7 +15546,6 @@ third_party/llvm/lld/test/ELF/Inputs/mips-options.o
 third_party/llvm/lld/test/ELF/Inputs/no-symtab.o
 third_party/llvm/lld/test/ELF/Inputs/ppc64le-quadword-ldst.o
 third_party/llvm/lld/test/ELF/Inputs/sht-group-gold-r.elf
-third_party/llvm/lld/test/ELF/Inputs/version-undef-sym.so
 third_party/llvm/lld/test/ELF/Inputs/version-use.so
 third_party/llvm/lld/test/ELF/lto/Inputs/drop-debug-info.bc
 third_party/llvm/lld/test/mach-o/Inputs/lib-search-paths/usr/lib/libmyshared.dylib
@@ -16106,6 +16201,7 @@ third_party/llvm/llvm/test/Transforms/SampleProfile/Inputs/indirect-call.afdo
 third_party/llvm/llvm/test/Transforms/SampleProfile/Inputs/indirect-call.compact.afdo
 third_party/llvm/llvm/test/Transforms/SampleProfile/Inputs/inline.compactbinary.afdo
 third_party/llvm/llvm/test/Transforms/SampleProfile/Inputs/inline.extbinary.afdo
+third_party/llvm/llvm/test/Transforms/SampleProfile/Inputs/profsampleacc.extbinary.afdo
 third_party/llvm/llvm/test/Verifier/non-integer-gep-index.ll.bc
 third_party/llvm/llvm/test/tools/dsymutil/Inputs/absolute_sym.macho.i386
 third_party/llvm/llvm/test/tools/dsymutil/Inputs/absolute_sym.macho.i386.o
@@ -16610,7 +16706,6 @@ third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/ppc64.exe
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/reginfo.obj.elf-mipsel
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs-no-symtab.obj.coff-i386
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs.obj.elf-mips
-third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs.obj.elf-ppc64
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs.obj.elf-x86_64
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs.obj.macho-arm
 third_party/llvm/llvm/test/tools/llvm-readobj/Inputs/relocs.obj.macho-i386
@@ -16823,14 +16918,13 @@ third_party/openscreen/src/streaming/cast/sender_report_parser_fuzzer_seeds/comp
 third_party/openscreen/src/streaming/cast/sender_report_parser_fuzzer_seeds/rtcp_packet_with_no_sender_report.bin
 third_party/openscreen/src/streaming/cast/sender_report_parser_fuzzer_seeds/sender_report_with_report_block.bin
 third_party/openscreen/src/streaming/cast/sender_report_parser_fuzzer_seeds/sender_report_without_report_block.bin
+third_party/openscreen/src/test/data/cast/common/certificate/testsuite/testsuite1.pb
 third_party/pdfium/testing/resources/bug_552046.in
+third_party/pdfium/testing/resources/bug_861842.in
 third_party/pdfium/testing/resources/hint_table_102p.bin
-third_party/pdfium/testing/resources/pixel/bug_304.in
-third_party/pdfium/testing/resources/pixel/bug_453723.in
-third_party/pdfium/testing/resources/pixel/bug_512557.in
+third_party/pdfium/testing/resources/pixel/bug_1388_2.in
 third_party/pdfium/testing/resources/pixel/bug_527174.in
 third_party/pdfium/testing/resources/pixel/bug_591137.in
-third_party/pdfium/testing/resources/pixel/bug_71.in
 third_party/pdfium/testing/resources/pixel/xfa_specific/bug_1258_1.in
 third_party/pdfium/testing/resources/pixel/xfa_specific/bug_1258_2.in
 third_party/pdfium/testing/resources/pixel/xfa_specific/bug_1258_3.in
@@ -16886,7 +16980,6 @@ third_party/pyelftools/test/testfiles_for_unittests/simple_gcc.elf.arm
 third_party/pywebsocket/src/test/cert/client_cert.p12
 third_party/quic_trace/src/examples/example.json.gz
 third_party/quic_trace/src/examples/example.qtr
-third_party/sfntly/fuzzers/corpora/sfntly_fuzzer/test.ttc
 third_party/sfntly/src/cpp/ext/redist/cmake-2.8.5-win32-x86.zip
 third_party/sfntly/src/cpp/ext/redist/gtest-1.6.0.zip
 third_party/sfntly/src/cpp/ext/redist/icu4c-4_6_1-Win32-msvc10.zip
@@ -16894,6 +16987,7 @@ third_party/sfntly/src/java/lib/icu4j-4_8_1_1.jar
 third_party/sfntly/src/java/lib/icu4j-charset-4_8_1_1.jar
 third_party/sfntly/src/java/lib/jcommander-1.27.jar
 third_party/sfntly/src/java/lib/junit-4.10.jar
+third_party/skia/experimental/wasm-skp-debugger/debugger/anim.mskp
 third_party/skia/experimental/wasm-skp-debugger/debugger/sample.skp
 third_party/skia/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.jar
 third_party/skia/platform_tools/android/bin/linux/perfhost
@@ -16938,6 +17032,8 @@ third_party/snappy/src/testdata/kppkn.gtb
 third_party/spirv-cross/spirv-cross/tests-other/c_api_test.spv
 third_party/spirv-cross/spirv-cross/tests-other/msl_constexpr_test.spv
 third_party/spirv-cross/spirv-cross/tests-other/msl_resource_binding.spv
+third_party/spirv-cross/spirv-cross/tests-other/msl_ycbcr_conversion_test.spv
+third_party/spirv-cross/spirv-cross/tests-other/msl_ycbcr_conversion_test_2.spv
 third_party/sqlite/fuzz/db_corpus/dbfuzz2-seed1.db
 third_party/sqlite/fuzz/db_corpus/fuzzdata1.db
 third_party/sqlite/fuzz/db_corpus/fuzzdata2.db
@@ -16980,6 +17076,18 @@ third_party/sqlite/sqlite-src-3290000/test/fuzzdata8.db
 third_party/sqlite/sqlite-src-3290000/test/sessionfuzz-data1.db
 third_party/sqlite/sqlite-src-3290000/tool/win/sqlite.vsix
 third_party/sqlite/sqlite-src-3290000/vsixtest/vsixtest_TemporaryKey.pfx
+third_party/sqlite/sqlite-src-3300100/test/dbfuzz2-seed1.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata1.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata2.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata3.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata4.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata5.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata6.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata7.db
+third_party/sqlite/sqlite-src-3300100/test/fuzzdata8.db
+third_party/sqlite/sqlite-src-3300100/test/sessionfuzz-data1.db
+third_party/sqlite/sqlite-src-3300100/tool/win/sqlite.vsix
+third_party/sqlite/sqlite-src-3300100/vsixtest/vsixtest_TemporaryKey.pfx
 third_party/swiftshader/third_party/PowerVR_SDK/Builds/Windows/x86_32/Lib/libEGL.lib
 third_party/swiftshader/third_party/PowerVR_SDK/Builds/Windows/x86_32/Lib/libGLES_CM.lib
 third_party/swiftshader/third_party/PowerVR_SDK/Builds/Windows/x86_32/Lib/libGLESv2.lib
@@ -18145,6 +18253,23 @@ third_party/webrtc/test/fuzzers/corpora/audio_processing-corpus/audio-processing
 third_party/webrtc/test/fuzzers/corpora/audio_processing-corpus/audio-processing-1
 third_party/webrtc/test/fuzzers/corpora/audio_processing-corpus/audio-processing-2
 third_party/webrtc/test/fuzzers/corpora/audio_processing-corpus/audio-processing-3
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-0
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-1
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-10
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-11
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-12
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-13
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-14
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-15
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-16
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-2
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-3
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-4
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-5
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-6
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-7
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-8
+third_party/webrtc/test/fuzzers/corpora/dependency_descriptor-corpus/dependency-descriptor-9
 third_party/webrtc/test/fuzzers/corpora/mdns-corpus/1.mdns
 third_party/webrtc/test/fuzzers/corpora/mdns-corpus/10.mdns
 third_party/webrtc/test/fuzzers/corpora/mdns-corpus/11.mdns
@@ -18344,6 +18469,7 @@ third_party/zlib/google/test/data/test.zip
 third_party/zlib/google/test/data/test_encrypted.zip
 third_party/zlib/google/test/data/test_mismatch_size.zip
 third_party/zlib/google/test/data/test_nocompress.zip
+tools/android/elf_compression/test/testdata/lib.so
 tools/binary_size/libsupersize/testdata/mock_apk/assets/en-US.pak
 tools/binary_size/libsupersize/testdata/mock_apk/assets/resources.pak
 tools/clang/scripts/update.pyc
@@ -18351,7 +18477,7 @@ tools/grit/grit/testdata/klonk-alternate-skeleton.rc
 tools/grit/grit/testdata/klonk.rc
 tools/origin_trials/eftest.key
 tools/perf/contrib/media_router_benchmarks/test_site/bear-vp9-opus.webm
-tools/skia_goldctl/goldctl
+tools/skia_goldctl/linux/goldctl
 tools/swarming_client/tests/archive.tar
 tools/win/ChromeDebug/ChromeDebug/Key.snk
 tools/win/ChromeDebug/LowLevel/Key.snk
@@ -18382,6 +18508,7 @@ ui/accessibility/extensions/chromevoxclassic/chromevox/background/earcons/wrap.o
 ui/accessibility/extensions/chromevoxclassic/chromevox/background/earcons/wrap_edge.ogg
 ui/accessibility/fuzz_corpus/ax_table_fuzzer_seed.bin
 ui/display/util/fuzz_corpus/eve
+ui/display/util/fuzz_corpus/hdr
 ui/display/util/fuzz_corpus/hpz32x
 ui/display/util/fuzz_corpus/internal
 ui/display/util/fuzz_corpus/lp2565a

+ 1 - 1
revision.txt

@@ -1 +1 @@
-2
+1

Some files were not shown because too many files changed in this diff